protobuf/php/tests/test_util.php
Paul Yang 69c4bc5674 Updated upb to pick up several bugfixes (#7740)
* Updated upb to pick up several bugfixes. This fixes most conformance failures.

* Updated golden file, now that we are serializing as packed by default.

* Set "packed" properly: it is on by default for packable fields in proto3.

* Updated failure list for PHP now that we properly respect "packed".

* Temporarily disable encode_decode_test

Co-authored-by: Joshua Haberman <jhaberman@gmail.com>
2020-08-07 14:44:49 -07:00

534 lines
23 KiB
PHP

<?php
use Foo\TestEnum;
use Foo\TestMessage;
use Foo\TestMessage\Sub;
use Foo\TestPackedMessage;
use Foo\TestUnpackedMessage;
define('MAX_FLOAT_DIFF', 0.000001);
if (PHP_INT_SIZE == 8) {
define('MAX_INT_STRING', '9223372036854775807');
define('MAX_INT_UPPER_STRING', '9223372036854775808');
} else {
define('MAX_INT_STRING', '2147483647');
define('MAX_INT_UPPER_STRING', '2147483648');
}
define('MAX_INT32', 2147483647);
define('MAX_INT32_FLOAT', 2147483647.0);
define('MAX_INT32_STRING', '2147483647');
define('MIN_INT32', (int)-2147483648);
define('MIN_INT32_FLOAT', -2147483648.0);
define('MIN_INT32_STRING', '-2147483648');
define('MAX_UINT32', 4294967295);
define('MAX_UINT32_FLOAT', 4294967295.0);
define('MAX_UINT32_STRING', '4294967295');
define('MIN_UINT32', (int)-2147483648);
define('MIN_UINT32_FLOAT', -2147483648.0);
define('MIN_UINT32_STRING', '-2147483648');
define('MAX_INT64_STRING', '9223372036854775807');
define('MIN_INT64_STRING', '-9223372036854775808');
define('MAX_UINT64_STRING', '-9223372036854775808');
if (PHP_INT_SIZE === 8) {
define('MAX_INT64', (int)9223372036854775807);
define('MIN_INT64', (int)-9223372036854775808);
define('MAX_UINT64', (int)-9223372036854775808);
} else {
define('MAX_INT64', MAX_INT64_STRING);
define('MIN_INT64', MIN_INT64_STRING);
define('MAX_UINT64', MAX_UINT64_STRING);
}
class TestUtil
{
public static function setTestMessage(TestMessage $m)
{
$m->setOptionalInt32(-42);
$m->setOptionalInt64(-43);
$m->setOptionalUint32(42);
$m->setOptionalUint64(43);
$m->setOptionalSint32(-44);
$m->setOptionalSint64(-45);
$m->setOptionalFixed32(46);
$m->setOptionalFixed64(47);
$m->setOptionalSfixed32(-46);
$m->setOptionalSfixed64(-47);
$m->setOptionalFloat(1.5);
$m->setOptionalDouble(1.6);
$m->setOptionalBool(true);
$m->setOptionalString('a');
$m->setOptionalBytes('bbbb');
$m->setOptionalEnum(TestEnum::ONE);
$sub = new Sub();
$m->setOptionalMessage($sub);
$m->getOptionalMessage()->SetA(33);
self::appendHelper($m, 'RepeatedInt32', -42);
self::appendHelper($m, 'RepeatedInt64', -43);
self::appendHelper($m, 'RepeatedUint32', 42);
self::appendHelper($m, 'RepeatedUint64', 43);
self::appendHelper($m, 'RepeatedSint32', -44);
self::appendHelper($m, 'RepeatedSint64', -45);
self::appendHelper($m, 'RepeatedFixed32', 46);
self::appendHelper($m, 'RepeatedFixed64', 47);
self::appendHelper($m, 'RepeatedSfixed32', -46);
self::appendHelper($m, 'RepeatedSfixed64', -47);
self::appendHelper($m, 'RepeatedFloat', 1.5);
self::appendHelper($m, 'RepeatedDouble', 1.6);
self::appendHelper($m, 'RepeatedBool', true);
self::appendHelper($m, 'RepeatedString', 'a');
self::appendHelper($m, 'RepeatedBytes', 'bbbb');
self::appendHelper($m, 'RepeatedEnum', TestEnum::ZERO);
self::appendHelper($m, 'RepeatedMessage', new Sub());
$m->getRepeatedMessage()[0]->setA(34);
self::appendHelper($m, 'RepeatedInt32', -52);
self::appendHelper($m, 'RepeatedInt64', -53);
self::appendHelper($m, 'RepeatedUint32', 52);
self::appendHelper($m, 'RepeatedUint64', 53);
self::appendHelper($m, 'RepeatedSint32', -54);
self::appendHelper($m, 'RepeatedSint64', -55);
self::appendHelper($m, 'RepeatedFixed32', 56);
self::appendHelper($m, 'RepeatedFixed64', 57);
self::appendHelper($m, 'RepeatedSfixed32', -56);
self::appendHelper($m, 'RepeatedSfixed64', -57);
self::appendHelper($m, 'RepeatedFloat', 2.5);
self::appendHelper($m, 'RepeatedDouble', 2.6);
self::appendHelper($m, 'RepeatedBool', false);
self::appendHelper($m, 'RepeatedString', 'c');
self::appendHelper($m, 'RepeatedBytes', 'dddd');
self::appendHelper($m, 'RepeatedEnum', TestEnum::ONE);
self::appendHelper($m, 'RepeatedMessage', new Sub());
$m->getRepeatedMessage()[1]->SetA(35);
self::kvUpdateHelper($m, 'MapInt32Int32', -62, -62);
self::kvUpdateHelper($m, 'MapInt64Int64', -63, -63);
self::kvUpdateHelper($m, 'MapUint32Uint32', 62, 62);
self::kvUpdateHelper($m, 'MapUint64Uint64', 63, 63);
self::kvUpdateHelper($m, 'MapSint32Sint32', -64, -64);
self::kvUpdateHelper($m, 'MapSint64Sint64', -65, -65);
self::kvUpdateHelper($m, 'MapFixed32Fixed32', 66, 66);
self::kvUpdateHelper($m, 'MapFixed64Fixed64', 67, 67);
self::kvUpdateHelper($m, 'MapSfixed32Sfixed32', -68, -68);
self::kvUpdateHelper($m, 'MapSfixed64Sfixed64', -69, -69);
self::kvUpdateHelper($m, 'MapInt32Float', 1, 3.5);
self::kvUpdateHelper($m, 'MapInt32Double', 1, 3.6);
self::kvUpdateHelper($m, 'MapBoolBool', true, true);
self::kvUpdateHelper($m, 'MapStringString', 'e', 'e');
self::kvUpdateHelper($m, 'MapInt32Bytes', 1, 'ffff');
self::kvUpdateHelper($m, 'MapInt32Enum', 1, TestEnum::ONE);
self::kvUpdateHelper($m, 'MapInt32Message', 1, new Sub());
$m->getMapInt32Message()[1]->SetA(36);
}
public static function setTestMessage2(TestMessage $m)
{
$sub = new Sub();
$m->setOptionalInt32(-142);
$m->setOptionalInt64(-143);
$m->setOptionalUint32(142);
$m->setOptionalUint64(143);
$m->setOptionalSint32(-144);
$m->setOptionalSint64(-145);
$m->setOptionalFixed32(146);
$m->setOptionalFixed64(147);
$m->setOptionalSfixed32(-146);
$m->setOptionalSfixed64(-147);
$m->setOptionalFloat(11.5);
$m->setOptionalDouble(11.6);
$m->setOptionalBool(true);
$m->setOptionalString('aa');
$m->setOptionalBytes('bb');
$m->setOptionalEnum(TestEnum::TWO);
$m->setOptionalMessage($sub);
$m->getOptionalMessage()->SetA(133);
self::appendHelper($m, 'RepeatedInt32', -142);
self::appendHelper($m, 'RepeatedInt64', -143);
self::appendHelper($m, 'RepeatedUint32', 142);
self::appendHelper($m, 'RepeatedUint64', 143);
self::appendHelper($m, 'RepeatedSint32', -144);
self::appendHelper($m, 'RepeatedSint64', -145);
self::appendHelper($m, 'RepeatedFixed32', 146);
self::appendHelper($m, 'RepeatedFixed64', 147);
self::appendHelper($m, 'RepeatedSfixed32', -146);
self::appendHelper($m, 'RepeatedSfixed64', -147);
self::appendHelper($m, 'RepeatedFloat', 11.5);
self::appendHelper($m, 'RepeatedDouble', 11.6);
self::appendHelper($m, 'RepeatedBool', false);
self::appendHelper($m, 'RepeatedString', 'aa');
self::appendHelper($m, 'RepeatedBytes', 'bb');
self::appendHelper($m, 'RepeatedEnum', TestEnum::TWO);
self::appendHelper($m, 'RepeatedMessage', new Sub());
$m->getRepeatedMessage()[0]->setA(134);
self::kvUpdateHelper($m, 'MapInt32Int32', -62, -162);
self::kvUpdateHelper($m, 'MapInt64Int64', -63, -163);
self::kvUpdateHelper($m, 'MapUint32Uint32', 62, 162);
self::kvUpdateHelper($m, 'MapUint64Uint64', 63, 163);
self::kvUpdateHelper($m, 'MapSint32Sint32', -64, -164);
self::kvUpdateHelper($m, 'MapSint64Sint64', -65, -165);
self::kvUpdateHelper($m, 'MapFixed32Fixed32', 66, 166);
self::kvUpdateHelper($m, 'MapFixed64Fixed64', 67, 167);
self::kvUpdateHelper($m, 'MapSfixed32Sfixed32', -68, -168);
self::kvUpdateHelper($m, 'MapSfixed64Sfixed64', -69, -169);
self::kvUpdateHelper($m, 'MapInt32Float', 1, 13.5);
self::kvUpdateHelper($m, 'MapInt32Double', 1, 13.6);
self::kvUpdateHelper($m, 'MapBoolBool', true, false);
self::kvUpdateHelper($m, 'MapStringString', 'e', 'ee');
self::kvUpdateHelper($m, 'MapInt32Bytes', 1, 'ff');
self::kvUpdateHelper($m, 'MapInt32Enum', 1, TestEnum::TWO);
self::kvUpdateHelper($m, 'MapInt32Message', 1, new Sub());
$m->getMapInt32Message()[1]->SetA(136);
self::kvUpdateHelper($m, 'MapInt32Int32', -162, -162);
self::kvUpdateHelper($m, 'MapInt64Int64', -163, -163);
self::kvUpdateHelper($m, 'MapUint32Uint32', 162, 162);
self::kvUpdateHelper($m, 'MapUint64Uint64', 163, 163);
self::kvUpdateHelper($m, 'MapSint32Sint32', -164, -164);
self::kvUpdateHelper($m, 'MapSint64Sint64', -165, -165);
self::kvUpdateHelper($m, 'MapFixed32Fixed32', 166, 166);
self::kvUpdateHelper($m, 'MapFixed64Fixed64', 167, 167);
self::kvUpdateHelper($m, 'MapSfixed32Sfixed32', -168, -168);
self::kvUpdateHelper($m, 'MapSfixed64Sfixed64', -169, -169);
self::kvUpdateHelper($m, 'MapInt32Float', 2, 13.5);
self::kvUpdateHelper($m, 'MapInt32Double', 2, 13.6);
self::kvUpdateHelper($m, 'MapBoolBool', false, false);
self::kvUpdateHelper($m, 'MapStringString', 'ee', 'ee');
self::kvUpdateHelper($m, 'MapInt32Bytes', 2, 'ff');
self::kvUpdateHelper($m, 'MapInt32Enum', 2, TestEnum::TWO);
self::kvUpdateHelper($m, 'MapInt32Message', 2, new Sub());
$m->getMapInt32Message()[2]->SetA(136);
}
public static function assertTestMessage(TestMessage $m)
{
if (PHP_INT_SIZE == 4) {
assert('-43' === $m->getOptionalInt64());
assert('43' === $m->getOptionalUint64());
assert('-45' === $m->getOptionalSint64());
assert('47' === $m->getOptionalFixed64());
assert('-47' === $m->getOptionalSfixed64());
} else {
assert(-43 === $m->getOptionalInt64());
assert(43 === $m->getOptionalUint64());
assert(-45 === $m->getOptionalSint64());
assert(47 === $m->getOptionalFixed64());
assert(-47 === $m->getOptionalSfixed64());
}
assert(-42 === $m->getOptionalInt32());
assert(42 === $m->getOptionalUint32());
assert(-44 === $m->getOptionalSint32());
assert(46 === $m->getOptionalFixed32());
assert(-46 === $m->getOptionalSfixed32());
assert(1.5 === $m->getOptionalFloat());
assert(1.6 === $m->getOptionalDouble());
assert(true=== $m->getOptionalBool());
assert('a' === $m->getOptionalString());
assert('bbbb' === $m->getOptionalBytes());
assert(TestEnum::ONE === $m->getOptionalEnum());
assert(33 === $m->getOptionalMessage()->getA());
if (PHP_INT_SIZE == 4) {
assert('-43' === $m->getRepeatedInt64()[0]);
assert('43' === $m->getRepeatedUint64()[0]);
assert('-45' === $m->getRepeatedSint64()[0]);
assert('47' === $m->getRepeatedFixed64()[0]);
assert('-47' === $m->getRepeatedSfixed64()[0]);
} else {
assert(-43 === $m->getRepeatedInt64()[0]);
assert(43 === $m->getRepeatedUint64()[0]);
assert(-45 === $m->getRepeatedSint64()[0]);
assert(47 === $m->getRepeatedFixed64()[0]);
assert(-47 === $m->getRepeatedSfixed64()[0]);
}
assert(-42 === $m->getRepeatedInt32()[0]);
assert(42 === $m->getRepeatedUint32()[0]);
assert(-44 === $m->getRepeatedSint32()[0]);
assert(46 === $m->getRepeatedFixed32()[0]);
assert(-46 === $m->getRepeatedSfixed32()[0]);
assert(1.5 === $m->getRepeatedFloat()[0]);
assert(1.6 === $m->getRepeatedDouble()[0]);
assert(true=== $m->getRepeatedBool()[0]);
assert('a' === $m->getRepeatedString()[0]);
assert('bbbb' === $m->getRepeatedBytes()[0]);
assert(TestEnum::ZERO === $m->getRepeatedEnum()[0]);
assert(34 === $m->getRepeatedMessage()[0]->getA());
if (PHP_INT_SIZE == 4) {
assert('-53' === $m->getRepeatedInt64()[1]);
assert('53' === $m->getRepeatedUint64()[1]);
assert('-55' === $m->getRepeatedSint64()[1]);
assert('57' === $m->getRepeatedFixed64()[1]);
assert('-57' === $m->getRepeatedSfixed64()[1]);
} else {
assert(-53 === $m->getRepeatedInt64()[1]);
assert(53 === $m->getRepeatedUint64()[1]);
assert(-55 === $m->getRepeatedSint64()[1]);
assert(57 === $m->getRepeatedFixed64()[1]);
assert(-57 === $m->getRepeatedSfixed64()[1]);
}
assert(-52 === $m->getRepeatedInt32()[1]);
assert(52 === $m->getRepeatedUint32()[1]);
assert(-54 === $m->getRepeatedSint32()[1]);
assert(56 === $m->getRepeatedFixed32()[1]);
assert(-56 === $m->getRepeatedSfixed32()[1]);
assert(2.5 === $m->getRepeatedFloat()[1]);
assert(2.6 === $m->getRepeatedDouble()[1]);
assert(false === $m->getRepeatedBool()[1]);
assert('c' === $m->getRepeatedString()[1]);
assert('dddd' === $m->getRepeatedBytes()[1]);
assert(TestEnum::ONE === $m->getRepeatedEnum()[1]);
assert(35 === $m->getRepeatedMessage()[1]->getA());
if (PHP_INT_SIZE == 4) {
assert('-63' === $m->getMapInt64Int64()['-63']);
assert('63' === $m->getMapUint64Uint64()['63']);
assert('-65' === $m->getMapSint64Sint64()['-65']);
assert('67' === $m->getMapFixed64Fixed64()['67']);
assert('-69' === $m->getMapSfixed64Sfixed64()['-69']);
} else {
assert(-63 === $m->getMapInt64Int64()[-63]);
assert(63 === $m->getMapUint64Uint64()[63]);
assert(-65 === $m->getMapSint64Sint64()[-65]);
assert(67 === $m->getMapFixed64Fixed64()[67]);
assert(-69 === $m->getMapSfixed64Sfixed64()[-69]);
}
assert(-62 === $m->getMapInt32Int32()[-62]);
assert(62 === $m->getMapUint32Uint32()[62]);
assert(-64 === $m->getMapSint32Sint32()[-64]);
assert(66 === $m->getMapFixed32Fixed32()[66]);
assert(-68 === $m->getMapSfixed32Sfixed32()[-68]);
assert(3.5 === $m->getMapInt32Float()[1]);
assert(3.6 === $m->getMapInt32Double()[1]);
assert(true === $m->getMapBoolBool()[true]);
assert('e' === $m->getMapStringString()['e']);
assert('ffff' === $m->getMapInt32Bytes()[1]);
assert(TestEnum::ONE === $m->getMapInt32Enum()[1]);
assert(36 === $m->getMapInt32Message()[1]->GetA());
}
public static function getGoldenTestMessage()
{
return hex2bin(
"08D6FFFFFFFFFFFFFFFF01" .
"10D5FFFFFFFFFFFFFFFF01" .
"182A" .
"202B" .
"2857" .
"3059" .
"3D2E000000" .
"412F00000000000000" .
"4DD2FFFFFF" .
"51D1FFFFFFFFFFFFFF" .
"5D0000C03F" .
"619A9999999999F93F" .
"6801" .
"720161" .
"7A0462626262" .
"800101" .
"8A01020821" .
"FA0114D6FFFFFFFFFFFFFFFF01CCFFFFFFFFFFFFFFFF01" .
"820214D5FFFFFFFFFFFFFFFF01CBFFFFFFFFFFFFFFFF01" .
"8A02022A34" .
"9202022B35" .
"9A0202576B" .
"A20202596D" .
"AA02082E00000038000000" .
"B202102F000000000000003900000000000000" .
"BA0208D2FFFFFFC8FFFFFF" .
"C20210D1FFFFFFFFFFFFFFC7FFFFFFFFFFFFFF" .
"CA02080000C03F00002040" .
"D202109A9999999999F93FCDCCCCCCCCCC0440" .
"DA02020100" .
"E2020161" .
"E2020163" .
"EA020462626262" .
"EA020464646464" .
"F202020001" .
"FA02020822" .
"FA02020823" .
"BA041608C2FFFFFFFFFFFFFFFF0110C2FFFFFFFFFFFFFFFF01" .
"C2041608C1FFFFFFFFFFFFFFFF0110C1FFFFFFFFFFFFFFFF01" .
"CA0404083E103E" .
"D20404083F103F" .
"DA0404087f107F" .
"E20406088101108101" .
"EA040A0D420000001542000000" .
"F20412094300000000000000114300000000000000" .
"FA040A0DBCFFFFFF15BCFFFFFF" .
"82051209BBFFFFFFFFFFFFFF11BBFFFFFFFFFFFFFF" .
"8A050708011500006040" .
"92050B080111CDCCCCCCCCCC0C40" .
"9A050408011001" .
"A205060a0165120165" .
"AA05080801120466666666" .
"B2050408011001" .
"Ba0506080112020824"
);
}
public static function setTestPackedMessage($m)
{
self::appendHelper($m, 'RepeatedInt32', -42);
self::appendHelper($m, 'RepeatedInt32', -52);
self::appendHelper($m, 'RepeatedInt64', -43);
self::appendHelper($m, 'RepeatedInt64', -53);
self::appendHelper($m, 'RepeatedUint32', 42);
self::appendHelper($m, 'RepeatedUint32', 52);
self::appendHelper($m, 'RepeatedUint64', 43);
self::appendHelper($m, 'RepeatedUint64', 53);
self::appendHelper($m, 'RepeatedSint32', -44);
self::appendHelper($m, 'RepeatedSint32', -54);
self::appendHelper($m, 'RepeatedSint64', -45);
self::appendHelper($m, 'RepeatedSint64', -55);
self::appendHelper($m, 'RepeatedFixed32', 46);
self::appendHelper($m, 'RepeatedFixed32', 56);
self::appendHelper($m, 'RepeatedFixed64', 47);
self::appendHelper($m, 'RepeatedFixed64', 57);
self::appendHelper($m, 'RepeatedSfixed32', -46);
self::appendHelper($m, 'RepeatedSfixed32', -56);
self::appendHelper($m, 'RepeatedSfixed64', -47);
self::appendHelper($m, 'RepeatedSfixed64', -57);
self::appendHelper($m, 'RepeatedFloat', 1.5);
self::appendHelper($m, 'RepeatedFloat', 2.5);
self::appendHelper($m, 'RepeatedDouble', 1.6);
self::appendHelper($m, 'RepeatedDouble', 2.6);
self::appendHelper($m, 'RepeatedBool', true);
self::appendHelper($m, 'RepeatedBool', false);
self::appendHelper($m, 'RepeatedEnum', TestEnum::ONE);
self::appendHelper($m, 'RepeatedEnum', TestEnum::ZERO);
}
public static function assertTestPackedMessage($m)
{
assert(2 === count($m->getRepeatedInt32()));
assert(2 === count($m->getRepeatedInt64()));
assert(2 === count($m->getRepeatedUint32()));
assert(2 === count($m->getRepeatedUint64()));
assert(2 === count($m->getRepeatedSint32()));
assert(2 === count($m->getRepeatedSint64()));
assert(2 === count($m->getRepeatedFixed32()));
assert(2 === count($m->getRepeatedFixed64()));
assert(2 === count($m->getRepeatedSfixed32()));
assert(2 === count($m->getRepeatedSfixed64()));
assert(2 === count($m->getRepeatedFloat()));
assert(2 === count($m->getRepeatedDouble()));
assert(2 === count($m->getRepeatedBool()));
assert(2 === count($m->getRepeatedEnum()));
assert(-42 === $m->getRepeatedInt32()[0]);
assert(-52 === $m->getRepeatedInt32()[1]);
assert(42 === $m->getRepeatedUint32()[0]);
assert(52 === $m->getRepeatedUint32()[1]);
assert(-44 === $m->getRepeatedSint32()[0]);
assert(-54 === $m->getRepeatedSint32()[1]);
assert(46 === $m->getRepeatedFixed32()[0]);
assert(56 === $m->getRepeatedFixed32()[1]);
assert(-46 === $m->getRepeatedSfixed32()[0]);
assert(-56 === $m->getRepeatedSfixed32()[1]);
assert(1.5 === $m->getRepeatedFloat()[0]);
assert(2.5 === $m->getRepeatedFloat()[1]);
assert(1.6 === $m->getRepeatedDouble()[0]);
assert(2.6 === $m->getRepeatedDouble()[1]);
assert(true === $m->getRepeatedBool()[0]);
assert(false === $m->getRepeatedBool()[1]);
assert(TestEnum::ONE === $m->getRepeatedEnum()[0]);
assert(TestEnum::ZERO === $m->getRepeatedEnum()[1]);
if (PHP_INT_SIZE == 4) {
assert('-43' === $m->getRepeatedInt64()[0]);
assert('-53' === $m->getRepeatedInt64()[1]);
assert('43' === $m->getRepeatedUint64()[0]);
assert('53' === $m->getRepeatedUint64()[1]);
assert('-45' === $m->getRepeatedSint64()[0]);
assert('-55' === $m->getRepeatedSint64()[1]);
assert('47' === $m->getRepeatedFixed64()[0]);
assert('57' === $m->getRepeatedFixed64()[1]);
assert('-47' === $m->getRepeatedSfixed64()[0]);
assert('-57' === $m->getRepeatedSfixed64()[1]);
} else {
assert(-43 === $m->getRepeatedInt64()[0]);
assert(-53 === $m->getRepeatedInt64()[1]);
assert(43 === $m->getRepeatedUint64()[0]);
assert(53 === $m->getRepeatedUint64()[1]);
assert(-45 === $m->getRepeatedSint64()[0]);
assert(-55 === $m->getRepeatedSint64()[1]);
assert(47 === $m->getRepeatedFixed64()[0]);
assert(57 === $m->getRepeatedFixed64()[1]);
assert(-47 === $m->getRepeatedSfixed64()[0]);
assert(-57 === $m->getRepeatedSfixed64()[1]);
}
}
public static function getGoldenTestPackedMessage()
{
return hex2bin(
"D20514D6FFFFFFFFFFFFFFFF01CCFFFFFFFFFFFFFFFF01" .
"DA0514D5FFFFFFFFFFFFFFFF01CBFFFFFFFFFFFFFFFF01" .
"E205022A34" .
"EA05022B35" .
"F20502576B" .
"FA0502596D" .
"8206082E00000038000000" .
"8A06102F000000000000003900000000000000" .
"920608D2FFFFFFC8FFFFFF" .
"9A0610D1FFFFFFFFFFFFFFC7FFFFFFFFFFFFFF" .
"A206080000C03F00002040" .
"AA06109A9999999999F93FCDCCCCCCCCCC0440" .
"B206020100" .
"BA06020100"
);
}
public static function getGoldenTestUnpackedMessage()
{
return hex2bin(
"D005D6FFFFFFFFFFFFFFFF01D005CCFFFFFFFFFFFFFFFF01" .
"D805D5FFFFFFFFFFFFFFFF01D805CBFFFFFFFFFFFFFFFF01" .
"E0052AE00534" .
"E8052BE80535" .
"F00557F0056B" .
"F80559F8056D" .
"85062E000000850638000000" .
"89062F0000000000000089063900000000000000" .
"9506D2FFFFFF9506C8FFFFFF" .
"9906D1FFFFFFFFFFFFFF9906C7FFFFFFFFFFFFFF" .
"A5060000C03FA50600002040" .
"A9069A9999999999F93FA906CDCCCCCCCCCC0440" .
"B00601B00600" .
"B80601B80600"
);
}
private static function appendHelper($obj, $func_suffix, $value)
{
$getter_function = 'get'.$func_suffix;
$setter_function = 'set'.$func_suffix;
$arr = $obj->$getter_function();
$arr[] = $value;
$obj->$setter_function($arr);
}
private static function kvUpdateHelper($obj, $func_suffix, $key, $value)
{
$getter_function = 'get'.$func_suffix;
$setter_function = 'set'.$func_suffix;
$arr = $obj->$getter_function();
$arr[$key] = $value;
$obj->$setter_function($arr);
}
}