test_util.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. <?php
  2. use Foo\TestEnum;
  3. use Foo\TestMessage;
  4. use Foo\TestMessage_Sub;
  5. use Foo\TestPackedMessage;
  6. use Foo\TestUnpackedMessage;
  7. define('MAX_FLOAT_DIFF', 0.000001);
  8. if (PHP_INT_SIZE == 8) {
  9. define('MAX_INT_STRING', '9223372036854775807');
  10. define('MAX_INT_UPPER_STRING', '9223372036854775808');
  11. } else {
  12. define('MAX_INT_STRING', '2147483647');
  13. define('MAX_INT_UPPER_STRING', '2147483648');
  14. }
  15. define('MAX_INT32', 2147483647);
  16. define('MAX_INT32_FLOAT', 2147483647.0);
  17. define('MAX_INT32_STRING', '2147483647');
  18. define('MIN_INT32', (int)-2147483648);
  19. define('MIN_INT32_FLOAT', -2147483648.0);
  20. define('MIN_INT32_STRING', '-2147483648');
  21. define('MAX_UINT32', 4294967295);
  22. define('MAX_UINT32_FLOAT', 4294967295.0);
  23. define('MAX_UINT32_STRING', '4294967295');
  24. define('MIN_UINT32', (int)-2147483648);
  25. define('MIN_UINT32_FLOAT', -2147483648.0);
  26. define('MIN_UINT32_STRING', '-2147483648');
  27. define('MAX_INT64_STRING', '9223372036854775807');
  28. define('MIN_INT64_STRING', '-9223372036854775808');
  29. define('MAX_UINT64_STRING', '-9223372036854775808');
  30. if (PHP_INT_SIZE === 8) {
  31. define('MAX_INT64', (int)9223372036854775807);
  32. define('MIN_INT64', (int)-9223372036854775808);
  33. define('MAX_UINT64', (int)-9223372036854775808);
  34. } else {
  35. define('MAX_INT64', MAX_INT64_STRING);
  36. define('MIN_INT64', MIN_INT64_STRING);
  37. define('MAX_UINT64', MAX_UINT64_STRING);
  38. }
  39. class TestUtil
  40. {
  41. public static function setTestMessage(TestMessage $m)
  42. {
  43. $sub = new TestMessage_Sub();
  44. $m->setOptionalInt32(-42);
  45. $m->setOptionalInt64(-43);
  46. $m->setOptionalUint32(42);
  47. $m->setOptionalUint64(43);
  48. $m->setOptionalSint32(-44);
  49. $m->setOptionalSint64(-45);
  50. $m->setOptionalFixed32(46);
  51. $m->setOptionalFixed64(47);
  52. $m->setOptionalSfixed32(-46);
  53. $m->setOptionalSfixed64(-47);
  54. $m->setOptionalFloat(1.5);
  55. $m->setOptionalDouble(1.6);
  56. $m->setOptionalBool(true);
  57. $m->setOptionalString('a');
  58. $m->setOptionalBytes('b');
  59. $m->setOptionalEnum(TestEnum::ONE);
  60. $m->setOptionalMessage($sub);
  61. $m->getOptionalMessage()->SetA(33);
  62. $m->getRepeatedInt32() []= -42;
  63. $m->getRepeatedInt64() []= -43;
  64. $m->getRepeatedUint32() []= 42;
  65. $m->getRepeatedUint64() []= 43;
  66. $m->getRepeatedSint32() []= -44;
  67. $m->getRepeatedSint64() []= -45;
  68. $m->getRepeatedFixed32() []= 46;
  69. $m->getRepeatedFixed64() []= 47;
  70. $m->getRepeatedSfixed32() []= -46;
  71. $m->getRepeatedSfixed64() []= -47;
  72. $m->getRepeatedFloat() []= 1.5;
  73. $m->getRepeatedDouble() []= 1.6;
  74. $m->getRepeatedBool() []= true;
  75. $m->getRepeatedString() []= 'a';
  76. $m->getRepeatedBytes() []= 'b';
  77. $m->getRepeatedEnum() []= TestEnum::ZERO;
  78. $m->getRepeatedMessage() []= new TestMessage_Sub();
  79. $m->getRepeatedMessage()[0]->setA(34);
  80. $m->getRepeatedInt32() []= -52;
  81. $m->getRepeatedInt64() []= -53;
  82. $m->getRepeatedUint32() []= 52;
  83. $m->getRepeatedUint64() []= 53;
  84. $m->getRepeatedSint32() []= -54;
  85. $m->getRepeatedSint64() []= -55;
  86. $m->getRepeatedFixed32() []= 56;
  87. $m->getRepeatedFixed64() []= 57;
  88. $m->getRepeatedSfixed32() []= -56;
  89. $m->getRepeatedSfixed64() []= -57;
  90. $m->getRepeatedFloat() []= 2.5;
  91. $m->getRepeatedDouble() []= 2.6;
  92. $m->getRepeatedBool() []= false;
  93. $m->getRepeatedString() []= 'c';
  94. $m->getRepeatedBytes() []= 'd';
  95. $m->getRepeatedEnum() []= TestEnum::ONE;
  96. $m->getRepeatedMessage() []= new TestMessage_Sub();
  97. $m->getRepeatedMessage()[1]->SetA(35);
  98. $m->getMapInt32Int32()[-62] = -62;
  99. $m->getMapInt64Int64()[-63] = -63;
  100. $m->getMapUint32Uint32()[62] = 62;
  101. $m->getMapUint64Uint64()[63] = 63;
  102. $m->getMapSint32Sint32()[-64] = -64;
  103. $m->getMapSint64Sint64()[-65] = -65;
  104. $m->getMapFixed32Fixed32()[66] = 66;
  105. $m->getMapFixed64Fixed64()[67] = 67;
  106. $m->getMapInt32Float()[1] = 3.5;
  107. $m->getMapInt32Double()[1] = 3.6;
  108. $m->getMapBoolBool()[true] = true;
  109. $m->getMapStringString()['e'] = 'e';
  110. $m->getMapInt32Bytes()[1] = 'f';
  111. $m->getMapInt32Enum()[1] = TestEnum::ONE;
  112. $m->getMapInt32Message()[1] = new TestMessage_Sub();
  113. $m->getMapInt32Message()[1]->SetA(36);
  114. }
  115. public static function assertTestMessage(TestMessage $m)
  116. {
  117. if (PHP_INT_SIZE == 4) {
  118. assert('-43' === $m->getOptionalInt64());
  119. assert('43' === $m->getOptionalUint64());
  120. assert('-45' === $m->getOptionalSint64());
  121. assert('47' === $m->getOptionalFixed64());
  122. assert('-47' === $m->getOptionalSfixed64());
  123. } else {
  124. assert(-43 === $m->getOptionalInt64());
  125. assert(43 === $m->getOptionalUint64());
  126. assert(-45 === $m->getOptionalSint64());
  127. assert(47 === $m->getOptionalFixed64());
  128. assert(-47 === $m->getOptionalSfixed64());
  129. }
  130. assert(-42 === $m->getOptionalInt32());
  131. assert(42 === $m->getOptionalUint32());
  132. assert(-44 === $m->getOptionalSint32());
  133. assert(46 === $m->getOptionalFixed32());
  134. assert(-46 === $m->getOptionalSfixed32());
  135. assert(1.5 === $m->getOptionalFloat());
  136. assert(1.6 === $m->getOptionalDouble());
  137. assert(true=== $m->getOptionalBool());
  138. assert('a' === $m->getOptionalString());
  139. assert('b' === $m->getOptionalBytes());
  140. assert(TestEnum::ONE === $m->getOptionalEnum());
  141. assert(33 === $m->getOptionalMessage()->getA());
  142. if (PHP_INT_SIZE == 4) {
  143. assert('-43' === $m->getRepeatedInt64()[0]);
  144. assert('43' === $m->getRepeatedUint64()[0]);
  145. assert('-45' === $m->getRepeatedSint64()[0]);
  146. assert('47' === $m->getRepeatedFixed64()[0]);
  147. assert('-47' === $m->getRepeatedSfixed64()[0]);
  148. } else {
  149. assert(-43 === $m->getRepeatedInt64()[0]);
  150. assert(43 === $m->getRepeatedUint64()[0]);
  151. assert(-45 === $m->getRepeatedSint64()[0]);
  152. assert(47 === $m->getRepeatedFixed64()[0]);
  153. assert(-47 === $m->getRepeatedSfixed64()[0]);
  154. }
  155. assert(-42 === $m->getRepeatedInt32()[0]);
  156. assert(42 === $m->getRepeatedUint32()[0]);
  157. assert(-44 === $m->getRepeatedSint32()[0]);
  158. assert(46 === $m->getRepeatedFixed32()[0]);
  159. assert(-46 === $m->getRepeatedSfixed32()[0]);
  160. assert(1.5 === $m->getRepeatedFloat()[0]);
  161. assert(1.6 === $m->getRepeatedDouble()[0]);
  162. assert(true=== $m->getRepeatedBool()[0]);
  163. assert('a' === $m->getRepeatedString()[0]);
  164. assert('b' === $m->getRepeatedBytes()[0]);
  165. assert(TestEnum::ZERO === $m->getRepeatedEnum()[0]);
  166. assert(34 === $m->getRepeatedMessage()[0]->getA());
  167. if (PHP_INT_SIZE == 4) {
  168. assert('-53' === $m->getRepeatedInt64()[1]);
  169. assert('53' === $m->getRepeatedUint64()[1]);
  170. assert('-55' === $m->getRepeatedSint64()[1]);
  171. assert('57' === $m->getRepeatedFixed64()[1]);
  172. assert('-57' === $m->getRepeatedSfixed64()[1]);
  173. } else {
  174. assert(-53 === $m->getRepeatedInt64()[1]);
  175. assert(53 === $m->getRepeatedUint64()[1]);
  176. assert(-55 === $m->getRepeatedSint64()[1]);
  177. assert(57 === $m->getRepeatedFixed64()[1]);
  178. assert(-57 === $m->getRepeatedSfixed64()[1]);
  179. }
  180. assert(-52 === $m->getRepeatedInt32()[1]);
  181. assert(52 === $m->getRepeatedUint32()[1]);
  182. assert(-54 === $m->getRepeatedSint32()[1]);
  183. assert(56 === $m->getRepeatedFixed32()[1]);
  184. assert(-56 === $m->getRepeatedSfixed32()[1]);
  185. assert(2.5 === $m->getRepeatedFloat()[1]);
  186. assert(2.6 === $m->getRepeatedDouble()[1]);
  187. assert(false === $m->getRepeatedBool()[1]);
  188. assert('c' === $m->getRepeatedString()[1]);
  189. assert('d' === $m->getRepeatedBytes()[1]);
  190. assert(TestEnum::ONE === $m->getRepeatedEnum()[1]);
  191. assert(35 === $m->getRepeatedMessage()[1]->getA());
  192. if (PHP_INT_SIZE == 4) {
  193. assert('-63' === $m->getMapInt64Int64()['-63']);
  194. assert('63' === $m->getMapUint64Uint64()['63']);
  195. assert('-65' === $m->getMapSint64Sint64()['-65']);
  196. assert('67' === $m->getMapFixed64Fixed64()['67']);
  197. } else {
  198. assert(-63 === $m->getMapInt64Int64()[-63]);
  199. assert(63 === $m->getMapUint64Uint64()[63]);
  200. assert(-65 === $m->getMapSint64Sint64()[-65]);
  201. assert(67 === $m->getMapFixed64Fixed64()[67]);
  202. }
  203. assert(-62 === $m->getMapInt32Int32()[-62]);
  204. assert(62 === $m->getMapUint32Uint32()[62]);
  205. assert(-64 === $m->getMapSint32Sint32()[-64]);
  206. assert(66 === $m->getMapFixed32Fixed32()[66]);
  207. assert(3.5 === $m->getMapInt32Float()[1]);
  208. assert(3.6 === $m->getMapInt32Double()[1]);
  209. assert(true === $m->getMapBoolBool()[true]);
  210. assert('e' === $m->getMapStringString()['e']);
  211. assert('f' === $m->getMapInt32Bytes()[1]);
  212. assert(TestEnum::ONE === $m->getMapInt32Enum()[1]);
  213. assert(36 === $m->getMapInt32Message()[1]->GetA());
  214. }
  215. public static function getGoldenTestMessage()
  216. {
  217. return hex2bin(
  218. "08D6FFFFFFFFFFFFFFFF01" .
  219. "10D5FFFFFFFFFFFFFFFF01" .
  220. "182A" .
  221. "202B" .
  222. "2857" .
  223. "3059" .
  224. "3D2E000000" .
  225. "412F00000000000000" .
  226. "4DD2FFFFFF" .
  227. "51D1FFFFFFFFFFFFFF" .
  228. "5D0000C03F" .
  229. "619A9999999999F93F" .
  230. "6801" .
  231. "720161" .
  232. "7A0162" .
  233. "800101" .
  234. "8A01020821" .
  235. "F801D6FFFFFFFFFFFFFFFF01" .
  236. "F801CCFFFFFFFFFFFFFFFF01" .
  237. "8002D5FFFFFFFFFFFFFFFF01" .
  238. "8002CBFFFFFFFFFFFFFFFF01" .
  239. "88022A" .
  240. "880234" .
  241. "90022B" .
  242. "900235" .
  243. "980257" .
  244. "98026B" .
  245. "A00259" .
  246. "A0026D" .
  247. "AD022E000000" .
  248. "AD0238000000" .
  249. "B1022F00000000000000" .
  250. "B1023900000000000000" .
  251. "BD02D2FFFFFF" .
  252. "BD02C8FFFFFF" .
  253. "C102D1FFFFFFFFFFFFFF" .
  254. "C102C7FFFFFFFFFFFFFF" .
  255. "CD020000C03F" .
  256. "CD0200002040" .
  257. "D1029A9999999999F93F" .
  258. "D102CDCCCCCCCCCC0440" .
  259. "D80201" .
  260. "D80200" .
  261. "E2020161" .
  262. "E2020163" .
  263. "EA020162" .
  264. "EA020164" .
  265. "F00200" .
  266. "F00201" .
  267. "FA02020822" .
  268. "FA02020823" .
  269. "BA041608C2FFFFFFFFFFFFFFFF0110C2FFFFFFFFFFFFFFFF01" .
  270. "C2041608C1FFFFFFFFFFFFFFFF0110C1FFFFFFFFFFFFFFFF01" .
  271. "CA0404083E103E" .
  272. "D20404083F103F" .
  273. "DA0404087f107F" .
  274. "E20406088101108101" .
  275. "EA040A0D420000001542000000" .
  276. "F20412094300000000000000114300000000000000" .
  277. "8A050708011500006040" .
  278. "92050B080111CDCCCCCCCCCC0C40" .
  279. "9A050408011001" .
  280. "A205060a0165120165" .
  281. "AA05050801120166" .
  282. "B2050408011001" .
  283. "Ba0506080112020824"
  284. );
  285. }
  286. public static function setTestPackedMessage($m)
  287. {
  288. $m->getRepeatedInt32()[] = -42;
  289. $m->getRepeatedInt32()[] = -52;
  290. $m->getRepeatedInt64()[] = -43;
  291. $m->getRepeatedInt64()[] = -53;
  292. $m->getRepeatedUint32()[] = 42;
  293. $m->getRepeatedUint32()[] = 52;
  294. $m->getRepeatedUint64()[] = 43;
  295. $m->getRepeatedUint64()[] = 53;
  296. $m->getRepeatedSint32()[] = -44;
  297. $m->getRepeatedSint32()[] = -54;
  298. $m->getRepeatedSint64()[] = -45;
  299. $m->getRepeatedSint64()[] = -55;
  300. $m->getRepeatedFixed32()[] = 46;
  301. $m->getRepeatedFixed32()[] = 56;
  302. $m->getRepeatedFixed64()[] = 47;
  303. $m->getRepeatedFixed64()[] = 57;
  304. $m->getRepeatedSfixed32()[] = -46;
  305. $m->getRepeatedSfixed32()[] = -56;
  306. $m->getRepeatedSfixed64()[] = -47;
  307. $m->getRepeatedSfixed64()[] = -57;
  308. $m->getRepeatedFloat()[] = 1.5;
  309. $m->getRepeatedFloat()[] = 2.5;
  310. $m->getRepeatedDouble()[] = 1.6;
  311. $m->getRepeatedDouble()[] = 2.6;
  312. $m->getRepeatedBool()[] = true;
  313. $m->getRepeatedBool()[] = false;
  314. $m->getRepeatedEnum()[] = TestEnum::ONE;
  315. $m->getRepeatedEnum()[] = TestEnum::ZERO;
  316. }
  317. public static function assertTestPackedMessage($m)
  318. {
  319. assert(2 === count($m->getRepeatedInt32()));
  320. assert(2 === count($m->getRepeatedInt64()));
  321. assert(2 === count($m->getRepeatedUint32()));
  322. assert(2 === count($m->getRepeatedUint64()));
  323. assert(2 === count($m->getRepeatedSint32()));
  324. assert(2 === count($m->getRepeatedSint64()));
  325. assert(2 === count($m->getRepeatedFixed32()));
  326. assert(2 === count($m->getRepeatedFixed64()));
  327. assert(2 === count($m->getRepeatedSfixed32()));
  328. assert(2 === count($m->getRepeatedSfixed64()));
  329. assert(2 === count($m->getRepeatedFloat()));
  330. assert(2 === count($m->getRepeatedDouble()));
  331. assert(2 === count($m->getRepeatedBool()));
  332. assert(2 === count($m->getRepeatedEnum()));
  333. assert(-42 === $m->getRepeatedInt32()[0]);
  334. assert(-52 === $m->getRepeatedInt32()[1]);
  335. assert(42 === $m->getRepeatedUint32()[0]);
  336. assert(52 === $m->getRepeatedUint32()[1]);
  337. assert(-44 === $m->getRepeatedSint32()[0]);
  338. assert(-54 === $m->getRepeatedSint32()[1]);
  339. assert(46 === $m->getRepeatedFixed32()[0]);
  340. assert(56 === $m->getRepeatedFixed32()[1]);
  341. assert(-46 === $m->getRepeatedSfixed32()[0]);
  342. assert(-56 === $m->getRepeatedSfixed32()[1]);
  343. assert(1.5 === $m->getRepeatedFloat()[0]);
  344. assert(2.5 === $m->getRepeatedFloat()[1]);
  345. assert(1.6 === $m->getRepeatedDouble()[0]);
  346. assert(2.6 === $m->getRepeatedDouble()[1]);
  347. assert(true === $m->getRepeatedBool()[0]);
  348. assert(false === $m->getRepeatedBool()[1]);
  349. assert(TestEnum::ONE === $m->getRepeatedEnum()[0]);
  350. assert(TestEnum::ZERO === $m->getRepeatedEnum()[1]);
  351. if (PHP_INT_SIZE == 4) {
  352. assert('-43' === $m->getRepeatedInt64()[0]);
  353. assert('-53' === $m->getRepeatedInt64()[1]);
  354. assert('43' === $m->getRepeatedUint64()[0]);
  355. assert('53' === $m->getRepeatedUint64()[1]);
  356. assert('-45' === $m->getRepeatedSint64()[0]);
  357. assert('-55' === $m->getRepeatedSint64()[1]);
  358. assert('47' === $m->getRepeatedFixed64()[0]);
  359. assert('57' === $m->getRepeatedFixed64()[1]);
  360. assert('-47' === $m->getRepeatedSfixed64()[0]);
  361. assert('-57' === $m->getRepeatedSfixed64()[1]);
  362. } else {
  363. assert(-43 === $m->getRepeatedInt64()[0]);
  364. assert(-53 === $m->getRepeatedInt64()[1]);
  365. assert(43 === $m->getRepeatedUint64()[0]);
  366. assert(53 === $m->getRepeatedUint64()[1]);
  367. assert(-45 === $m->getRepeatedSint64()[0]);
  368. assert(-55 === $m->getRepeatedSint64()[1]);
  369. assert(47 === $m->getRepeatedFixed64()[0]);
  370. assert(57 === $m->getRepeatedFixed64()[1]);
  371. assert(-47 === $m->getRepeatedSfixed64()[0]);
  372. assert(-57 === $m->getRepeatedSfixed64()[1]);
  373. }
  374. }
  375. public static function getGoldenTestPackedMessage()
  376. {
  377. return hex2bin(
  378. "D20514D6FFFFFFFFFFFFFFFF01CCFFFFFFFFFFFFFFFF01" .
  379. "DA0514D5FFFFFFFFFFFFFFFF01CBFFFFFFFFFFFFFFFF01" .
  380. "E205022A34" .
  381. "EA05022B35" .
  382. "F20502576B" .
  383. "FA0502596D" .
  384. "8206082E00000038000000" .
  385. "8A06102F000000000000003900000000000000" .
  386. "920608D2FFFFFFC8FFFFFF" .
  387. "9A0610D1FFFFFFFFFFFFFFC7FFFFFFFFFFFFFF" .
  388. "A206080000C03F00002040" .
  389. "AA06109A9999999999F93FCDCCCCCCCCCC0440" .
  390. "B206020100" .
  391. "BA06020100"
  392. );
  393. }
  394. public static function getGoldenTestUnpackedMessage()
  395. {
  396. return hex2bin(
  397. "D005D6FFFFFFFFFFFFFFFF01D005CCFFFFFFFFFFFFFFFF01" .
  398. "D805D5FFFFFFFFFFFFFFFF01D805CBFFFFFFFFFFFFFFFF01" .
  399. "E0052AE00534" .
  400. "E8052BE80535" .
  401. "F00557F0056B" .
  402. "F80559F8056D" .
  403. "85062E000000850638000000" .
  404. "89062F0000000000000089063900000000000000" .
  405. "9506D2FFFFFF9506C8FFFFFF" .
  406. "9906D1FFFFFFFFFFFFFF9906C7FFFFFFFFFFFFFF" .
  407. "A5060000C03FA50600002040" .
  408. "A9069A9999999999F93FA906CDCCCCCCCCCC0440" .
  409. "B00601B00600" .
  410. "B80601B80600"
  411. );
  412. }
  413. }