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\GPBType; 7*1b3f573fSAndroid Build Coastguard Workeruse Google\Protobuf\Internal\MapField; 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 MapFieldTest extends TestBase { 12*1b3f573fSAndroid Build Coastguard Worker 13*1b3f573fSAndroid Build Coastguard Worker ######################################################### 14*1b3f573fSAndroid Build Coastguard Worker # Test int32 field. 15*1b3f573fSAndroid Build Coastguard Worker ######################################################### 16*1b3f573fSAndroid Build Coastguard Worker 17*1b3f573fSAndroid Build Coastguard Worker public function testInt32() { 18*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, GPBType::INT32); 19*1b3f573fSAndroid Build Coastguard Worker 20*1b3f573fSAndroid Build Coastguard Worker // Test integer argument. 21*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_INT32] = MAX_INT32; 22*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[MAX_INT32]); 23*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_INT32] = MIN_INT32; 24*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT32, $arr[MIN_INT32]); 25*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(2, count($arr)); 26*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr[MAX_INT32])); 27*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr[MIN_INT32])); 28*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_INT32]); 29*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_INT32]); 30*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 31*1b3f573fSAndroid Build Coastguard Worker 32*1b3f573fSAndroid Build Coastguard Worker // Test float argument. 33*1b3f573fSAndroid Build Coastguard Worker $arr[1.9] = 1.9; 34*1b3f573fSAndroid Build Coastguard Worker $arr[2.1] = 2.1; 35*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 36*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 37*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_INT32_FLOAT] = MAX_INT32_FLOAT; 38*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[MAX_INT32]); 39*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_INT32_FLOAT] = MIN_INT32_FLOAT; 40*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT32, $arr[MIN_INT32]); 41*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 42*1b3f573fSAndroid Build Coastguard Worker unset($arr[1.9]); 43*1b3f573fSAndroid Build Coastguard Worker unset($arr[2.9]); 44*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_INT32_FLOAT]); 45*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_INT32_FLOAT]); 46*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 47*1b3f573fSAndroid Build Coastguard Worker 48*1b3f573fSAndroid Build Coastguard Worker // Test string argument. 49*1b3f573fSAndroid Build Coastguard Worker $arr['2'] = '2'; 50*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 51*1b3f573fSAndroid Build Coastguard Worker $arr['3.1'] = '3.1'; 52*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 53*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_INT32_STRING] = MAX_INT32_STRING; 54*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT32, $arr[MAX_INT32]); 55*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(3, count($arr)); 56*1b3f573fSAndroid Build Coastguard Worker unset($arr['2']); 57*1b3f573fSAndroid Build Coastguard Worker unset($arr['3.1']); 58*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_INT32_STRING]); 59*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 60*1b3f573fSAndroid Build Coastguard Worker 61*1b3f573fSAndroid Build Coastguard Worker // Test foreach. 62*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, GPBType::INT32); 63*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < 3; $i++) { 64*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = $i; 65*1b3f573fSAndroid Build Coastguard Worker } 66*1b3f573fSAndroid Build Coastguard Worker $i = 0; 67*1b3f573fSAndroid Build Coastguard Worker $arr_test = []; 68*1b3f573fSAndroid Build Coastguard Worker foreach ($arr as $key => $val) { 69*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($key, $val); 70*1b3f573fSAndroid Build Coastguard Worker $arr_test[] = $key; 71*1b3f573fSAndroid Build Coastguard Worker $i++; 72*1b3f573fSAndroid Build Coastguard Worker } 73*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test[0])); 74*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test[1])); 75*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test[2])); 76*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $i); 77*1b3f573fSAndroid Build Coastguard Worker } 78*1b3f573fSAndroid Build Coastguard Worker 79*1b3f573fSAndroid Build Coastguard Worker ######################################################### 80*1b3f573fSAndroid Build Coastguard Worker # Test uint32 field. 81*1b3f573fSAndroid Build Coastguard Worker ######################################################### 82*1b3f573fSAndroid Build Coastguard Worker 83*1b3f573fSAndroid Build Coastguard Worker public function testUint32() { 84*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::UINT32, GPBType::UINT32); 85*1b3f573fSAndroid Build Coastguard Worker 86*1b3f573fSAndroid Build Coastguard Worker // Test integer argument. 87*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_UINT32] = MAX_UINT32; 88*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 89*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 90*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_UINT32]); 91*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 92*1b3f573fSAndroid Build Coastguard Worker 93*1b3f573fSAndroid Build Coastguard Worker $arr[-1] = -1; 94*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 95*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_UINT32] = MIN_UINT32; 96*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[MIN_UINT32]); 97*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(2, count($arr)); 98*1b3f573fSAndroid Build Coastguard Worker unset($arr[-1]); 99*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_UINT32]); 100*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 101*1b3f573fSAndroid Build Coastguard Worker 102*1b3f573fSAndroid Build Coastguard Worker // Test float argument. 103*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_UINT32_FLOAT] = MAX_UINT32_FLOAT; 104*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 105*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 106*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_UINT32_FLOAT]); 107*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 108*1b3f573fSAndroid Build Coastguard Worker 109*1b3f573fSAndroid Build Coastguard Worker $arr[3.1] = 3.1; 110*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 111*1b3f573fSAndroid Build Coastguard Worker $arr[-1.0] = -1.0; 112*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 113*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_UINT32_FLOAT] = MIN_UINT32_FLOAT; 114*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[MIN_UINT32]); 115*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(3, count($arr)); 116*1b3f573fSAndroid Build Coastguard Worker unset($arr[3.1]); 117*1b3f573fSAndroid Build Coastguard Worker unset($arr[-1.0]); 118*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_UINT32_FLOAT]); 119*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 120*1b3f573fSAndroid Build Coastguard Worker 121*1b3f573fSAndroid Build Coastguard Worker // Test string argument. 122*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_UINT32_STRING] = MAX_UINT32_STRING; 123*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 124*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 125*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_UINT32_STRING]); 126*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 127*1b3f573fSAndroid Build Coastguard Worker 128*1b3f573fSAndroid Build Coastguard Worker $arr['7'] = '7'; 129*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(7, $arr[7]); 130*1b3f573fSAndroid Build Coastguard Worker $arr['3.1'] = '3.1'; 131*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 132*1b3f573fSAndroid Build Coastguard Worker $arr['-1.0'] = '-1.0'; 133*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(-1, $arr[-1]); 134*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_UINT32_STRING] = MIN_UINT32_STRING; 135*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_UINT32, $arr[MIN_UINT32]); 136*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 137*1b3f573fSAndroid Build Coastguard Worker unset($arr['7']); 138*1b3f573fSAndroid Build Coastguard Worker unset($arr['3.1']); 139*1b3f573fSAndroid Build Coastguard Worker unset($arr['-1.0']); 140*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_UINT32_STRING]); 141*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 142*1b3f573fSAndroid Build Coastguard Worker } 143*1b3f573fSAndroid Build Coastguard Worker 144*1b3f573fSAndroid Build Coastguard Worker ######################################################### 145*1b3f573fSAndroid Build Coastguard Worker # Test int64 field. 146*1b3f573fSAndroid Build Coastguard Worker ######################################################### 147*1b3f573fSAndroid Build Coastguard Worker 148*1b3f573fSAndroid Build Coastguard Worker public function testInt64() { 149*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT64, GPBType::INT64); 150*1b3f573fSAndroid Build Coastguard Worker 151*1b3f573fSAndroid Build Coastguard Worker // Test integer argument. 152*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_INT64] = MAX_INT64; 153*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_INT64] = MIN_INT64; 154*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 155*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64_STRING, $arr[MAX_INT64_STRING]); 156*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64_STRING, $arr[MIN_INT64_STRING]); 157*1b3f573fSAndroid Build Coastguard Worker } else { 158*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[MAX_INT64]); 159*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[MIN_INT64]); 160*1b3f573fSAndroid Build Coastguard Worker } 161*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(2, count($arr)); 162*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_INT64]); 163*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_INT64]); 164*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 165*1b3f573fSAndroid Build Coastguard Worker 166*1b3f573fSAndroid Build Coastguard Worker // Test float argument. 167*1b3f573fSAndroid Build Coastguard Worker $arr[1.1] = 1.1; 168*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 169*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr['1']); 170*1b3f573fSAndroid Build Coastguard Worker } else { 171*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 172*1b3f573fSAndroid Build Coastguard Worker } 173*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 174*1b3f573fSAndroid Build Coastguard Worker unset($arr[1.1]); 175*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 176*1b3f573fSAndroid Build Coastguard Worker 177*1b3f573fSAndroid Build Coastguard Worker // Test string argument. 178*1b3f573fSAndroid Build Coastguard Worker $arr['2'] = '2'; 179*1b3f573fSAndroid Build Coastguard Worker $arr['3.1'] = '3.1'; 180*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_INT64_STRING] = MAX_INT64_STRING; 181*1b3f573fSAndroid Build Coastguard Worker $arr[MIN_INT64_STRING] = MIN_INT64_STRING; 182*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 183*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr['2']); 184*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr['3']); 185*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64_STRING, $arr[MAX_INT64_STRING]); 186*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64_STRING, $arr[MIN_INT64_STRING]); 187*1b3f573fSAndroid Build Coastguard Worker } else { 188*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 189*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 190*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_INT64, $arr[MAX_INT64]); 191*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MIN_INT64, $arr[MIN_INT64]); 192*1b3f573fSAndroid Build Coastguard Worker } 193*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 194*1b3f573fSAndroid Build Coastguard Worker unset($arr['2']); 195*1b3f573fSAndroid Build Coastguard Worker unset($arr['3.1']); 196*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_INT64_STRING]); 197*1b3f573fSAndroid Build Coastguard Worker unset($arr[MIN_INT64_STRING]); 198*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 199*1b3f573fSAndroid Build Coastguard Worker } 200*1b3f573fSAndroid Build Coastguard Worker 201*1b3f573fSAndroid Build Coastguard Worker ######################################################### 202*1b3f573fSAndroid Build Coastguard Worker # Test uint64 field. 203*1b3f573fSAndroid Build Coastguard Worker ######################################################### 204*1b3f573fSAndroid Build Coastguard Worker 205*1b3f573fSAndroid Build Coastguard Worker public function testUint64() { 206*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::UINT64, GPBType::UINT64); 207*1b3f573fSAndroid Build Coastguard Worker 208*1b3f573fSAndroid Build Coastguard Worker // Test integer argument. 209*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_UINT64] = MAX_UINT64; 210*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 211*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[MAX_UINT64_STRING]); 212*1b3f573fSAndroid Build Coastguard Worker } else { 213*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[MAX_UINT64]); 214*1b3f573fSAndroid Build Coastguard Worker } 215*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 216*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_UINT64]); 217*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 218*1b3f573fSAndroid Build Coastguard Worker 219*1b3f573fSAndroid Build Coastguard Worker // Test float argument. 220*1b3f573fSAndroid Build Coastguard Worker $arr[1.1] = 1.1; 221*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 222*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr['1']); 223*1b3f573fSAndroid Build Coastguard Worker } else { 224*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[1]); 225*1b3f573fSAndroid Build Coastguard Worker } 226*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 227*1b3f573fSAndroid Build Coastguard Worker unset($arr[1.1]); 228*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 229*1b3f573fSAndroid Build Coastguard Worker 230*1b3f573fSAndroid Build Coastguard Worker // Test string argument. 231*1b3f573fSAndroid Build Coastguard Worker $arr['2'] = '2'; 232*1b3f573fSAndroid Build Coastguard Worker $arr['3.1'] = '3.1'; 233*1b3f573fSAndroid Build Coastguard Worker $arr[MAX_UINT64_STRING] = MAX_UINT64_STRING; 234*1b3f573fSAndroid Build Coastguard Worker 235*1b3f573fSAndroid Build Coastguard Worker if (PHP_INT_SIZE == 4) { 236*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('2', $arr['2']); 237*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('3', $arr['3']); 238*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64_STRING, $arr[MAX_UINT64_STRING]); 239*1b3f573fSAndroid Build Coastguard Worker } else { 240*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(2, $arr[2]); 241*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $arr[3]); 242*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(MAX_UINT64, $arr[MAX_UINT64]); 243*1b3f573fSAndroid Build Coastguard Worker } 244*1b3f573fSAndroid Build Coastguard Worker 245*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(3, count($arr)); 246*1b3f573fSAndroid Build Coastguard Worker unset($arr['2']); 247*1b3f573fSAndroid Build Coastguard Worker unset($arr['3.1']); 248*1b3f573fSAndroid Build Coastguard Worker unset($arr[MAX_UINT64_STRING]); 249*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 250*1b3f573fSAndroid Build Coastguard Worker } 251*1b3f573fSAndroid Build Coastguard Worker 252*1b3f573fSAndroid Build Coastguard Worker ######################################################### 253*1b3f573fSAndroid Build Coastguard Worker # Test float field. 254*1b3f573fSAndroid Build Coastguard Worker ######################################################### 255*1b3f573fSAndroid Build Coastguard Worker 256*1b3f573fSAndroid Build Coastguard Worker public function testFloat() { 257*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, GPBType::FLOAT); 258*1b3f573fSAndroid Build Coastguard Worker 259*1b3f573fSAndroid Build Coastguard Worker // Test set. 260*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 1; 261*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 262*1b3f573fSAndroid Build Coastguard Worker 263*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1.1; 264*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 265*1b3f573fSAndroid Build Coastguard Worker 266*1b3f573fSAndroid Build Coastguard Worker $arr[2] = '2'; 267*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 268*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '3.1'; 269*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 270*1b3f573fSAndroid Build Coastguard Worker 271*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 272*1b3f573fSAndroid Build Coastguard Worker } 273*1b3f573fSAndroid Build Coastguard Worker 274*1b3f573fSAndroid Build Coastguard Worker ######################################################### 275*1b3f573fSAndroid Build Coastguard Worker # Test double field. 276*1b3f573fSAndroid Build Coastguard Worker ######################################################### 277*1b3f573fSAndroid Build Coastguard Worker 278*1b3f573fSAndroid Build Coastguard Worker public function testDouble() { 279*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, GPBType::DOUBLE); 280*1b3f573fSAndroid Build Coastguard Worker 281*1b3f573fSAndroid Build Coastguard Worker // Test set. 282*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 1; 283*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.0, $arr[0], MAX_FLOAT_DIFF); 284*1b3f573fSAndroid Build Coastguard Worker 285*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1.1; 286*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(1.1, $arr[1], MAX_FLOAT_DIFF); 287*1b3f573fSAndroid Build Coastguard Worker 288*1b3f573fSAndroid Build Coastguard Worker $arr[2] = '2'; 289*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(2.0, $arr[2], MAX_FLOAT_DIFF); 290*1b3f573fSAndroid Build Coastguard Worker $arr[3] = '3.1'; 291*1b3f573fSAndroid Build Coastguard Worker $this->assertFloatEquals(3.1, $arr[3], MAX_FLOAT_DIFF); 292*1b3f573fSAndroid Build Coastguard Worker 293*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(4, count($arr)); 294*1b3f573fSAndroid Build Coastguard Worker } 295*1b3f573fSAndroid Build Coastguard Worker 296*1b3f573fSAndroid Build Coastguard Worker ######################################################### 297*1b3f573fSAndroid Build Coastguard Worker # Test bool field. 298*1b3f573fSAndroid Build Coastguard Worker ######################################################### 299*1b3f573fSAndroid Build Coastguard Worker 300*1b3f573fSAndroid Build Coastguard Worker public function testBool() { 301*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::BOOL, GPBType::BOOL); 302*1b3f573fSAndroid Build Coastguard Worker 303*1b3f573fSAndroid Build Coastguard Worker // Test boolean. 304*1b3f573fSAndroid Build Coastguard Worker $arr[True] = True; 305*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(True, $arr[True]); 306*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 307*1b3f573fSAndroid Build Coastguard Worker unset($arr[True]); 308*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 309*1b3f573fSAndroid Build Coastguard Worker 310*1b3f573fSAndroid Build Coastguard Worker $arr[False] = False; 311*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(False, $arr[False]); 312*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 313*1b3f573fSAndroid Build Coastguard Worker unset($arr[False]); 314*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 315*1b3f573fSAndroid Build Coastguard Worker 316*1b3f573fSAndroid Build Coastguard Worker // Test integer. 317*1b3f573fSAndroid Build Coastguard Worker $arr[-1] = -1; 318*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(True, $arr[True]); 319*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 320*1b3f573fSAndroid Build Coastguard Worker unset($arr[-1]); 321*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 322*1b3f573fSAndroid Build Coastguard Worker 323*1b3f573fSAndroid Build Coastguard Worker $arr[0] = 0; 324*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(False, $arr[False]); 325*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 326*1b3f573fSAndroid Build Coastguard Worker unset($arr[0]); 327*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 328*1b3f573fSAndroid Build Coastguard Worker 329*1b3f573fSAndroid Build Coastguard Worker // Test float. 330*1b3f573fSAndroid Build Coastguard Worker $arr[1.1] = 1.1; 331*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(True, $arr[True]); 332*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 333*1b3f573fSAndroid Build Coastguard Worker unset($arr[1.1]); 334*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 335*1b3f573fSAndroid Build Coastguard Worker 336*1b3f573fSAndroid Build Coastguard Worker $arr[0.0] = 0.0; 337*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(False, $arr[False]); 338*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 339*1b3f573fSAndroid Build Coastguard Worker unset($arr[0.0]); 340*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 341*1b3f573fSAndroid Build Coastguard Worker 342*1b3f573fSAndroid Build Coastguard Worker // Test string. 343*1b3f573fSAndroid Build Coastguard Worker $arr['a'] = 'a'; 344*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(True, $arr[True]); 345*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 346*1b3f573fSAndroid Build Coastguard Worker unset($arr['a']); 347*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 348*1b3f573fSAndroid Build Coastguard Worker 349*1b3f573fSAndroid Build Coastguard Worker $arr[''] = ''; 350*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(False, $arr[False]); 351*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 352*1b3f573fSAndroid Build Coastguard Worker unset($arr['']); 353*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 354*1b3f573fSAndroid Build Coastguard Worker } 355*1b3f573fSAndroid Build Coastguard Worker 356*1b3f573fSAndroid Build Coastguard Worker ######################################################### 357*1b3f573fSAndroid Build Coastguard Worker # Test string field. 358*1b3f573fSAndroid Build Coastguard Worker ######################################################### 359*1b3f573fSAndroid Build Coastguard Worker 360*1b3f573fSAndroid Build Coastguard Worker public function testString() { 361*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::STRING, GPBType::STRING); 362*1b3f573fSAndroid Build Coastguard Worker 363*1b3f573fSAndroid Build Coastguard Worker // Test set. 364*1b3f573fSAndroid Build Coastguard Worker $arr['abc'] = 'abc'; 365*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('abc', $arr['abc']); 366*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 367*1b3f573fSAndroid Build Coastguard Worker unset($arr['abc']); 368*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 369*1b3f573fSAndroid Build Coastguard Worker 370*1b3f573fSAndroid Build Coastguard Worker $arr[1] = 1; 371*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr['1']); 372*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 373*1b3f573fSAndroid Build Coastguard Worker unset($arr[1]); 374*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 375*1b3f573fSAndroid Build Coastguard Worker 376*1b3f573fSAndroid Build Coastguard Worker $arr[1.1] = 1.1; 377*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1.1', $arr['1.1']); 378*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 379*1b3f573fSAndroid Build Coastguard Worker unset($arr[1.1]); 380*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 381*1b3f573fSAndroid Build Coastguard Worker 382*1b3f573fSAndroid Build Coastguard Worker $arr[True] = True; 383*1b3f573fSAndroid Build Coastguard Worker $this->assertSame('1', $arr['1']); 384*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 385*1b3f573fSAndroid Build Coastguard Worker unset($arr[True]); 386*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(0, count($arr)); 387*1b3f573fSAndroid Build Coastguard Worker 388*1b3f573fSAndroid Build Coastguard Worker // Test foreach. 389*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::STRING, GPBType::STRING); 390*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < 3; $i++) { 391*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = $i; 392*1b3f573fSAndroid Build Coastguard Worker } 393*1b3f573fSAndroid Build Coastguard Worker $i = 0; 394*1b3f573fSAndroid Build Coastguard Worker $arr_test = []; 395*1b3f573fSAndroid Build Coastguard Worker foreach ($arr as $key => $val) { 396*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($key, $val); 397*1b3f573fSAndroid Build Coastguard Worker $arr_test[] = $key; 398*1b3f573fSAndroid Build Coastguard Worker $i++; 399*1b3f573fSAndroid Build Coastguard Worker } 400*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test['0'])); 401*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test['1'])); 402*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($arr_test['2'])); 403*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $i); 404*1b3f573fSAndroid Build Coastguard Worker } 405*1b3f573fSAndroid Build Coastguard Worker 406*1b3f573fSAndroid Build Coastguard Worker ######################################################### 407*1b3f573fSAndroid Build Coastguard Worker # Test message field. 408*1b3f573fSAndroid Build Coastguard Worker ######################################################### 409*1b3f573fSAndroid Build Coastguard Worker 410*1b3f573fSAndroid Build Coastguard Worker public function testMessage() { 411*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, 412*1b3f573fSAndroid Build Coastguard Worker GPBType::MESSAGE, Sub::class); 413*1b3f573fSAndroid Build Coastguard Worker 414*1b3f573fSAndroid Build Coastguard Worker // Test append. 415*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 416*1b3f573fSAndroid Build Coastguard Worker $sub_m->setA(1); 417*1b3f573fSAndroid Build Coastguard Worker $arr[0] = $sub_m; 418*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(1, $arr[0]->getA()); 419*1b3f573fSAndroid Build Coastguard Worker 420*1b3f573fSAndroid Build Coastguard Worker $this->assertEquals(1, count($arr)); 421*1b3f573fSAndroid Build Coastguard Worker 422*1b3f573fSAndroid Build Coastguard Worker // Test foreach. 423*1b3f573fSAndroid Build Coastguard Worker $arr = new MapField(GPBType::INT32, 424*1b3f573fSAndroid Build Coastguard Worker GPBType::MESSAGE, Sub::class); 425*1b3f573fSAndroid Build Coastguard Worker for ($i = 0; $i < 3; $i++) { 426*1b3f573fSAndroid Build Coastguard Worker $arr[$i] = new Sub();; 427*1b3f573fSAndroid Build Coastguard Worker $arr[$i]->setA($i); 428*1b3f573fSAndroid Build Coastguard Worker } 429*1b3f573fSAndroid Build Coastguard Worker $i = 0; 430*1b3f573fSAndroid Build Coastguard Worker $key_test = []; 431*1b3f573fSAndroid Build Coastguard Worker $value_test = []; 432*1b3f573fSAndroid Build Coastguard Worker foreach ($arr as $key => $val) { 433*1b3f573fSAndroid Build Coastguard Worker $key_test[] = $key; 434*1b3f573fSAndroid Build Coastguard Worker $value_test[] = $val->getA(); 435*1b3f573fSAndroid Build Coastguard Worker $i++; 436*1b3f573fSAndroid Build Coastguard Worker } 437*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($key_test['0'])); 438*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($key_test['1'])); 439*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($key_test['2'])); 440*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($value_test['0'])); 441*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($value_test['1'])); 442*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(isset($value_test['2'])); 443*1b3f573fSAndroid Build Coastguard Worker $this->assertSame(3, $i); 444*1b3f573fSAndroid Build Coastguard Worker } 445*1b3f573fSAndroid Build Coastguard Worker 446*1b3f573fSAndroid Build Coastguard Worker ######################################################### 447*1b3f573fSAndroid Build Coastguard Worker # Test reference in map 448*1b3f573fSAndroid Build Coastguard Worker ######################################################### 449*1b3f573fSAndroid Build Coastguard Worker 450*1b3f573fSAndroid Build Coastguard Worker public function testMapElementIsReference() 451*1b3f573fSAndroid Build Coastguard Worker { 452*1b3f573fSAndroid Build Coastguard Worker // Bool elements 453*1b3f573fSAndroid Build Coastguard Worker $values = [true => true]; 454*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 455*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 456*1b3f573fSAndroid Build Coastguard Worker $m->setMapBoolBool($values); 457*1b3f573fSAndroid Build Coastguard Worker 458*1b3f573fSAndroid Build Coastguard Worker // Int32 elements 459*1b3f573fSAndroid Build Coastguard Worker $values = [1 => 1]; 460*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 461*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 462*1b3f573fSAndroid Build Coastguard Worker $m->setMapInt32Int32($values); 463*1b3f573fSAndroid Build Coastguard Worker 464*1b3f573fSAndroid Build Coastguard Worker // Double elements 465*1b3f573fSAndroid Build Coastguard Worker $values = [1 => 1.0]; 466*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 467*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 468*1b3f573fSAndroid Build Coastguard Worker $m->setMapInt32Double($values); 469*1b3f573fSAndroid Build Coastguard Worker 470*1b3f573fSAndroid Build Coastguard Worker // String elements 471*1b3f573fSAndroid Build Coastguard Worker $values = ['a' => 'a']; 472*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 473*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 474*1b3f573fSAndroid Build Coastguard Worker $m->setMapStringString($values); 475*1b3f573fSAndroid Build Coastguard Worker 476*1b3f573fSAndroid Build Coastguard Worker // Message elements 477*1b3f573fSAndroid Build Coastguard Worker $values = [1 => new Sub()]; 478*1b3f573fSAndroid Build Coastguard Worker array_walk($values, function (&$value) {}); 479*1b3f573fSAndroid Build Coastguard Worker $m = new TestMessage(); 480*1b3f573fSAndroid Build Coastguard Worker $m->setMapInt32Message($values); 481*1b3f573fSAndroid Build Coastguard Worker 482*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue(true); 483*1b3f573fSAndroid Build Coastguard Worker } 484*1b3f573fSAndroid Build Coastguard Worker 485*1b3f573fSAndroid Build Coastguard Worker ######################################################### 486*1b3f573fSAndroid Build Coastguard Worker # Test equality 487*1b3f573fSAndroid Build Coastguard Worker ######################################################### 488*1b3f573fSAndroid Build Coastguard Worker 489*1b3f573fSAndroid Build Coastguard Worker public function testEquality() 490*1b3f573fSAndroid Build Coastguard Worker { 491*1b3f573fSAndroid Build Coastguard Worker $map = new MapField(GPBType::INT32, GPBType::INT32); 492*1b3f573fSAndroid Build Coastguard Worker $map2 = new MapField(GPBType::INT32, GPBType::INT32); 493*1b3f573fSAndroid Build Coastguard Worker 494*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($map == $map2); 495*1b3f573fSAndroid Build Coastguard Worker 496*1b3f573fSAndroid Build Coastguard Worker $map[1] = 2; 497*1b3f573fSAndroid Build Coastguard Worker 498*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse($map == $map2); 499*1b3f573fSAndroid Build Coastguard Worker 500*1b3f573fSAndroid Build Coastguard Worker $map2[1] = 2; 501*1b3f573fSAndroid Build Coastguard Worker 502*1b3f573fSAndroid Build Coastguard Worker $this->assertTrue($map == $map2); 503*1b3f573fSAndroid Build Coastguard Worker 504*1b3f573fSAndroid Build Coastguard Worker // Arrays of different types always compare false. 505*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse(new MapField(GPBType::INT32, GPBType::INT32) == 506*1b3f573fSAndroid Build Coastguard Worker new MapField(GPBType::INT32, GPBType::INT64)); 507*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse(new MapField(GPBType::INT32, GPBType::INT32) == 508*1b3f573fSAndroid Build Coastguard Worker new MapField(GPBType::INT64, GPBType::INT32)); 509*1b3f573fSAndroid Build Coastguard Worker $this->assertFalse( 510*1b3f573fSAndroid Build Coastguard Worker new MapField(GPBType::INT32, GPBType::MESSAGE, TestMessage::class) == 511*1b3f573fSAndroid Build Coastguard Worker new MapField(GPBType::INT32, GPBType::MESSAGE, Sub::class)); 512*1b3f573fSAndroid Build Coastguard Worker } 513*1b3f573fSAndroid Build Coastguard Worker 514*1b3f573fSAndroid Build Coastguard Worker ######################################################### 515*1b3f573fSAndroid Build Coastguard Worker # Test clone 516*1b3f573fSAndroid Build Coastguard Worker ######################################################### 517*1b3f573fSAndroid Build Coastguard Worker 518*1b3f573fSAndroid Build Coastguard Worker public function testClone() 519*1b3f573fSAndroid Build Coastguard Worker { 520*1b3f573fSAndroid Build Coastguard Worker $map = new MapField(GPBType::INT32, 521*1b3f573fSAndroid Build Coastguard Worker GPBType::MESSAGE, Sub::class); 522*1b3f573fSAndroid Build Coastguard Worker 523*1b3f573fSAndroid Build Coastguard Worker // Test append. 524*1b3f573fSAndroid Build Coastguard Worker $sub_m = new Sub(); 525*1b3f573fSAndroid Build Coastguard Worker $sub_m->setA(1); 526*1b3f573fSAndroid Build Coastguard Worker $map[0] = $sub_m; 527*1b3f573fSAndroid Build Coastguard Worker 528*1b3f573fSAndroid Build Coastguard Worker $map2 = clone $map; 529*1b3f573fSAndroid Build Coastguard Worker $this->assertSame($map[0], $map2[0]); 530*1b3f573fSAndroid Build Coastguard Worker } 531*1b3f573fSAndroid Build Coastguard Worker 532*1b3f573fSAndroid Build Coastguard Worker ######################################################### 533*1b3f573fSAndroid Build Coastguard Worker # Test memory leak 534*1b3f573fSAndroid Build Coastguard Worker ######################################################### 535*1b3f573fSAndroid Build Coastguard Worker 536*1b3f573fSAndroid Build Coastguard Worker // TODO(teboring): Add it back. 537*1b3f573fSAndroid Build Coastguard Worker // public function testCycleLeak() 538*1b3f573fSAndroid Build Coastguard Worker // { 539*1b3f573fSAndroid Build Coastguard Worker // $arr = new MapField(GPBType::INT32, 540*1b3f573fSAndroid Build Coastguard Worker // GPBType::MESSAGE, TestMessage::class); 541*1b3f573fSAndroid Build Coastguard Worker // $arr[0] = new TestMessage; 542*1b3f573fSAndroid Build Coastguard Worker // $arr[0]->SetMapRecursive($arr); 543*1b3f573fSAndroid Build Coastguard Worker 544*1b3f573fSAndroid Build Coastguard Worker // // Clean up memory before test. 545*1b3f573fSAndroid Build Coastguard Worker // gc_collect_cycles(); 546*1b3f573fSAndroid Build Coastguard Worker // $start = memory_get_usage(); 547*1b3f573fSAndroid Build Coastguard Worker // unset($arr); 548*1b3f573fSAndroid Build Coastguard Worker 549*1b3f573fSAndroid Build Coastguard Worker // // Explicitly trigger garbage collection. 550*1b3f573fSAndroid Build Coastguard Worker // gc_collect_cycles(); 551*1b3f573fSAndroid Build Coastguard Worker 552*1b3f573fSAndroid Build Coastguard Worker // $end = memory_get_usage(); 553*1b3f573fSAndroid Build Coastguard Worker // $this->assertLessThan($start, $end); 554*1b3f573fSAndroid Build Coastguard Worker // } 555*1b3f573fSAndroid Build Coastguard Worker} 556