1*1b3f573fSAndroid Build Coastguard Worker<?php 2*1b3f573fSAndroid Build Coastguard Worker 3*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_base.php'); 4*1b3f573fSAndroid Build Coastguard Workerrequire_once('test_util.php'); 5*1b3f573fSAndroid Build Coastguard Worker 6*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\RepeatedField; 7*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\GPBType; 8*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage; 9*1b3f573fSAndroid Build Coastguard Workeruse Foo\TestMessage\Sub; 10*1b3f573fSAndroid Build Coastguard Worker 11*1b3f573fSAndroid Build Coastguard Workerclass ArrayTest extends TestBase 12*1b3f573fSAndroid Build Coastguard Worker{ 13*1b3f573fSAndroid Build Coastguard Worker 14*1b3f573fSAndroid Build Coastguard Worker ######################################################### 15*1b3f573fSAndroid Build Coastguard Worker # Test int32 field. 16*1b3f573fSAndroid Build Coastguard Worker ######################################################### 17*1b3f573fSAndroid Build Coastguard Worker 18*1b3f573fSAndroid Build Coastguard Worker public function testInt32() 19*1b3f573fSAndroid Build Coastguard Worker { 20*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT32); 21*1b3f573fSAndroid Build Coastguard Worker 22*1b3f573fSAndroid Build Coastguard Worker // Test append. 23*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT32; 24*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[0]); 25*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_INT32; 26*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT32, $arr[1]); 27*1b3f573fSAndroid Build Coastguard Worker 28*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 29*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[2]); 30*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT32_FLOAT; 31*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[3]); 32*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT32_FLOAT; 33*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[4]); 34*1b3f573fSAndroid Build Coastguard Worker 35*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 36*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[5]); 37*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 38*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[6]); 39*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT32_STRING; 40*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[7]); 41*1b3f573fSAndroid Build Coastguard Worker 42*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(8, count($arr)); 43*1b3f573fSAndroid Build Coastguard Worker 44*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 45*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 46*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[$i]); 47*1b3f573fSAndroid Build Coastguard Worker } 48*1b3f573fSAndroid Build Coastguard Worker 49*1b3f573fSAndroid Build Coastguard Worker // Test set. 50*1b3f573fSAndroid Build Coastguard Worker $arr[0] = MAX_INT32; 51*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[0]); 52*1b3f573fSAndroid Build Coastguard Worker $arr[1] = MIN_INT32; 53*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT32, $arr[1]); 54*1b3f573fSAndroid Build Coastguard Worker 55*1b3f573fSAndroid Build Coastguard Worker $arr[2] = 1.1; 56*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[2]); 57*1b3f573fSAndroid Build Coastguard Worker $arr[3] = MAX_INT32_FLOAT; 58*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[3]); 59*1b3f573fSAndroid Build Coastguard Worker $arr[4] = MAX_INT32_FLOAT; 60*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[4]); 61*1b3f573fSAndroid Build Coastguard Worker 62*1b3f573fSAndroid Build Coastguard Worker $arr[5] = '2'; 63*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[5]); 64*1b3f573fSAndroid Build Coastguard Worker $arr[6] = '3.1'; 65*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[6]); 66*1b3f573fSAndroid Build Coastguard Worker $arr[7] = MAX_INT32_STRING; 67*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[7]); 68*1b3f573fSAndroid Build Coastguard Worker 69*1b3f573fSAndroid Build Coastguard Worker // Test foreach. 70*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT32); 71*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < 3; $i++) { 72*1b3f573fSAndroid Build Coastguard Worker $arr[] = $i; 73*1b3f573fSAndroid Build Coastguard Worker } 74*1b3f573fSAndroid Build Coastguard Worker $i = 0; 75*1b3f573fSAndroid Build Coastguard Worker foreach ($arr as $val) { 76*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($i++, $val); 77*1b3f573fSAndroid Build Coastguard Worker } 78*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $i); 79*1b3f573fSAndroid Build Coastguard Worker } 80*1b3f573fSAndroid Build Coastguard Worker 81*1b3f573fSAndroid Build Coastguard Worker ######################################################### 82*1b3f573fSAndroid Build Coastguard Worker # Test uint32 field. 83*1b3f573fSAndroid Build Coastguard Worker ######################################################### 84*1b3f573fSAndroid Build Coastguard Worker 85*1b3f573fSAndroid Build Coastguard Worker public function testUint32() 86*1b3f573fSAndroid Build Coastguard Worker { 87*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::UINT32); 88*1b3f573fSAndroid Build Coastguard Worker 89*1b3f573fSAndroid Build Coastguard Worker // Test append. 90*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_UINT32; 91*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[0]); 92*1b3f573fSAndroid Build Coastguard Worker $arr[] = -1; 93*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[1]); 94*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_UINT32; 95*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[2]); 96*1b3f573fSAndroid Build Coastguard Worker 97*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 98*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[3]); 99*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_UINT32_FLOAT; 100*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[4]); 101*1b3f573fSAndroid Build Coastguard Worker $arr[] = -1.0; 102*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[5]); 103*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_UINT32_FLOAT; 104*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[6]); 105*1b3f573fSAndroid Build Coastguard Worker 106*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 107*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[7]); 108*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 109*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[8]); 110*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_UINT32_STRING; 111*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[9]); 112*1b3f573fSAndroid Build Coastguard Worker $arr[] = '-1.0'; 113*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[10]); 114*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_UINT32_STRING; 115*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[11]); 116*1b3f573fSAndroid Build Coastguard Worker 117*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(12, count($arr)); 118*1b3f573fSAndroid Build Coastguard Worker 119*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 120*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 121*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[$i]); 122*1b3f573fSAndroid Build Coastguard Worker } 123*1b3f573fSAndroid Build Coastguard Worker 124*1b3f573fSAndroid Build Coastguard Worker // Test set. 125*1b3f573fSAndroid Build Coastguard Worker $arr[0] = MAX_UINT32; 126*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[0]); 127*1b3f573fSAndroid Build Coastguard Worker $arr[1] = -1; 128*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[1]); 129*1b3f573fSAndroid Build Coastguard Worker $arr[2] = MIN_UINT32; 130*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[2]); 131*1b3f573fSAndroid Build Coastguard Worker 132*1b3f573fSAndroid Build Coastguard Worker $arr[3] = 1.1; 133*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[3]); 134*1b3f573fSAndroid Build Coastguard Worker $arr[4] = MAX_UINT32_FLOAT; 135*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[4]); 136*1b3f573fSAndroid Build Coastguard Worker $arr[5] = -1.0; 137*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[5]); 138*1b3f573fSAndroid Build Coastguard Worker $arr[6] = MIN_UINT32_FLOAT; 139*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[6]); 140*1b3f573fSAndroid Build Coastguard Worker 141*1b3f573fSAndroid Build Coastguard Worker $arr[7] = '2'; 142*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[7]); 143*1b3f573fSAndroid Build Coastguard Worker $arr[8] = '3.1'; 144*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[8]); 145*1b3f573fSAndroid Build Coastguard Worker $arr[9] = MAX_UINT32_STRING; 146*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[9]); 147*1b3f573fSAndroid Build Coastguard Worker $arr[10] = '-1.0'; 148*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[10]); 149*1b3f573fSAndroid Build Coastguard Worker $arr[11] = MIN_UINT32_STRING; 150*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[11]); 151*1b3f573fSAndroid Build Coastguard Worker } 152*1b3f573fSAndroid Build Coastguard Worker 153*1b3f573fSAndroid Build Coastguard Worker ######################################################### 154*1b3f573fSAndroid Build Coastguard Worker # Test int64 field. 155*1b3f573fSAndroid Build Coastguard Worker ######################################################### 156*1b3f573fSAndroid Build Coastguard Worker 157*1b3f573fSAndroid Build Coastguard Worker public function testInt64() 158*1b3f573fSAndroid Build Coastguard Worker { 159*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT64); 160*1b3f573fSAndroid Build Coastguard Worker 161*1b3f573fSAndroid Build Coastguard Worker // Test append. 162*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT64; 163*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_INT64; 164*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 165*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 166*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 167*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_INT64_STRING; 168*1b3f573fSAndroid Build Coastguard Worker $arr[] = MIN_INT64_STRING; 169*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 170*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[0]); 171*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[1]); 172*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[2]); 173*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr[3]); 174*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr[4]); 175*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64_STRING, $arr[5]); 176*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64_STRING, $arr[6]); 177*1b3f573fSAndroid Build Coastguard Worker } else { 178*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[0]); 179*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[1]); 180*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[2]); 181*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[3]); 182*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[4]); 183*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[5]); 184*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[6]); 185*1b3f573fSAndroid Build Coastguard Worker } 186*1b3f573fSAndroid Build Coastguard Worker 187*1b3f573fSAndroid Build Coastguard Worker 188*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(7, count($arr)); 189*1b3f573fSAndroid Build Coastguard Worker 190*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 191*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 192*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 193*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('0', $arr[$i]); 194*1b3f573fSAndroid Build Coastguard Worker } else { 195*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[$i]); 196*1b3f573fSAndroid Build Coastguard Worker } 197*1b3f573fSAndroid Build Coastguard Worker } 198*1b3f573fSAndroid Build Coastguard Worker 199*1b3f573fSAndroid Build Coastguard Worker // Test set. 200*1b3f573fSAndroid Build Coastguard Worker $arr[0] = MAX_INT64; 201*1b3f573fSAndroid Build Coastguard Worker $arr[1] = MIN_INT64; 202*1b3f573fSAndroid Build Coastguard Worker $arr[2] = 1.1; 203*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '2'; 204*1b3f573fSAndroid Build Coastguard Worker $arr[4] = '3.1'; 205*1b3f573fSAndroid Build Coastguard Worker $arr[5] = MAX_INT64_STRING; 206*1b3f573fSAndroid Build Coastguard Worker $arr[6] = MIN_INT64_STRING; 207*1b3f573fSAndroid Build Coastguard Worker 208*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 209*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64_STRING, $arr[0]); 210*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64_STRING, $arr[1]); 211*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[2]); 212*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr[3]); 213*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr[4]); 214*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64_STRING, $arr[5]); 215*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(MIN_INT64_STRING, $arr[6]); 216*1b3f573fSAndroid Build Coastguard Worker } else { 217*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[0]); 218*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[1]); 219*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[2]); 220*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[3]); 221*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[4]); 222*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[5]); 223*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(MIN_INT64, $arr[6]); 224*1b3f573fSAndroid Build Coastguard Worker } 225*1b3f573fSAndroid Build Coastguard Worker } 226*1b3f573fSAndroid Build Coastguard Worker 227*1b3f573fSAndroid Build Coastguard Worker ######################################################### 228*1b3f573fSAndroid Build Coastguard Worker # Test uint64 field. 229*1b3f573fSAndroid Build Coastguard Worker ######################################################### 230*1b3f573fSAndroid Build Coastguard Worker 231*1b3f573fSAndroid Build Coastguard Worker public function testUint64() 232*1b3f573fSAndroid Build Coastguard Worker { 233*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::UINT64); 234*1b3f573fSAndroid Build Coastguard Worker 235*1b3f573fSAndroid Build Coastguard Worker // Test append. 236*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_UINT64; 237*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 238*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 239*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 240*1b3f573fSAndroid Build Coastguard Worker $arr[] = MAX_UINT64_STRING; 241*1b3f573fSAndroid Build Coastguard Worker 242*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 243*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[0]); 244*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[1]); 245*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr[2]); 246*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr[3]); 247*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[4]); 248*1b3f573fSAndroid Build Coastguard Worker } else { 249*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[0]); 250*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 251*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 252*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 253*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[4]); 254*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(5, count($arr)); 255*1b3f573fSAndroid Build Coastguard Worker } 256*1b3f573fSAndroid Build Coastguard Worker 257*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(5, count($arr)); 258*1b3f573fSAndroid Build Coastguard Worker 259*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 260*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 261*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 262*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('0', $arr[$i]); 263*1b3f573fSAndroid Build Coastguard Worker } else { 264*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[$i]); 265*1b3f573fSAndroid Build Coastguard Worker } 266*1b3f573fSAndroid Build Coastguard Worker } 267*1b3f573fSAndroid Build Coastguard Worker 268*1b3f573fSAndroid Build Coastguard Worker // Test set. 269*1b3f573fSAndroid Build Coastguard Worker $arr[0] = MAX_UINT64; 270*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1.1; 271*1b3f573fSAndroid Build Coastguard Worker $arr[2] = '2'; 272*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '3.1'; 273*1b3f573fSAndroid Build Coastguard Worker $arr[4] = MAX_UINT64_STRING; 274*1b3f573fSAndroid Build Coastguard Worker 275*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 276*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[0]); 277*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[1]); 278*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr[2]); 279*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr[3]); 280*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[4]); 281*1b3f573fSAndroid Build Coastguard Worker } else { 282*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[0]); 283*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 284*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 285*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 286*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[4]); 287*1b3f573fSAndroid Build Coastguard Worker } 288*1b3f573fSAndroid Build Coastguard Worker } 289*1b3f573fSAndroid Build Coastguard Worker 290*1b3f573fSAndroid Build Coastguard Worker ######################################################### 291*1b3f573fSAndroid Build Coastguard Worker # Test float field. 292*1b3f573fSAndroid Build Coastguard Worker ######################################################### 293*1b3f573fSAndroid Build Coastguard Worker 294*1b3f573fSAndroid Build Coastguard Worker public function testFloat() 295*1b3f573fSAndroid Build Coastguard Worker { 296*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::FLOAT); 297*1b3f573fSAndroid Build Coastguard Worker 298*1b3f573fSAndroid Build Coastguard Worker // Test append. 299*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1; 300*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 301*1b3f573fSAndroid Build Coastguard Worker 302*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 303*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 304*1b3f573fSAndroid Build Coastguard Worker 305*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 306*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 307*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 308*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 309*1b3f573fSAndroid Build Coastguard Worker 310*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 311*1b3f573fSAndroid Build Coastguard Worker 312*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 313*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 314*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0.0, $arr[$i]); 315*1b3f573fSAndroid Build Coastguard Worker } 316*1b3f573fSAndroid Build Coastguard Worker 317*1b3f573fSAndroid Build Coastguard Worker // Test set. 318*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 1; 319*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 320*1b3f573fSAndroid Build Coastguard Worker 321*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1.1; 322*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 323*1b3f573fSAndroid Build Coastguard Worker 324*1b3f573fSAndroid Build Coastguard Worker $arr[2] = '2'; 325*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 326*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '3.1'; 327*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 328*1b3f573fSAndroid Build Coastguard Worker } 329*1b3f573fSAndroid Build Coastguard Worker 330*1b3f573fSAndroid Build Coastguard Worker ######################################################### 331*1b3f573fSAndroid Build Coastguard Worker # Test double field. 332*1b3f573fSAndroid Build Coastguard Worker ######################################################### 333*1b3f573fSAndroid Build Coastguard Worker 334*1b3f573fSAndroid Build Coastguard Worker public function testDouble() 335*1b3f573fSAndroid Build Coastguard Worker { 336*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::DOUBLE); 337*1b3f573fSAndroid Build Coastguard Worker 338*1b3f573fSAndroid Build Coastguard Worker // Test append. 339*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1; 340*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 341*1b3f573fSAndroid Build Coastguard Worker 342*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 343*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 344*1b3f573fSAndroid Build Coastguard Worker 345*1b3f573fSAndroid Build Coastguard Worker $arr[] = '2'; 346*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 347*1b3f573fSAndroid Build Coastguard Worker $arr[] = '3.1'; 348*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 349*1b3f573fSAndroid Build Coastguard Worker 350*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 351*1b3f573fSAndroid Build Coastguard Worker 352*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 353*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 354*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0.0, $arr[$i]); 355*1b3f573fSAndroid Build Coastguard Worker } 356*1b3f573fSAndroid Build Coastguard Worker 357*1b3f573fSAndroid Build Coastguard Worker // Test set. 358*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 1; 359*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 360*1b3f573fSAndroid Build Coastguard Worker 361*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1.1; 362*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 363*1b3f573fSAndroid Build Coastguard Worker 364*1b3f573fSAndroid Build Coastguard Worker $arr[2] = '2'; 365*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 366*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '3.1'; 367*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 368*1b3f573fSAndroid Build Coastguard Worker } 369*1b3f573fSAndroid Build Coastguard Worker 370*1b3f573fSAndroid Build Coastguard Worker ######################################################### 371*1b3f573fSAndroid Build Coastguard Worker # Test bool field. 372*1b3f573fSAndroid Build Coastguard Worker ######################################################### 373*1b3f573fSAndroid Build Coastguard Worker 374*1b3f573fSAndroid Build Coastguard Worker public function testBool() 375*1b3f573fSAndroid Build Coastguard Worker { 376*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::BOOL); 377*1b3f573fSAndroid Build Coastguard Worker 378*1b3f573fSAndroid Build Coastguard Worker // Test append. 379*1b3f573fSAndroid Build Coastguard Worker $arr[] = true; 380*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[0]); 381*1b3f573fSAndroid Build Coastguard Worker 382*1b3f573fSAndroid Build Coastguard Worker $arr[] = -1; 383*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[1]); 384*1b3f573fSAndroid Build Coastguard Worker 385*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 386*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[2]); 387*1b3f573fSAndroid Build Coastguard Worker 388*1b3f573fSAndroid Build Coastguard Worker $arr[] = ''; 389*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(false, $arr[3]); 390*1b3f573fSAndroid Build Coastguard Worker 391*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 392*1b3f573fSAndroid Build Coastguard Worker 393*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 394*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = 0; 395*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(false, $arr[$i]); 396*1b3f573fSAndroid Build Coastguard Worker } 397*1b3f573fSAndroid Build Coastguard Worker 398*1b3f573fSAndroid Build Coastguard Worker // Test set. 399*1b3f573fSAndroid Build Coastguard Worker $arr[0] = true; 400*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[0]); 401*1b3f573fSAndroid Build Coastguard Worker 402*1b3f573fSAndroid Build Coastguard Worker $arr[1] = -1; 403*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[1]); 404*1b3f573fSAndroid Build Coastguard Worker 405*1b3f573fSAndroid Build Coastguard Worker $arr[2] = 1.1; 406*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(true, $arr[2]); 407*1b3f573fSAndroid Build Coastguard Worker 408*1b3f573fSAndroid Build Coastguard Worker $arr[3] = ''; 409*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(false, $arr[3]); 410*1b3f573fSAndroid Build Coastguard Worker } 411*1b3f573fSAndroid Build Coastguard Worker 412*1b3f573fSAndroid Build Coastguard Worker ######################################################### 413*1b3f573fSAndroid Build Coastguard Worker # Test string field. 414*1b3f573fSAndroid Build Coastguard Worker ######################################################### 415*1b3f573fSAndroid Build Coastguard Worker 416*1b3f573fSAndroid Build Coastguard Worker public function testString() 417*1b3f573fSAndroid Build Coastguard Worker { 418*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::STRING); 419*1b3f573fSAndroid Build Coastguard Worker 420*1b3f573fSAndroid Build Coastguard Worker // Test append. 421*1b3f573fSAndroid Build Coastguard Worker $arr[] = 'abc'; 422*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('abc', $arr[0]); 423*1b3f573fSAndroid Build Coastguard Worker 424*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1; 425*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[1]); 426*1b3f573fSAndroid Build Coastguard Worker 427*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1.1; 428*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1.1', $arr[2]); 429*1b3f573fSAndroid Build Coastguard Worker 430*1b3f573fSAndroid Build Coastguard Worker $arr[] = true; 431*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[3]); 432*1b3f573fSAndroid Build Coastguard Worker 433*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 434*1b3f573fSAndroid Build Coastguard Worker 435*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < count($arr); $i++) { 436*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = ''; 437*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('', $arr[$i]); 438*1b3f573fSAndroid Build Coastguard Worker } 439*1b3f573fSAndroid Build Coastguard Worker 440*1b3f573fSAndroid Build Coastguard Worker // Test set. 441*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 'abc'; 442*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('abc', $arr[0]); 443*1b3f573fSAndroid Build Coastguard Worker 444*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1; 445*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[1]); 446*1b3f573fSAndroid Build Coastguard Worker 447*1b3f573fSAndroid Build Coastguard Worker $arr[2] = 1.1; 448*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1.1', $arr[2]); 449*1b3f573fSAndroid Build Coastguard Worker 450*1b3f573fSAndroid Build Coastguard Worker $arr[3] = true; 451*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr[3]); 452*1b3f573fSAndroid Build Coastguard Worker } 453*1b3f573fSAndroid Build Coastguard Worker 454*1b3f573fSAndroid Build Coastguard Worker ######################################################### 455*1b3f573fSAndroid Build Coastguard Worker # Test message field. 456*1b3f573fSAndroid Build Coastguard Worker ######################################################### 457*1b3f573fSAndroid Build Coastguard Worker 458*1b3f573fSAndroid Build Coastguard Worker public function testMessage() 459*1b3f573fSAndroid Build Coastguard Worker { 460*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::MESSAGE, Sub::class); 461*1b3f573fSAndroid Build Coastguard Worker 462*1b3f573fSAndroid Build Coastguard Worker // Test append. 463*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 464*1b3f573fSAndroid Build Coastguard Worker $sub_m->setA(1); 465*1b3f573fSAndroid Build Coastguard Worker $arr[] = $sub_m; 466*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[0]->getA()); 467*1b3f573fSAndroid Build Coastguard Worker 468*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 469*1b3f573fSAndroid Build Coastguard Worker 470*1b3f573fSAndroid Build Coastguard Worker // Test set. 471*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 472*1b3f573fSAndroid Build Coastguard Worker $sub_m->setA(2); 473*1b3f573fSAndroid Build Coastguard Worker $arr[0] = $sub_m; 474*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[0]->getA()); 475*1b3f573fSAndroid Build Coastguard Worker 476*1b3f573fSAndroid Build Coastguard Worker // Test foreach. 477*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::MESSAGE, Sub::class); 478*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < 3; $i++) { 479*1b3f573fSAndroid Build Coastguard Worker $arr[] = new Sub(); 480*1b3f573fSAndroid Build Coastguard Worker $arr[$i]->setA($i); 481*1b3f573fSAndroid Build Coastguard Worker } 482*1b3f573fSAndroid Build Coastguard Worker $i = 0; 483*1b3f573fSAndroid Build Coastguard Worker foreach ($arr as $val) { 484*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($i++, $val->getA()); 485*1b3f573fSAndroid Build Coastguard Worker } 486*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $i); 487*1b3f573fSAndroid Build Coastguard Worker } 488*1b3f573fSAndroid Build Coastguard Worker 489*1b3f573fSAndroid Build Coastguard Worker ######################################################### 490*1b3f573fSAndroid Build Coastguard Worker # Test offset type 491*1b3f573fSAndroid Build Coastguard Worker ######################################################### 492*1b3f573fSAndroid Build Coastguard Worker 493*1b3f573fSAndroid Build Coastguard Worker public function testOffset() 494*1b3f573fSAndroid Build Coastguard Worker { 495*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT32); 496*1b3f573fSAndroid Build Coastguard Worker $arr[] = 0; 497*1b3f573fSAndroid Build Coastguard Worker 498*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 1; 499*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[0]); 500*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, count($arr)); 501*1b3f573fSAndroid Build Coastguard Worker 502*1b3f573fSAndroid Build Coastguard Worker $arr['0'] = 2; 503*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr['0']); 504*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[0]); 505*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, count($arr)); 506*1b3f573fSAndroid Build Coastguard Worker 507*1b3f573fSAndroid Build Coastguard Worker $arr[0.0] = 3; 508*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[0.0]); 509*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, count($arr)); 510*1b3f573fSAndroid Build Coastguard Worker } 511*1b3f573fSAndroid Build Coastguard Worker 512*1b3f573fSAndroid Build Coastguard Worker public function testInsertRemoval() 513*1b3f573fSAndroid Build Coastguard Worker { 514*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT32); 515*1b3f573fSAndroid Build Coastguard Worker 516*1b3f573fSAndroid Build Coastguard Worker $arr[] = 0; 517*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1; 518*1b3f573fSAndroid Build Coastguard Worker $arr[] = 2; 519*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, count($arr)); 520*1b3f573fSAndroid Build Coastguard Worker 521*1b3f573fSAndroid Build Coastguard Worker unset($arr[2]); 522*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, count($arr)); 523*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[0]); 524*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 525*1b3f573fSAndroid Build Coastguard Worker 526*1b3f573fSAndroid Build Coastguard Worker $arr[] = 3; 527*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, count($arr)); 528*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(0, $arr[0]); 529*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 530*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[2]); 531*1b3f573fSAndroid Build Coastguard Worker } 532*1b3f573fSAndroid Build Coastguard Worker 533*1b3f573fSAndroid Build Coastguard Worker ######################################################### 534*1b3f573fSAndroid Build Coastguard Worker # Test reference in array 535*1b3f573fSAndroid Build Coastguard Worker ######################################################### 536*1b3f573fSAndroid Build Coastguard Worker 537*1b3f573fSAndroid Build Coastguard Worker public function testArrayElementIsReferenceInSetters() 538*1b3f573fSAndroid Build Coastguard Worker { 539*1b3f573fSAndroid Build Coastguard Worker // Bool elements 540*1b3f573fSAndroid Build Coastguard Worker $values = [true]; 541*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 542*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 543*1b3f573fSAndroid Build Coastguard Worker $m->setRepeatedBool($values); 544*1b3f573fSAndroid Build Coastguard Worker 545*1b3f573fSAndroid Build Coastguard Worker // Int32 elements 546*1b3f573fSAndroid Build Coastguard Worker $values = [1]; 547*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 548*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 549*1b3f573fSAndroid Build Coastguard Worker $m->setRepeatedInt32($values); 550*1b3f573fSAndroid Build Coastguard Worker 551*1b3f573fSAndroid Build Coastguard Worker // Double elements 552*1b3f573fSAndroid Build Coastguard Worker $values = [1.0]; 553*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 554*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 555*1b3f573fSAndroid Build Coastguard Worker $m->setRepeatedDouble($values); 556*1b3f573fSAndroid Build Coastguard Worker 557*1b3f573fSAndroid Build Coastguard Worker // String elements 558*1b3f573fSAndroid Build Coastguard Worker $values = ['a']; 559*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 560*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 561*1b3f573fSAndroid Build Coastguard Worker $m->setRepeatedString($values); 562*1b3f573fSAndroid Build Coastguard Worker 563*1b3f573fSAndroid Build Coastguard Worker // Message elements 564*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 565*1b3f573fSAndroid Build Coastguard Worker $subs = [1, 2]; 566*1b3f573fSAndroid Build Coastguard Worker foreach ($subs as &$sub) { 567*1b3f573fSAndroid Build Coastguard Worker $sub = new Sub(['a' => $sub]); 568*1b3f573fSAndroid Build Coastguard Worker } 569*1b3f573fSAndroid Build Coastguard Worker $m->setRepeatedMessage($subs); 570*1b3f573fSAndroid Build Coastguard Worker 571*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 572*1b3f573fSAndroid Build Coastguard Worker } 573*1b3f573fSAndroid Build Coastguard Worker 574*1b3f573fSAndroid Build Coastguard Worker ######################################################### 575*1b3f573fSAndroid Build Coastguard Worker # Test memory leak 576*1b3f573fSAndroid Build Coastguard Worker ######################################################### 577*1b3f573fSAndroid Build Coastguard Worker 578*1b3f573fSAndroid Build Coastguard Worker public function testCycleLeak() 579*1b3f573fSAndroid Build Coastguard Worker { 580*1b3f573fSAndroid Build Coastguard Worker if (getenv("USE_ZEND_ALLOC") === "0") { 581*1b3f573fSAndroid Build Coastguard Worker // If we are disabling Zend's internal allocator (as we do for 582*1b3f573fSAndroid Build Coastguard Worker // Valgrind tests, for example) then memory_get_usage() will not 583*1b3f573fSAndroid Build Coastguard Worker // return a useful value. 584*1b3f573fSAndroid Build Coastguard Worker $this->markTestSkipped(); 585*1b3f573fSAndroid Build Coastguard Worker return; 586*1b3f573fSAndroid Build Coastguard Worker } 587*1b3f573fSAndroid Build Coastguard Worker 588*1b3f573fSAndroid Build Coastguard Worker gc_collect_cycles(); 589*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class); 590*1b3f573fSAndroid Build Coastguard Worker $arr[] = new TestMessage; 591*1b3f573fSAndroid Build Coastguard Worker $arr[0]->SetRepeatedRecursive($arr); 592*1b3f573fSAndroid Build Coastguard Worker 593*1b3f573fSAndroid Build Coastguard Worker // Clean up memory before test. 594*1b3f573fSAndroid Build Coastguard Worker gc_collect_cycles(); 595*1b3f573fSAndroid Build Coastguard Worker $start = memory_get_usage(); 596*1b3f573fSAndroid Build Coastguard Worker unset($arr); 597*1b3f573fSAndroid Build Coastguard Worker 598*1b3f573fSAndroid Build Coastguard Worker // Explicitly trigger garbage collection. 599*1b3f573fSAndroid Build Coastguard Worker gc_collect_cycles(); 600*1b3f573fSAndroid Build Coastguard Worker 601*1b3f573fSAndroid Build Coastguard Worker $end = memory_get_usage(); 602*1b3f573fSAndroid Build Coastguard Worker $this->assertLessThan($start, $end); 603*1b3f573fSAndroid Build Coastguard Worker } 604*1b3f573fSAndroid Build Coastguard Worker 605*1b3f573fSAndroid Build Coastguard Worker ######################################################### 606*1b3f573fSAndroid Build Coastguard Worker # Test incorrect types 607*1b3f573fSAndroid Build Coastguard Worker ######################################################### 608*1b3f573fSAndroid Build Coastguard Worker 609*1b3f573fSAndroid Build Coastguard Worker public function testAppendNull() 610*1b3f573fSAndroid Build Coastguard Worker { 611*1b3f573fSAndroid Build Coastguard Worker $this->expectException(TypeError::class); 612*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class); 613*1b3f573fSAndroid Build Coastguard Worker $arr[] = null; 614*1b3f573fSAndroid Build Coastguard Worker } 615*1b3f573fSAndroid Build Coastguard Worker 616*1b3f573fSAndroid Build Coastguard Worker ######################################################### 617*1b3f573fSAndroid Build Coastguard Worker # Test equality 618*1b3f573fSAndroid Build Coastguard Worker ######################################################### 619*1b3f573fSAndroid Build Coastguard Worker 620*1b3f573fSAndroid Build Coastguard Worker public function testEquality() 621*1b3f573fSAndroid Build Coastguard Worker { 622*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::INT32); 623*1b3f573fSAndroid Build Coastguard Worker $arr2 = new RepeatedField(GPBType::INT32); 624*1b3f573fSAndroid Build Coastguard Worker 625*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($arr == $arr2); 626*1b3f573fSAndroid Build Coastguard Worker 627*1b3f573fSAndroid Build Coastguard Worker $arr[] = 0; 628*1b3f573fSAndroid Build Coastguard Worker $arr[] = 1; 629*1b3f573fSAndroid Build Coastguard Worker $arr[] = 2; 630*1b3f573fSAndroid Build Coastguard Worker 631*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($arr == $arr2); 632*1b3f573fSAndroid Build Coastguard Worker 633*1b3f573fSAndroid Build Coastguard Worker $arr2[] = 0; 634*1b3f573fSAndroid Build Coastguard Worker $arr2[] = 1; 635*1b3f573fSAndroid Build Coastguard Worker $arr2[] = 2; 636*1b3f573fSAndroid Build Coastguard Worker 637*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($arr == $arr2); 638*1b3f573fSAndroid Build Coastguard Worker 639*1b3f573fSAndroid Build Coastguard Worker // Arrays of different types always compare false. 640*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse(new RepeatedField(GPBType::INT32) == 641*1b3f573fSAndroid Build Coastguard Worker new RepeatedField(GPBType::INT64)); 642*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse( 643*1b3f573fSAndroid Build Coastguard Worker new RepeatedField(GPBType::MESSAGE, TestMessage::class) == 644*1b3f573fSAndroid Build Coastguard Worker new RepeatedField(GPBType::MESSAGE, Sub::class)); 645*1b3f573fSAndroid Build Coastguard Worker } 646*1b3f573fSAndroid Build Coastguard Worker 647*1b3f573fSAndroid Build Coastguard Worker ######################################################### 648*1b3f573fSAndroid Build Coastguard Worker # Test clone 649*1b3f573fSAndroid Build Coastguard Worker ######################################################### 650*1b3f573fSAndroid Build Coastguard Worker 651*1b3f573fSAndroid Build Coastguard Worker public function testClone() 652*1b3f573fSAndroid Build Coastguard Worker { 653*1b3f573fSAndroid Build Coastguard Worker $arr = new RepeatedField(GPBType::MESSAGE, TestMessage::class); 654*1b3f573fSAndroid Build Coastguard Worker $arr[] = new TestMessage; 655*1b3f573fSAndroid Build Coastguard Worker $arr2 = clone $arr; 656*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($arr[0], $arr2[0]); 657*1b3f573fSAndroid Build Coastguard Worker } 658*1b3f573fSAndroid Build Coastguard Worker} 659