💾 Archived View for gmi.noulin.net › gitRepositories › netSerial › file › testNetSerial.c.gmi captured on 2023-07-10 at 15:40:27. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-01-29)
-=-=-=-=-=-=-
testNetSerial.c (50221B)
1 #! /usr/bin/env sheepy 2 /* or direct path to sheepy: #! /usr/local/bin/sheepy */ 3 4 /** \file 5 * Each test must be independent and self contained 6 */ 7 8 #include <check.h> 9 10 //START MEM TEST ANCHOR 11 12 #include "libsheepyObject.h" 13 #include "netSerial.h" 14 15 int argc; char **argv; 16 17 /* enable/disable logging */ 18 /* #undef pLog */ 19 /* #define pLog(...) */ 20 21 22 START_TEST(topT) 23 24 // STEPS 25 // init 26 // init allocate 27 // terminate 28 // allocate 29 // string 30 // duplicate 31 32 createNetSerial(n); 33 createNetSerial(ds); 34 char *s; 35 smallBytest *B; 36 createSmallDict(d); 37 createSmallArray(a); 38 39 // empty smallBytes 40 initiateG(&B); 41 pushBufferG(B, NULL, 1); 42 // store garbage data in empty smallBytes 43 B->B->data = 0; 44 ck_assert_ptr_eq(getTopTypeG(&ds), NULL); 45 deserialG(&ds, B); 46 // nothing should deserialized 47 ck_assert_ptr_eq(getTopTypeG(&ds), NULL); 48 terminateG(B); 49 50 // undefined 51 undefinedt *oU = allocUndefined(); 52 setTopNFreeG(&n, (baset *)oU); 53 B = serialG(&n); 54 s = sToString((smallt *) B->B); 55 ck_assert_str_eq(s, "[0x00]"); 56 free(s); 57 deserialG(&ds, B); 58 s = toStringG(&ds); 59 ck_assert_str_eq(s, "null"); 60 free(s); 61 terminateG(B); 62 freeManyG(&n, &ds); 63 64 // bool 65 setTopG(&n, TRUE); 66 B = serialG(&n); 67 s = sToString((smallt *) B->B); 68 ck_assert_str_eq(s, "[0x11]"); 69 free(s); 70 deserialG(&ds, B); 71 s = toStringG(&ds); 72 ck_assert_str_eq(s, "true"); 73 free(s); 74 terminateG(B); 75 freeManyG(&n, &ds); 76 77 // double 78 setTopG(&n, 1.2); 79 B = serialG(&n); 80 logI("len %u", lenG(B)); 81 logSI("%s", toHexSepS(getValG(B), lenG(B), " ")); 82 s = sToString((smallt *) B->B); 83 ck_assert_str_eq(s, "[0x03,0x33,0x33,0x33,0x33,0x33,0x33,0xf3,0x3f]"); 84 free(s); 85 deserialG(&ds, B); 86 s = toStringG(&ds); 87 ck_assert_str_eq(s, "1.200000e+00"); 88 free(s); 89 terminateG(B); 90 freeManyG(&n, &ds); 91 92 // TODO test with 0x8000000000000000 and 0x7FFFFFFFFFFFFFFF 93 // 64 bit int test with bit 63 set 94 setTopG(&n, -8030967404224553996); 95 B = serialG(&n); 96 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 97 s = sToString((smallt *) B->B); 98 ck_assert_str_eq(s, "[0xf4,0x82,0xd2,0x8b,0xc7,0xb7,0xd2,0xbb,0xee,0x1b]"); 99 free(s); 100 deserialG(&ds, B); 101 s = toStringG(&ds); 102 logVarG(s); 103 ck_assert_str_eq(s, "-8030967404224553996"); 104 free(s); 105 terminateG(B); 106 freeManyG(&n, &ds); 107 108 // 64 bit int test large positive value 109 setTopG(&n, 12000000000UL); 110 B = serialG(&n); 111 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 112 s = sToString((smallt *) B->B); 113 ck_assert_str_eq(s, "[0x84,0x80,0xbc,0xc1,0x96,0x0b]"); 114 free(s); 115 deserialG(&ds, B); 116 s = toStringG(&ds); 117 logVarG(s); 118 ck_assert_str_eq(s, "12000000000"); 119 free(s); 120 terminateG(B); 121 freeManyG(&n, &ds); 122 123 // int 124 setTopG(&n, 120); 125 B = serialG(&n); 126 logI("len %u", lenG(B)); 127 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 128 s = sToString((smallt *) B->B); 129 ck_assert_str_eq(s, "[0x84,0x1e]"); 130 free(s); 131 deserialG(&ds, B); 132 s = toStringG(&ds); 133 ck_assert_str_eq(s, "120"); 134 free(s); 135 terminateG(B); 136 freeManyG(&n, &ds); 137 138 // string 139 setTopG(&n, "string"); 140 B = serialG(&n); 141 logI("len %u", lenG(B)); 142 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 143 s = sToString((smallt *) B->B); 144 ck_assert_str_eq(s, "[0x05,0x73,0x74,0x72,0x69,0x6e,0x67,0x00]"); 145 free(s); 146 deserialG(&ds, B); 147 s = toStringG(&ds); 148 ck_assert_str_eq(s, "string"); 149 free(s); 150 terminateG(B); 151 freeManyG(&n, &ds); 152 153 // dict 154 setG(&d, "k", 4); 155 setTopG(&n, &d); 156 B = serialG(&n); 157 logI("len %u", lenG(B)); 158 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 159 s = sToString((smallt *) B->B); 160 ck_assert_str_eq(s, "[0x4e,0x01,0x6b,0x00,0x08]"); 161 free(s); 162 deserialG(&ds, B); 163 s = toStringG(&ds); 164 ck_assert_str_eq(s, "{\"k\":4}"); 165 free(s); 166 terminateG(B); 167 freeManyG(&n, &ds); 168 169 // array 170 pushG(&a, "k"); 171 pushG(&a, 4); 172 setTopG(&n, &a); 173 B = serialG(&n); 174 logI("len %u", lenG(B)); 175 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 176 s = sToString((smallt *) B->B); 177 ck_assert_str_eq(s, "[0x26,0x45,0x6b,0x00,0x08]"); 178 free(s); 179 deserialG(&ds, B); 180 s = toStringG(&ds); 181 ck_assert_str_eq(s, "[\"k\",4]"); 182 free(s); 183 terminateG(B); 184 freeManyG(&n, &ds); 185 186 END_TEST 187 188 189 190 START_TEST(uniformDictT) 191 192 // STEPS 193 // init 194 // init allocate 195 // terminate 196 // allocate 197 // string 198 // duplicate 199 200 createNetSerial(n); 201 createNetSerial(ds); 202 char *s; 203 smallBytest *B; 204 createSmallDict(d); 205 createSmallDict(dd); 206 createSmallArray(a); 207 208 // undefined 209 undefinedt *oU = allocUndefined(); 210 setG(&d, "0", oU); 211 setG(&d, "1", oU); 212 setG(&d, "2", oU); 213 setG(&d, "3", oU); 214 setG(&d, "4", oU); 215 setNFreeG(&d, "5", oU); 216 setTopG(&n, &d); 217 B = serialG(&n); 218 logI("len %u", lenG(B)); 219 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 220 s = sToString((smallt *) B->B); 221 ck_assert_str_eq(s, "[0x0e,0x06,0x30,0x00,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00]"); 222 free(s); 223 deserialG(&ds, B); 224 s = toStringG(&ds); 225 ck_assert_str_eq(s, "{\"0\":null,\"1\":null,\"2\":null,\"3\":null,\"4\":null,\"5\":null}"); 226 free(s); 227 terminateG(B); 228 freeManyG(&n, &ds); 229 230 // empty dict 231 initiateG(&d); 232 setTopG(&n, &d); 233 B = serialG(&n); 234 logI("len %u", lenG(B)); 235 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 236 s = sToString((smallt *) B->B); 237 ck_assert_str_eq(s, "[0x0e,0x00]"); 238 free(s); 239 deserialG(&ds, B); 240 s = toStringG(&ds); 241 ck_assert_str_eq(s, "{}"); 242 free(s); 243 terminateG(B); 244 freeManyG(&n, &ds); 245 246 // bool 247 initiateG(&d); 248 setG(&d, "0", TRUE); 249 setG(&d, "1", TRUE); 250 setG(&d, "2", TRUE); 251 setG(&d, "3", TRUE); 252 setTopG(&n, &d); 253 B = serialG(&n); 254 logI("len %u", lenG(B)); 255 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 256 s = sToString((smallt *) B->B); 257 ck_assert_str_eq(s, "[0x1e,0x04,0x30,0x00,0x0f,0x31,0x00,0x32,0x00,0x33,0x00]"); 258 free(s); 259 deserialG(&ds, B); 260 s = toStringG(&ds); 261 ck_assert_str_eq(s, "{\"0\":true,\"1\":true,\"2\":true,\"3\":true}"); 262 free(s); 263 terminateG(B); 264 freeManyG(&n, &ds); 265 266 // 9 bools 267 initiateG(&d); 268 setG(&d, "0", TRUE); 269 setG(&d, "1", TRUE); 270 setG(&d, "2", TRUE); 271 setG(&d, "3", TRUE); 272 setG(&d, "4", TRUE); 273 setG(&d, "5", TRUE); 274 setG(&d, "6", TRUE); 275 setG(&d, "7", TRUE); 276 setG(&d, "8", TRUE); 277 setTopG(&n, &d); 278 B = serialG(&n); 279 logI("len %u", lenG(B)); 280 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 281 s = sToString((smallt *) B->B); 282 ck_assert_str_eq(s, "[0x1e,0x09,0x30,0x00,0xff,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x35,0x00,0x36,0x00,0x37,0x00,0x38,0x00,0x01]"); 283 free(s); 284 deserialG(&ds, B); 285 s = toStringG(&ds); 286 ck_assert_str_eq(s, "{\"0\":true,\"1\":true,\"2\":true,\"3\":true,\"4\":true,\"5\":true,\"6\":true,\"7\":true,\"8\":true}"); 287 free(s); 288 terminateG(B); 289 freeManyG(&n, &ds); 290 291 292 // double 293 initiateG(&d); 294 setG(&d, "0", 1.1); 295 setG(&d, "1", 2.2); 296 setG(&d, "2", 3.3); 297 setTopG(&n, &d); 298 B = serialG(&n); 299 logI("len %u", lenG(B)); 300 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 301 s = sToString((smallt *) B->B); 302 ck_assert_str_eq(s, "[0x3e,0x03,0x30,0x00,0x9a,0x99,0x99,0x99,0x99,0x99,0xf1,0x3f,0x31,0x00,0x9a,0x99,0x99,0x99,0x99,0x99,0x01,0x40,0x32,0x00,0x66,0x66,0x66,0x66,0x66,0x66,0x0a,0x40]"); 303 free(s); 304 deserialG(&ds, B); 305 s = toStringG(&ds); 306 ck_assert_str_eq(s, "{\"0\":1.100000e+00,\"1\":2.200000e+00,\"2\":3.300000e+00}"); 307 free(s); 308 terminateG(B); 309 freeManyG(&n, &ds); 310 311 // int 312 initiateG(&d); 313 setG(&d, "0", 1); 314 setG(&d, "1", 2); 315 setTopG(&n, &d); 316 B = serialG(&n); 317 logI("len %u", lenG(B)); 318 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 319 s = sToString((smallt *) B->B); 320 ck_assert_str_eq(s, "[0x4e,0x02,0x30,0x00,0x02,0x31,0x00,0x04]"); 321 free(s); 322 deserialG(&ds, B); 323 s = toStringG(&ds); 324 ck_assert_str_eq(s, "{\"0\":1,\"1\":2}"); 325 free(s); 326 terminateG(B); 327 freeManyG(&n, &ds); 328 329 // string 330 initiateG(&d); 331 setG(&d, "0", "a"); 332 setG(&d, "1", "A"); 333 setG(&d, "2", "z"); 334 setTopG(&n, &d); 335 B = serialG(&n); 336 logI("len %u", lenG(B)); 337 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 338 s = sToString((smallt *) B->B); 339 ck_assert_str_eq(s, "[0x5e,0x03,0x30,0x00,0x61,0x00,0x31,0x00,0x41,0x00,0x32,0x00,0x7a,0x00]"); 340 free(s); 341 deserialG(&ds, B); 342 s = toStringG(&ds); 343 ck_assert_str_eq(s, "{\"0\":\"a\",\"1\":\"A\",\"2\":\"z\"}"); 344 free(s); 345 terminateG(B); 346 freeManyG(&n, &ds); 347 348 // dict 349 initiateG(&d); 350 setG(&dd, "9", "z"); 351 setG(&dd, "1", 1); 352 setG(&d, "0", &dd); 353 initiateG(&dd); 354 setG(&dd, "Z", "-"); 355 setG(&dd, "A", 234); 356 setG(&d, "1", &dd); 357 setTopG(&n, &d); 358 logVarG(&n); 359 B = serialG(&n); 360 logI("len %u", lenG(B)); 361 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 362 s = sToString((smallt *) B->B); 363 ck_assert_str_eq(s, "[0x2e,0x02,0x30,0x00,0x02,0x39,0x00,0x45,0x7a,0x00,0x31,0x00,0x02,0x31,0x00,0x02,0x5a,0x00,0x45,0x2d,0x00,0x41,0x00,0xd4,0x03]"); 364 free(s); 365 deserialG(&ds, B); 366 s = toStringG(&ds); 367 ck_assert_str_eq(s, "{\"0\":{\"9\":\"z\",\"1\":1},\"1\":{\"Z\":\"-\",\"A\":234}}"); 368 free(s); 369 terminateG(B); 370 freeManyG(&n, &ds); 371 372 // uniform dict 373 initiateG(&dd); 374 initiateG(&d); 375 setG(&dd, "9", 1); 376 setG(&dd, "1", 2); 377 setG(&d, "0", &dd); 378 initiateG(&dd); 379 setG(&dd, "Z", "-"); 380 setG(&dd, "A", "+"); 381 setG(&d, "1", &dd); 382 setTopG(&n, &d); 383 logVarG(&n); 384 B = serialG(&n); 385 logI("len %u", lenG(B)); 386 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 387 s = sToString((smallt *) B->B); 388 ck_assert_str_eq(s, "[0xee,0x02,0x30,0x00,0x24,0x39,0x00,0x02,0x31,0x00,0x04,0x31,0x00,0x25,0x5a,0x00,0x2d,0x00,0x41,0x00,0x2b,0x00]"); 389 free(s); 390 deserialG(&ds, B); 391 s = toStringG(&ds); 392 ck_assert_str_eq(s, "{\"0\":{\"9\":1,\"1\":2},\"1\":{\"Z\":\"-\",\"A\":\"+\"}}"); 393 free(s); 394 terminateG(B); 395 freeManyG(&n, &ds); 396 397 // array 398 initiateG(&d); 399 pushG(&a, "k"); 400 pushG(&a, 4); 401 setG(&d, "0", &a); 402 setTopG(&n, &d); 403 B = serialG(&n); 404 logI("len %u", lenG(B)); 405 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 406 s = sToString((smallt *) B->B); 407 ck_assert_str_eq(s, "[0x6e,0x01,0x30,0x00,0x02,0x45,0x6b,0x00,0x08]"); 408 free(s); 409 deserialG(&ds, B); 410 s = toStringG(&ds); 411 ck_assert_str_eq(s, "{\"0\":[\"k\",4]}"); 412 free(s); 413 terminateG(B); 414 freeManyG(&n, &ds); 415 416 // uniform array 417 initiateG(&d); 418 initiateG(&a); 419 pushG(&a, 1); 420 pushG(&a, 2); 421 pushG(&a, 3); 422 pushG(&a, 4); 423 setG(&d, "0", &a); 424 setTopG(&n, &d); 425 B = serialG(&n); 426 logI("len %u", lenG(B)); 427 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 428 s = sToString((smallt *) B->B); 429 ck_assert_str_eq(s, "[0xfe,0x01,0x30,0x00,0x44,0x02,0x04,0x06,0x08]"); 430 free(s); 431 deserialG(&ds, B); 432 s = toStringG(&ds); 433 ck_assert_str_eq(s, "{\"0\":[1,2,3,4]}"); 434 free(s); 435 terminateG(B); 436 freeManyG(&n, &ds); 437 438 // smallBytes 439 initiateG(&d); 440 createSmallBytes(b); 441 createSmallBytes(b1); 442 pushG(&b, 1); 443 pushG(&b, 2); 444 pushG(&b, 3); 445 pushG(&b, 4); 446 pushG(&b1, 5); 447 pushG(&b1, 6); 448 pushG(&b1, 7); 449 setG(&d, "0", &b); 450 setG(&d, "1", &b1); 451 setTopG(&n, &d); 452 B = serialG(&n); 453 logI("len %u", lenG(B)); 454 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 455 s = sToString((smallt *) B->B); 456 ck_assert_str_eq(s, "[0x7e,0x02,0x30,0x00,0x04,0x01,0x02,0x03,0x04,0x31,0x00,0x03,0x05,0x06,0x07]"); 457 free(s); 458 deserialG(&ds, B); 459 s = toStringG(&ds); 460 ck_assert_str_eq(s, "{"_"0"_":[0x01,0x02,0x03,0x04],"_"1"_":[0x05,0x06,0x07]}"); 461 free(s); 462 terminateG(B); 463 freeManyG(&n, &ds); 464 465 END_TEST 466 467 468 // uniformArray 469 START_TEST(uniformArrayT) 470 471 // STEPS 472 // init 473 // init allocate 474 // terminate 475 // allocate 476 // string 477 // duplicate 478 479 createNetSerial(n); 480 createNetSerial(ds); 481 char *s; 482 smallBytest *B; 483 createSmallArray(A); 484 createSmallDict(dd); 485 createSmallArray(a); 486 487 // undefined 488 undefinedt *oU = allocUndefined(); 489 pushG(&A, oU); 490 pushG(&A, oU); 491 pushG(&A, oU); 492 pushG(&A, oU); 493 pushG(&A, oU); 494 pushNFreeG(&A, oU); 495 setTopG(&n, &A); 496 B = serialG(&n); 497 logI("len %u", lenG(B)); 498 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 499 s = sToString((smallt *) B->B); 500 ck_assert_str_eq(s, "[0x0f,0x06]"); 501 free(s); 502 deserialG(&ds, B); 503 s = toStringG(&ds); 504 ck_assert_str_eq(s, "[null,null,null,null,null,null]"); 505 free(s); 506 terminateG(B); 507 freeManyG(&n, &ds); 508 509 // empty dict 510 initiateG(&A); 511 setTopG(&n, &A); 512 B = serialG(&n); 513 logI("len %u", lenG(B)); 514 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 515 s = sToString((smallt *) B->B); 516 ck_assert_str_eq(s, "[0x0f,0x00]"); 517 free(s); 518 deserialG(&ds, B); 519 s = toStringG(&ds); 520 ck_assert_str_eq(s, "[]"); 521 free(s); 522 terminateG(B); 523 freeManyG(&n, &ds); 524 525 // bool 526 initiateG(&A); 527 pushG(&A, TRUE); 528 pushG(&A, TRUE); 529 pushG(&A, TRUE); 530 pushG(&A, TRUE); 531 setTopG(&n, &A); 532 B = serialG(&n); 533 logI("len %u", lenG(B)); 534 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 535 s = sToString((smallt *) B->B); 536 ck_assert_str_eq(s, "[0x1f,0x04,0x0f]"); 537 free(s); 538 deserialG(&ds, B); 539 s = toStringG(&ds); 540 ck_assert_str_eq(s, "[true,true,true,true]"); 541 free(s); 542 terminateG(B); 543 freeManyG(&n, &ds); 544 545 // double 546 initiateG(&A); 547 pushG(&A, 1.1); 548 pushG(&A, 2.2); 549 pushG(&A, 3.3); 550 setTopG(&n, &A); 551 B = serialG(&n); 552 logI("len %u", lenG(B)); 553 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 554 s = sToString((smallt *) B->B); 555 ck_assert_str_eq(s, "[0x3f,0x03,0x9a,0x99,0x99,0x99,0x99,0x99,0xf1,0x3f,0x9a,0x99,0x99,0x99,0x99,0x99,0x01,0x40,0x66,0x66,0x66,0x66,0x66,0x66,0x0a,0x40]"); 556 free(s); 557 deserialG(&ds, B); 558 s = toStringG(&ds); 559 ck_assert_str_eq(s, "[1.100000e+00,2.200000e+00,3.300000e+00]"); 560 free(s); 561 terminateG(B); 562 freeManyG(&n, &ds); 563 564 // int 565 initiateG(&A); 566 pushG(&A, 1); 567 pushG(&A, 2); 568 setTopG(&n, &A); 569 B = serialG(&n); 570 logI("len %u", lenG(B)); 571 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 572 s = sToString((smallt *) B->B); 573 ck_assert_str_eq(s, "[0x4f,0x02,0x02,0x04]"); 574 free(s); 575 deserialG(&ds, B); 576 s = toStringG(&ds); 577 ck_assert_str_eq(s, "[1,2]"); 578 free(s); 579 terminateG(B); 580 freeManyG(&n, &ds); 581 582 // string 583 initiateG(&A); 584 pushG(&A, "a"); 585 pushG(&A, "A"); 586 pushG(&A, "z"); 587 setTopG(&n, &A); 588 B = serialG(&n); 589 logI("len %u", lenG(B)); 590 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 591 s = sToString((smallt *) B->B); 592 ck_assert_str_eq(s, "[0x5f,0x03,0x61,0x00,0x41,0x00,0x7a,0x00]"); 593 free(s); 594 deserialG(&ds, B); 595 s = toStringG(&ds); 596 ck_assert_str_eq(s, "[\"a\",\"A\",\"z\"]"); 597 free(s); 598 terminateG(B); 599 freeManyG(&n, &ds); 600 601 // dict 602 initiateG(&A); 603 setG(&dd, "9", "z"); 604 setG(&dd, "1", 1); 605 pushG(&A, &dd); 606 initiateG(&dd); 607 setG(&dd, "Z", "-"); 608 setG(&dd, "A", 234); 609 pushG(&A, &dd); 610 setTopG(&n, &A); 611 logVarG(&n); 612 B = serialG(&n); 613 logI("len %u", lenG(B)); 614 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 615 s = sToString((smallt *) B->B); 616 ck_assert_str_eq(s, "[0x2f,0x02,0x02,0x39,0x00,0x45,0x7a,0x00,0x31,0x00,0x02,0x02,0x5a,0x00,0x45,0x2d,0x00,0x41,0x00,0xd4,0x03]"); 617 free(s); 618 deserialG(&ds, B); 619 s = toStringG(&ds); 620 ck_assert_str_eq(s, "[{\"9\":\"z\",\"1\":1},{\"Z\":\"-\",\"A\":234}]"); 621 free(s); 622 terminateG(B); 623 freeManyG(&n, &ds); 624 625 // uniform dict 626 initiateG(&dd); 627 initiateG(&A); 628 setG(&dd, "9", 1); 629 setG(&dd, "1", 2); 630 pushG(&A, &dd); 631 initiateG(&dd); 632 setG(&dd, "Z", "-"); 633 setG(&dd, "A", "+"); 634 pushG(&A, &dd); 635 setTopG(&n, &A); 636 logVarG(&n); 637 B = serialG(&n); 638 logI("len %u", lenG(B)); 639 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 640 s = sToString((smallt *) B->B); 641 ck_assert_str_eq(s, "[0xef,0x02,0x24,0x39,0x00,0x02,0x31,0x00,0x04,0x25,0x5a,0x00,0x2d,0x00,0x41,0x00,0x2b,0x00]"); 642 free(s); 643 deserialG(&ds, B); 644 s = toStringG(&ds); 645 ck_assert_str_eq(s, "[{\"9\":1,\"1\":2},{\"Z\":\"-\",\"A\":\"+\"}]"); 646 free(s); 647 terminateG(B); 648 freeManyG(&n, &ds); 649 650 // array 651 initiateG(&A); 652 pushG(&a, "k"); 653 pushG(&a, 4); 654 pushG(&A, &a); 655 setTopG(&n, &A); 656 B = serialG(&n); 657 logI("len %u", lenG(B)); 658 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 659 s = sToString((smallt *) B->B); 660 ck_assert_str_eq(s, "[0x6f,0x01,0x02,0x45,0x6b,0x00,0x08]"); 661 free(s); 662 deserialG(&ds, B); 663 s = toStringG(&ds); 664 ck_assert_str_eq(s, "[[\"k\",4]]"); 665 free(s); 666 terminateG(B); 667 freeManyG(&n, &ds); 668 669 initiateG(&A); 670 initiateG(&a); 671 pushG(&a, 1); 672 pushG(&a, 2); 673 pushG(&a, 3); 674 pushG(&a, 4); 675 pushG(&A, &a); 676 setTopG(&n, &A); 677 B = serialG(&n); 678 logI("len %u", lenG(B)); 679 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 680 s = sToString((smallt *) B->B); 681 ck_assert_str_eq(s, "[0xff,0x01,0x44,0x02,0x04,0x06,0x08]"); 682 free(s); 683 deserialG(&ds, B); 684 s = toStringG(&ds); 685 ck_assert_str_eq(s, "[[1,2,3,4]]"); 686 free(s); 687 terminateG(B); 688 freeManyG(&n, &ds); 689 690 // many bools in uniform array 691 parseG(&n, "[true,true,true,true,true,true,true,true,false,true]"); 692 logVarG(&n); 693 B = serialG(&n); 694 logI("len %u", lenG(B)); 695 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 696 s = sToString((smallt *) B->B); 697 ck_assert_str_eq(s, "[0x1f,0x0a,0xff,0x02]"); 698 free(s); 699 deserialG(&ds, B); 700 s = toStringG(&ds); 701 ck_assert_str_eq(s, "[true,true,true,true,true,true,true,true,false,true]"); 702 free(s); 703 terminateG(B); 704 freeManyG(&n, &ds); 705 706 // smallBytes 707 initiateG(&A); 708 createSmallBytes(b); 709 pushG(&b, 1); 710 pushG(&b, 2); 711 pushG(&b, 3); 712 pushG(&b, 4); 713 pushG(&b, 5); 714 pushG(&b, 6); 715 pushG(&A, &b); 716 initiateG(&b); 717 pushG(&b, 7); 718 pushG(&b, 8); 719 pushG(&b, 9); 720 pushG(&b, 10); 721 pushG(&b, 11); 722 pushG(&b, 12); 723 pushG(&A, &b); 724 setTopG(&n, &A); 725 logVarG(&n); 726 B = serialG(&n); 727 logI("len %u", lenG(B)); 728 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 729 s = sToString((smallt *) B->B); 730 ck_assert_str_eq(s, "[0x7f,0x02,0x06,0x01,0x02,0x03,0x04,0x05,0x06,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c]"); 731 free(s); 732 deserialG(&ds, B); 733 s = toStringG(&ds); 734 ck_assert_str_eq(s, "[[0x01,0x02,0x03,0x04,0x05,0x06],[0x07,0x08,0x09,0x0a,0x0b,0x0c]]"); 735 free(s); 736 terminateG(B); 737 freeManyG(&n, &ds); 738 739 END_TEST 740 741 742 // dict with values, dict, array, uniforms, packed test high/low nibbles 743 START_TEST(dictT) 744 745 // STEPS 746 // init 747 // init allocate 748 // terminate 749 // allocate 750 // string 751 // duplicate 752 753 createNetSerial(n); 754 createNetSerial(ds); 755 char *s; 756 smallBytest *B; 757 createSmallDict(d); 758 createSmallDict(dd); 759 createSmallArray(a); 760 761 // dict with a deleted element (empty with dict->count == 1) 762 initiateG(&d); 763 setG(&d, "0", NULL); 764 delElemG(&d, "0"); 765 setTopG(&n, &d); 766 logVarG(&n); 767 B = serialG(&n); 768 logI("len %u", lenG(B)); 769 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 770 s = sToString((smallt *) B->B); 771 ck_assert_str_eq(s, "[0x0e,0x00]"); 772 free(s); 773 deserialG(&ds, B); 774 s = toStringG(&ds); 775 ck_assert_str_eq(s, "{}"); 776 free(s); 777 terminateG(B); 778 freeManyG(&n, &ds); 779 780 // null and uniform dict 781 initiateG(&d); 782 setG(&d, "0", NULL); 783 initiateG(&dd); 784 setG(&dd, "Z", "-"); 785 setG(&dd, "A", "+"); 786 setG(&d, "1", &dd); 787 setTopG(&n, &d); 788 logVarG(&n); 789 B = serialG(&n); 790 logI("len %u", lenG(B)); 791 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 792 s = sToString((smallt *) B->B); 793 ck_assert_str_eq(s, "[0x22,0x30,0x00,0xe0,0x31,0x00,0x25,0x5a,0x00,0x2d,0x00,0x41,0x00,0x2b,0x00]"); 794 free(s); 795 deserialG(&ds, B); 796 s = toStringG(&ds); 797 ck_assert_str_eq(s, "{\"0\":null,\"1\":{\"Z\":\"-\",\"A\":\"+\"}}"); 798 free(s); 799 terminateG(B); 800 freeManyG(&n, &ds); 801 802 // null and dict 803 initiateG(&d); 804 setG(&d, "0", NULL); 805 initiateG(&dd); 806 setG(&dd, "Z", "-"); 807 setG(&dd, "A", 1); 808 setG(&d, "1", &dd); 809 setTopG(&n, &d); 810 logVarG(&n); 811 B = serialG(&n); 812 logI("len %u", lenG(B)); 813 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 814 s = sToString((smallt *) B->B); 815 ck_assert_str_eq(s, "[0x22,0x30,0x00,0x20,0x31,0x00,0x02,0x5a,0x00,0x45,0x2d,0x00,0x41,0x00,0x02]"); 816 free(s); 817 deserialG(&ds, B); 818 s = toStringG(&ds); 819 ck_assert_str_eq(s, "{\"0\":null,\"1\":{\"Z\":\"-\",\"A\":1}}"); 820 free(s); 821 terminateG(B); 822 freeManyG(&n, &ds); 823 824 // bool and uniform dict 825 initiateG(&d); 826 setG(&d, "0", TRUE); 827 initiateG(&dd); 828 setG(&dd, "Z", "-"); 829 setG(&dd, "A", "+"); 830 setG(&d, "1", &dd); 831 setTopG(&n, &d); 832 logVarG(&n); 833 B = serialG(&n); 834 logI("len %u", lenG(B)); 835 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 836 s = sToString((smallt *) B->B); 837 ck_assert_str_eq(s, "[0x22,0x30,0x00,0x11,0x31,0x00,0x5e,0x02,0x5a,0x00,0x2d,0x00,0x41,0x00,0x2b,0x00]"); 838 free(s); 839 deserialG(&ds, B); 840 s = toStringG(&ds); 841 ck_assert_str_eq(s, "{\"0\":true,\"1\":{\"Z\":\"-\",\"A\":\"+\"}}"); 842 free(s); 843 terminateG(B); 844 freeManyG(&n, &ds); 845 846 // null element and uniform array 847 initiateG(&d); 848 setG(&d, "1", NULL); 849 initiateG(&a); 850 pushG(&a, 1); 851 pushG(&a, 2); 852 pushG(&a, 3); 853 pushG(&a, 4); 854 setG(&d, "0", &a); 855 setTopG(&n, &d); 856 logVarG(&n); 857 B = serialG(&n); 858 logI("len %u", lenG(B)); 859 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 860 s = sToString((smallt *) B->B); 861 ck_assert_str_eq(s, "[0x22,0x31,0x00,0xf0,0x30,0x00,0x44,0x02,0x04,0x06,0x08]"); 862 free(s); 863 deserialG(&ds, B); 864 s = toStringG(&ds); 865 ck_assert_str_eq(s, "{\"1\":null,\"0\":[1,2,3,4]}"); 866 free(s); 867 terminateG(B); 868 freeManyG(&n, &ds); 869 870 // uniform array high nibble 871 initiateG(&d); 872 setG(&d, "1", TRUE); 873 initiateG(&a); 874 pushG(&a, 1); 875 pushG(&a, 2); 876 pushG(&a, 3); 877 pushG(&a, 4); 878 setG(&d, "0", &a); 879 setTopG(&n, &d); 880 logVarG(&n); 881 B = serialG(&n); 882 logI("len %u", lenG(B)); 883 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 884 s = sToString((smallt *) B->B); 885 ck_assert_str_eq(s, "[0x22,0x31,0x00,0x11,0x30,0x00,0x4f,0x04,0x02,0x04,0x06,0x08]"); 886 free(s); 887 deserialG(&ds, B); 888 s = toStringG(&ds); 889 ck_assert_str_eq(s, "{\"1\":true,\"0\":[1,2,3,4]}"); 890 free(s); 891 terminateG(B); 892 freeManyG(&n, &ds); 893 894 // uniform array in high nibble 895 initiateG(&d); 896 setG(&d, "1", "1"); 897 initiateG(&a); 898 pushG(&a, 1); 899 pushG(&a, 2); 900 pushG(&a, 3); 901 pushG(&a, 4); 902 setG(&d, "0", &a); 903 setTopG(&n, &d); 904 logVarG(&n); 905 B = serialG(&n); 906 logI("len %u", lenG(B)); 907 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 908 s = sToString((smallt *) B->B); 909 ck_assert_str_eq(s, "[0x22,0x31,0x00,0xf5,0x31,0x00,0x30,0x00,0x44,0x02,0x04,0x06,0x08]"); 910 free(s); 911 deserialG(&ds, B); 912 s = toStringG(&ds); 913 ck_assert_str_eq(s, "{\"1\":\"1\",\"0\":[1,2,3,4]}"); 914 free(s); 915 terminateG(B); 916 freeManyG(&n, &ds); 917 918 // low and high nibble undefined 919 parseG(&n, "{"_"0"_":null,"_"1"_":null, "_"2"_":1}"); 920 logVarG(&n); 921 B = serialG(&n); 922 logI("len %u", lenG(B)); 923 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 924 s = sToString((smallt *) B->B); 925 ck_assert_str_eq(s, "[0x32,0x30,0x00,0x00,0x31,0x00,0x32,0x00,0x24]"); 926 free(s); 927 deserialG(&ds, B); 928 s = toStringG(&ds); 929 ck_assert_str_eq(s, "{\"0\":null,\"1\":null,\"2\":1}"); 930 free(s); 931 terminateG(B); 932 freeManyG(&n, &ds); 933 934 // low and high nibble bool 935 parseG(&n, "{"_"z"_":null,"_"0"_":true,"_"1"_":true, "_"2"_":true, "_"3"_":true"_"4"_":true"_"5"_":true, "_"6"_":true, "_"7"_":true, "_"8"_":true, "_"9"_":true, "_"a"_":true, "_"b"_":true, "_"c"_":true, "_"d"_":true}"); 936 logVarG(&n); 937 B = serialG(&n); 938 logI("len %u", lenG(B)); 939 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 940 s = sToString((smallt *) B->B); 941 ck_assert_str_eq(s, "[0xf2,0x01,0x7a,0x00,0x10,0x30,0x00,0xff,0x31,0x00,0x11,0x32,0x00,0x33,0x00,0x11,0x34,0x00,0x35,0x00,0x11,0x36,0x00,0x37,0x00,0x11,0x38,0x00,0x3f,0x39,0x00,0x11,0x61,0x00,0x62,0x00,0x11,0x63,0x00,0x64,0x00,0x01]"); 942 free(s); 943 deserialG(&ds, B); 944 s = toStringG(&ds); 945 ck_assert_str_eq(s, "{\"z\":null,\"0\":true,\"1\":true,\"2\":true,\"3\":true,\"4\":true,\"5\":true,\"6\":true,\"7\":true,\"8\":true,\"9\":true,\"a\":true,\"b\":true,\"c\":true,\"d\":true}"); 946 free(s); 947 terminateG(B); 948 freeManyG(&n, &ds); 949 950 // low and high nibble bool - deserialDict ctx->nibble == lowNbl and ctx->boolShift == 8 951 parseG(&n, "{"_"z"_":null,"_"0"_":true,"_"1"_":true, "_"2"_":true, "_"3"_":true, "_"4"_":true, "_"5"_":true, "_"6"_":true, "_"7"_":true, \"Z\": null, "_"8"_":true, "_"9"_":true, "_"a"_":true, "_"b"_":true, "_"c"_":true, "_"d"_":true}"); 952 logVarG(&n); 953 B = serialG(&n); 954 logI("len %u", lenG(B)); 955 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 956 s = sToString((smallt *) B->B); 957 ck_assert_str_eq(s, "[0x82,0x02,0x7a,0x00,0x10,0x30,0x00,0xff,0x31,0x00,0x11,0x32,0x00,0x33,0x00,0x11,0x34,0x00,0x35,0x00,0x11,0x36,0x00,0x37,0x00,0x01,0x5a,0x00,0x38,0x00,0xf1,0x39,0x00,0x11,0x61,0x00,0x62,0x00,0x11,0x63,0x00,0x03,0x64,0x00,0x01]"); 958 free(s); 959 deserialG(&ds, B); 960 s = toStringG(&ds); 961 ck_assert_str_eq(s, "{\"z\":null,\"0\":true,\"1\":true,\"2\":true,\"3\":true,\"4\":true,\"5\":true,\"6\":true,\"7\":true,\"Z\":null,\"8\":true,\"9\":true,\"a\":true,\"b\":true,\"c\":true,\"d\":true}"); 962 free(s); 963 terminateG(B); 964 freeManyG(&n, &ds); 965 966 // dict in dict 967 parseG(&n, "{"_"0"_":{\"0\":true}, "_"2"_":{\"0\":false},\"z\":null}"); 968 logVarG(&n); 969 B = serialG(&n); 970 logI("len %u", lenG(B)); 971 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 972 s = sToString((smallt *) B->B); 973 ck_assert_str_eq(s, "[0x32,0x30,0x00,0x1e,0x01,0x30,0x00,0x01,0x32,0x00,0x1e,0x01,0x30,0x00,0x7a,0x00,0x00]"); 974 free(s); 975 deserialG(&ds, B); 976 s = toStringG(&ds); 977 ck_assert_str_eq(s, "{\"0\":{\"0\":true},\"2\":{\"0\":false},\"z\":null}"); 978 free(s); 979 terminateG(B); 980 freeManyG(&n, &ds); 981 982 983 // low and high nibble double 984 parseG(&n, "{"_"0"_":0.0, "_"2"_":2.0,\"z\":null}"); 985 logVarG(&n); 986 B = serialG(&n); 987 logI("len %u", lenG(B)); 988 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 989 s = sToString((smallt *) B->B); 990 ck_assert_str_eq(s, "[0x32,0x30,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x7a,0x00,0x00]"); 991 free(s); 992 deserialG(&ds, B); 993 s = toStringG(&ds); 994 ck_assert_str_eq(s, "{\"0\":0.000000e+00,\"2\":2.000000e+00,\"z\":null}"); 995 free(s); 996 terminateG(B); 997 freeManyG(&n, &ds); 998 999 // high nibble string 1000 parseG(&n, "{"_"0"_":null, "_"2"_":\"2.0\",\"z\":null}"); 1001 logVarG(&n); 1002 B = serialG(&n); 1003 logI("len %u", lenG(B)); 1004 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1005 s = sToString((smallt *) B->B); 1006 ck_assert_str_eq(s, "[0x32,0x30,0x00,0x50,0x32,0x00,0x32,0x2e,0x30,0x00,0x7a,0x00,0x00]"); 1007 free(s); 1008 deserialG(&ds, B); 1009 s = toStringG(&ds); 1010 ck_assert_str_eq(s, "{\"0\":null,\"2\":\"2.0\",\"z\":null}"); 1011 free(s); 1012 terminateG(B); 1013 freeManyG(&n, &ds); 1014 1015 // array in dict 1016 parseG(&n, "{"_"0"_":null, "_"2"_":[1,2],\"z\":[true,3]}"); 1017 logVarG(&n); 1018 B = serialG(&n); 1019 logI("len %u", lenG(B)); 1020 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1021 s = sToString((smallt *) B->B); 1022 ck_assert_str_eq(s, "[0x32,0x30,0x00,0xf0,0x32,0x00,0x24,0x02,0x04,0x7a,0x00,0x26,0x11,0x64]"); 1023 free(s); 1024 deserialG(&ds, B); 1025 s = toStringG(&ds); 1026 ck_assert_str_eq(s, "{\"0\":null,\"2\":[1,2],\"z\":[true,3]}"); 1027 free(s); 1028 terminateG(B); 1029 freeManyG(&n, &ds); 1030 1031 1032 1033 // packed dicts 1034 parseG(&n, "{"_"0"_":{},"_"1"_":{}, "_"2"_":{}, "_"3"_":{}, "_"4"_":{}, "_"5"_": 1}"); 1035 logVarG(&n); 1036 B = serialG(&n); 1037 logI("len %u", lenG(B)); 1038 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1039 s = sToString((smallt *) B->B); 1040 ck_assert_str_eq(s, "[0x62,0x30,0x00,0x58,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x33,0x00,0x00,0x34,0x00,0x00,0x35,0x00,0x24]"); 1041 free(s); 1042 deserialG(&ds, B); 1043 s = toStringG(&ds); 1044 ck_assert_str_eq(s, "{\"0\":{},\"1\":{},\"2\":{},\"3\":{},\"4\":{},\"5\":1}"); 1045 free(s); 1046 terminateG(B); 1047 freeManyG(&n, &ds); 1048 1049 parseG(&n, "{"_"0"_":{"_"0"_":null,"_"1"_":1},"_"1"_":{"_"0"_":"_"0"_","_"1"_":1}, "_"2"_":{"_"0"_":"_"0"_","_"1"_":1}, "_"3"_":{"_"0"_":"_"0"_","_"1"_":1}, "_"4"_":{"_"0"_":"_"0"_","_"1"_":1}, "_"5"_": 1}"); 1050 logVarG(&n); 1051 B = serialG(&n); 1052 logI("len %u", lenG(B)); 1053 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1054 s = sToString((smallt *) B->B); 1055 ck_assert_str_eq(s, "[0x62,0x30,0x00,0x58,0x02,0x30,0x00,0x40,0x31,0x00,0x02,0x31,0x00,0x02,0x30,0x00,0x45,0x30,0x00,0x31,0x00,0x02,0x32,0x00,0x02,0x30,0x00,0x45,0x30,0x00,0x31,0x00,0x02,0x33,0x00,0x02,0x30,0x00,0x45,0x30,0x00,0x31,0x00,0x02,0x34,0x00,0x02,0x30,0x00,0x45,0x30,0x00,0x31,0x00,0x02,0x35,0x00,0x24]"); 1056 free(s); 1057 deserialG(&ds, B); 1058 s = toStringG(&ds); 1059 ck_assert_str_eq(s, "{\"0\":{\"0\":null,\"1\":1},\"1\":{\"0\":\"0\",\"1\":1},\"2\":{\"0\":\"0\",\"1\":1},\"3\":{\"0\":\"0\",\"1\":1},\"4\":{\"0\":\"0\",\"1\":1},\"5\":1}"); 1060 free(s); 1061 terminateG(B); 1062 freeManyG(&n, &ds); 1063 1064 // high nibble packed dicts 1065 parseG(&n, "{\"a\": null,"_"0"_":{},"_"1"_":{}, "_"2"_":{}, "_"3"_":{}, "_"4"_":{}, "_"5"_": 1}"); 1066 logVarG(&n); 1067 B = serialG(&n); 1068 logI("len %u", lenG(B)); 1069 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1070 s = sToString((smallt *) B->B); 1071 ck_assert_str_eq(s, "[0x72,0x61,0x00,0x80,0x30,0x00,0x05,0x00,0x31,0x00,0x00,0x32,0x00,0x00,0x33,0x00,0x00,0x34,0x00,0x00,0x35,0x00,0x24]"); 1072 free(s); 1073 deserialG(&ds, B); 1074 s = toStringG(&ds); 1075 ck_assert_str_eq(s, "{\"a\":null,\"0\":{},\"1\":{},\"2\":{},\"3\":{},\"4\":{},\"5\":1}"); 1076 free(s); 1077 terminateG(B); 1078 freeManyG(&n, &ds); 1079 1080 1081 // packed doubles 1082 parseG(&n, "{"_"0"_":0.0,"_"1"_":1.0, "_"2"_":2.0, "_"3"_":3.0, "_"4"_":4.0, "_"5"_": null}"); 1083 logVarG(&n); 1084 B = serialG(&n); 1085 logI("len %u", lenG(B)); 1086 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1087 s = sToString((smallt *) B->B); 1088 ck_assert_str_eq(s, "[0x62,0x30,0x00,0x59,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x35,0x00,0x00]"); 1089 free(s); 1090 deserialG(&ds, B); 1091 s = toStringG(&ds); 1092 ck_assert_str_eq(s, "{\"0\":0.000000e+00,\"1\":1.000000e+00,\"2\":2.000000e+00,\"3\":3.000000e+00,\"4\":4.000000e+00,\"5\":null}"); 1093 free(s); 1094 terminateG(B); 1095 freeManyG(&n, &ds); 1096 1097 // high nibble packed doubles 1098 parseG(&n, "{\"a\": null, "_"0"_":0.0,"_"1"_":1.0, "_"2"_":2.0, "_"3"_":3.0, "_"4"_":4.0, "_"5"_": null}"); 1099 logVarG(&n); 1100 B = serialG(&n); 1101 logI("len %u", lenG(B)); 1102 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1103 s = sToString((smallt *) B->B); 1104 ck_assert_str_eq(s, "[0x72,0x61,0x00,0x90,0x30,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x32,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x35,0x00,0x00]"); 1105 free(s); 1106 deserialG(&ds, B); 1107 s = toStringG(&ds); 1108 ck_assert_str_eq(s, "{\"a\":null,\"0\":0.000000e+00,\"1\":1.000000e+00,\"2\":2.000000e+00,\"3\":3.000000e+00,\"4\":4.000000e+00,\"5\":null}"); 1109 free(s); 1110 terminateG(B); 1111 freeManyG(&n, &ds); 1112 1113 1114 // packed ints 1115 parseG(&n, "{\"1\":1,\"2\":2,\"3\":3,\"4\":4,\"Z\":\"l\"}"); 1116 logVarG(&n); 1117 B = serialG(&n); 1118 logI("len %u", lenG(B)); 1119 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1120 s = sToString((smallt *) B->B); 1121 ck_assert_str_eq(s, "[0x52,0x31,0x00,0x4a,0x02,0x32,0x00,0x04,0x33,0x00,0x06,0x34,0x00,0x08,0x5a,0x00,0x05,0x6c,0x00]"); 1122 free(s); 1123 deserialG(&ds, B); 1124 s = toStringG(&ds); 1125 ck_assert_str_eq(s, "{\"1\":1,\"2\":2,\"3\":3,\"4\":4,\"Z\":\"l\"}"); 1126 free(s); 1127 terminateG(B); 1128 freeManyG(&n, &ds); 1129 1130 // high nibble packed ints 1131 parseG(&n, "{\"0\":null,\"1\":1,\"2\":2,\"3\":3,\"4\":4,\"Z\":\"l\"}"); 1132 logVarG(&n); 1133 B = serialG(&n); 1134 logI("len %u", lenG(B)); 1135 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1136 s = sToString((smallt *) B->B); 1137 ck_assert_str_eq(s, "[0x62,0x30,0x00,0xa0,0x31,0x00,0x04,0x02,0x32,0x00,0x04,0x33,0x00,0x06,0x34,0x00,0x08,0x5a,0x00,0x05,0x6c,0x00]"); 1138 free(s); 1139 deserialG(&ds, B); 1140 s = toStringG(&ds); 1141 ck_assert_str_eq(s, "{\"0\":null,\"1\":1,\"2\":2,\"3\":3,\"4\":4,\"Z\":\"l\"}"); 1142 free(s); 1143 terminateG(B); 1144 freeManyG(&n, &ds); 1145 1146 1147 // packed strings 1148 parseG(&n, "{\"1\":\"1\",\"2\":\"2\",\"3\":\"3\",\"4\":\"4\",\"Z\":null}"); 1149 logVarG(&n); 1150 B = serialG(&n); 1151 logI("len %u", lenG(B)); 1152 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1153 s = sToString((smallt *) B->B); 1154 ck_assert_str_eq(s, "[0x52,0x31,0x00,0x4b,0x31,0x00,0x32,0x00,0x32,0x00,0x33,0x00,0x33,0x00,0x34,0x00,0x34,0x00,0x5a,0x00,0x00]"); 1155 free(s); 1156 deserialG(&ds, B); 1157 s = toStringG(&ds); 1158 ck_assert_str_eq(s, "{\"1\":\"1\",\"2\":\"2\",\"3\":\"3\",\"4\":\"4\",\"Z\":null}"); 1159 free(s); 1160 terminateG(B); 1161 freeManyG(&n, &ds); 1162 1163 // high nibble packed strings 1164 parseG(&n, "{\"0\":null,\"1\":\"1\",\"2\":\"2\",\"3\":\"3\",\"4\":\"4\",\"Z\":null}"); 1165 logVarG(&n); 1166 B = serialG(&n); 1167 logI("len %u", lenG(B)); 1168 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1169 s = sToString((smallt *) B->B); 1170 ck_assert_str_eq(s, "[0x62,0x30,0x00,0xb0,0x31,0x00,0x04,0x31,0x00,0x32,0x00,0x32,0x00,0x33,0x00,0x33,0x00,0x34,0x00,0x34,0x00,0x5a,0x00,0x00]"); 1171 free(s); 1172 deserialG(&ds, B); 1173 s = toStringG(&ds); 1174 ck_assert_str_eq(s, "{\"0\":null,\"1\":\"1\",\"2\":\"2\",\"3\":\"3\",\"4\":\"4\",\"Z\":null}"); 1175 free(s); 1176 terminateG(B); 1177 freeManyG(&n, &ds); 1178 1179 // packed arrays 1180 parseG(&n, "{\"1\":[],\"2\":[1],\"3\":[\"3r\"],\"4\":[true],\"Z\":null}"); 1181 logVarG(&n); 1182 B = serialG(&n); 1183 logI("len %u", lenG(B)); 1184 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1185 s = sToString((smallt *) B->B); 1186 ck_assert_str_eq(s, "[0x52,0x31,0x00,0x4c,0x00,0x32,0x00,0x01,0x24,0x33,0x00,0x01,0x15,0x33,0x72,0x00,0x34,0x00,0x01,0x01,0x5a,0x00,0x00]"); 1187 free(s); 1188 deserialG(&ds, B); 1189 s = toStringG(&ds); 1190 ck_assert_str_eq(s, "{\"1\":[],\"2\":[1],\"3\":[\"3r\"],\"4\":[true],\"Z\":null}"); 1191 free(s); 1192 terminateG(B); 1193 freeManyG(&n, &ds); 1194 1195 // high nibble packed arrays 1196 parseG(&n, "{\"0\":null,\"1\":[],\"2\":[1],\"3\":[\"3r\"],\"4\":[true],\"Z\":null}"); 1197 logVarG(&n); 1198 B = serialG(&n); 1199 logI("len %u", lenG(B)); 1200 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1201 s = sToString((smallt *) B->B); 1202 ck_assert_str_eq(s, "[0x62,0x30,0x00,0xc0,0x31,0x00,0x04,0x00,0x32,0x00,0x01,0x24,0x33,0x00,0x01,0x15,0x33,0x72,0x00,0x34,0x00,0x01,0x01,0x5a,0x00,0x00]"); 1203 free(s); 1204 deserialG(&ds, B); 1205 s = toStringG(&ds); 1206 ck_assert_str_eq(s, "{\"0\":null,\"1\":[],\"2\":[1],\"3\":[\"3r\"],\"4\":[true],\"Z\":null}"); 1207 free(s); 1208 terminateG(B); 1209 freeManyG(&n, &ds); 1210 1211 // smallBytes 1212 parseG(&n, "{"_"0"_":null,"_"z"_":[true,3]}"); 1213 createSmallBytes(b); 1214 pushG(&b, 1); 1215 pushG(&b, 2); 1216 pushG(&b, 3); 1217 pushG(&b, 4); 1218 pushG(&b, 5); 1219 pushG(&b, 6); 1220 setG(&n, "bytes", &b); 1221 logVarG(&n); 1222 B = serialG(&n); 1223 logI("len %u", lenG(B)); 1224 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1225 s = sToString((smallt *) B->B); 1226 ck_assert_str_eq(s, "[0x32,0x30,0x00,0x60,0x7a,0x00,0x02,0x11,0x64,0x62,0x79,0x74,0x65,0x73,0x00,0x67,0x01,0x02,0x03,0x04,0x05,0x06]"); 1227 free(s); 1228 deserialG(&ds, B); 1229 s = toStringG(&ds); 1230 ck_assert_str_eq(s, "{"_"0"_":null,"_"z"_":[true,3],"_"bytes"_":[0x01,0x02,0x03,0x04,0x05,0x06]}"); 1231 free(s); 1232 terminateG(B); 1233 freeManyG(&n, &ds); 1234 1235 parseG(&n, "{"_"0"_":null,"_"z"_":[true,3],"_"1"_":null}"); 1236 initiateG(&b); 1237 pushG(&b, 1); 1238 pushG(&b, 2); 1239 pushG(&b, 3); 1240 pushG(&b, 4); 1241 pushG(&b, 5); 1242 pushG(&b, 6); 1243 setG(&n, "bytes", &b); 1244 logVarG(&n); 1245 B = serialG(&n); 1246 logI("len %u", lenG(B)); 1247 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1248 s = sToString((smallt *) B->B); 1249 ck_assert_str_eq(s, "[0x42,0x30,0x00,0x60,0x7a,0x00,0x02,0x11,0x64,0x31,0x00,0x70,0x62,0x79,0x74,0x65,0x73,0x00,0x06,0x01,0x02,0x03,0x04,0x05,0x06]"); 1250 free(s); 1251 deserialG(&ds, B); 1252 s = toStringG(&ds); 1253 ck_assert_str_eq(s, "{"_"0"_":null,"_"z"_":[true,3],"_"1"_":null,"_"bytes"_":[0x01,0x02,0x03,0x04,0x05,0x06]}"); 1254 free(s); 1255 terminateG(B); 1256 freeManyG(&n, &ds); 1257 1258 END_TEST 1259 1260 1261 // array with values, dict, array, uniforms, packed test high/low nibbles 1262 START_TEST(arrayT) 1263 1264 // STEPS 1265 // init 1266 // init allocate 1267 // terminate 1268 // allocate 1269 // string 1270 // duplicate 1271 1272 createNetSerial(n); 1273 createNetSerial(ds); 1274 char *s; 1275 smallBytest *B; 1276 createSmallArray(A); 1277 createSmallArray(a); 1278 1279 // null and uniform array 1280 initiateG(&A); 1281 pushG(&A, NULL); 1282 initiateG(&a); 1283 pushG(&a, 1); 1284 pushG(&a, 2); 1285 pushG(&a, 3); 1286 pushG(&a, 4); 1287 pushG(&A, &a); 1288 setTopG(&n, &A); 1289 logVarG(&n); 1290 B = serialG(&n); 1291 logI("len %u", lenG(B)); 1292 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1293 s = sToString((smallt *) B->B); 1294 ck_assert_str_eq(s, "[0x26,0xf0,0x44,0x02,0x04,0x06,0x08]"); 1295 free(s); 1296 deserialG(&ds, B); 1297 s = toStringG(&ds); 1298 //ck_assert_str_eq(s, "[null,null]"); 1299 ck_assert_str_eq(s, "[null,[1,2,3,4]]"); 1300 free(s); 1301 terminateG(B); 1302 freeManyG(&n, &ds); 1303 1304 // uniform array in high low 1305 initiateG(&A); 1306 pushG(&A, FALSE); 1307 initiateG(&a); 1308 pushG(&a, 1); 1309 pushG(&a, 2); 1310 pushG(&a, 3); 1311 pushG(&a, 4); 1312 pushG(&A, &a); 1313 setTopG(&n, &A); 1314 logVarG(&n); 1315 B = serialG(&n); 1316 logI("len %u", lenG(B)); 1317 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1318 s = sToString((smallt *) B->B); 1319 ck_assert_str_eq(s, "[0x26,0x01,0x4f,0x04,0x02,0x04,0x06,0x08]"); 1320 free(s); 1321 deserialG(&ds, B); 1322 s = toStringG(&ds); 1323 //ck_assert_str_eq(s, "[null,null]"); 1324 ck_assert_str_eq(s, "[false,[1,2,3,4]]"); 1325 free(s); 1326 terminateG(B); 1327 freeManyG(&n, &ds); 1328 1329 // uniform array in high nibble 1330 initiateG(&A); 1331 pushG(&A, "1"); 1332 initiateG(&a); 1333 pushG(&a, 1); 1334 pushG(&a, 2); 1335 pushG(&a, 3); 1336 pushG(&a, 4); 1337 pushG(&A, &a); 1338 setTopG(&n, &A); 1339 logVarG(&n); 1340 B = serialG(&n); 1341 logI("len %u", lenG(B)); 1342 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1343 s = sToString((smallt *) B->B); 1344 ck_assert_str_eq(s, "[0x26,0xf5,0x31,0x00,0x44,0x02,0x04,0x06,0x08]"); 1345 free(s); 1346 deserialG(&ds, B); 1347 s = toStringG(&ds); 1348 ck_assert_str_eq(s, "[\"1\",[1,2,3,4]]"); 1349 free(s); 1350 terminateG(B); 1351 freeManyG(&n, &ds); 1352 1353 // high nibble array 1354 parseG(&n, "[null, [1,null]]"); 1355 logVarG(&n); 1356 B = serialG(&n); 1357 logI("len %u", lenG(B)); 1358 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1359 s = sToString((smallt *) B->B); 1360 ck_assert_str_eq(s, "[0x26,0x60,0x02,0x24,0x00]"); 1361 free(s); 1362 deserialG(&ds, B); 1363 s = toStringG(&ds); 1364 ck_assert_str_eq(s, "[null,[1,null]]"); 1365 free(s); 1366 terminateG(B); 1367 freeManyG(&n, &ds); 1368 1369 // low and high undefined 1370 parseG(&n, "[null,null,1]"); 1371 logVarG(&n); 1372 B = serialG(&n); 1373 logI("len %u", lenG(B)); 1374 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1375 s = sToString((smallt *) B->B); 1376 ck_assert_str_eq(s, "[0x36,0x00,0x24]"); 1377 free(s); 1378 deserialG(&ds, B); 1379 s = toStringG(&ds); 1380 ck_assert_str_eq(s, "[null,null,1]"); 1381 free(s); 1382 terminateG(B); 1383 freeManyG(&n, &ds); 1384 1385 // low and high nibble bool 1386 parseG(&n, "[null,true,false,false,true,true,false,true,false,true,true,true,true,true]"); 1387 logVarG(&n); 1388 B = serialG(&n); 1389 logI("len %u", lenG(B)); 1390 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1391 s = sToString((smallt *) B->B); 1392 ck_assert_str_eq(s, "[0xe6,0x01,0x10,0x59,0x11,0x11,0x11,0x11,0x1f,0x11,0x11]"); 1393 free(s); 1394 deserialG(&ds, B); 1395 s = toStringG(&ds); 1396 ck_assert_str_eq(s, "[null,true,false,false,true,true,false,true,false,true,true,true,true,true]"); 1397 free(s); 1398 terminateG(B); 1399 freeManyG(&n, &ds); 1400 1401 // low and high nibble bool - ctx->boolOffset != 0 ctx->nibble == lowNbl ctx->boolShift == 8 1402 parseG(&n, "[true,false,false,true,null,true,false,true,false,true,true,true,true,true]"); 1403 logVarG(&n); 1404 B = serialG(&n); 1405 logI("len %u", lenG(B)); 1406 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1407 s = sToString((smallt *) B->B); 1408 ck_assert_str_eq(s, "[0xe6,0x01,0x91,0x11,0x01,0x51,0x11,0x11,0x1f,0x11,0x11]"); 1409 free(s); 1410 deserialG(&ds, B); 1411 s = toStringG(&ds); 1412 ck_assert_str_eq(s, "[true,false,false,true,null,true,false,true,false,true,true,true,true,true]"); 1413 free(s); 1414 terminateG(B); 1415 freeManyG(&n, &ds); 1416 1417 1418 // dict in array 1419 parseG(&n, "[{\"0\":null,\"1\":1},{\"2\":2},{\"3\":3},null]"); 1420 logVarG(&n); 1421 B = serialG(&n); 1422 logI("len %u", lenG(B)); 1423 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1424 s = sToString((smallt *) B->B); 1425 ck_assert_str_eq(s, "[0x46,0x22,0x30,0x00,0x40,0x31,0x00,0x02,0x4e,0x01,0x32,0x00,0x04,0x4e,0x01,0x33,0x00,0x06,0x00]"); 1426 free(s); 1427 deserialG(&ds, B); 1428 s = toStringG(&ds); 1429 ck_assert_str_eq(s, "[{\"0\":null,\"1\":1},{\"2\":2},{\"3\":3},null]"); 1430 free(s); 1431 terminateG(B); 1432 freeManyG(&n, &ds); 1433 1434 // double in array 1435 parseG(&n, "[1.0,2.0,null]"); 1436 logVarG(&n); 1437 B = serialG(&n); 1438 logI("len %u", lenG(B)); 1439 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1440 s = sToString((smallt *) B->B); 1441 ck_assert_str_eq(s, "[0x36,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00]"); 1442 free(s); 1443 deserialG(&ds, B); 1444 s = toStringG(&ds); 1445 ck_assert_str_eq(s, "[1.000000e+00,2.000000e+00,null]"); 1446 free(s); 1447 terminateG(B); 1448 freeManyG(&n, &ds); 1449 1450 // int in array 1451 parseG(&n, "[1,2,null]"); 1452 logVarG(&n); 1453 B = serialG(&n); 1454 logI("len %u", lenG(B)); 1455 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1456 s = sToString((smallt *) B->B); 1457 ck_assert_str_eq(s, "[0x36,0x24,0x44,0x00]"); 1458 free(s); 1459 deserialG(&ds, B); 1460 s = toStringG(&ds); 1461 ck_assert_str_eq(s, "[1,2,null]"); 1462 free(s); 1463 terminateG(B); 1464 freeManyG(&n, &ds); 1465 1466 // string in array 1467 parseG(&n, "[\"1\",\"2\",null]"); 1468 logVarG(&n); 1469 B = serialG(&n); 1470 logI("len %u", lenG(B)); 1471 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1472 s = sToString((smallt *) B->B); 1473 ck_assert_str_eq(s, "[0x36,0x55,0x31,0x00,0x32,0x00,0x00]"); 1474 free(s); 1475 deserialG(&ds, B); 1476 s = toStringG(&ds); 1477 ck_assert_str_eq(s, "[\"1\",\"2\",null]"); 1478 free(s); 1479 terminateG(B); 1480 freeManyG(&n, &ds); 1481 1482 // array in array 1483 parseG(&n, "[[],[1,2],null]"); 1484 logVarG(&n); 1485 B = serialG(&n); 1486 logI("len %u", lenG(B)); 1487 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1488 s = sToString((smallt *) B->B); 1489 ck_assert_str_eq(s, "[0x36,0x0f,0x00,0x4f,0x02,0x02,0x04,0x00]"); 1490 free(s); 1491 deserialG(&ds, B); 1492 s = toStringG(&ds); 1493 ck_assert_str_eq(s, "[[],[1,2],null]"); 1494 free(s); 1495 terminateG(B); 1496 freeManyG(&n, &ds); 1497 1498 1499 // packed dicts 1500 parseG(&n, "[{\"1\":1},{\"2\":2},{\"3\":3},{\"4\":4},null]"); 1501 logVarG(&n); 1502 B = serialG(&n); 1503 logI("len %u", lenG(B)); 1504 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1505 s = sToString((smallt *) B->B); 1506 ck_assert_str_eq(s, "[0x56,0x48,0x01,0x31,0x00,0x24,0x01,0x32,0x00,0x44,0x01,0x33,0x00,0x64,0x01,0x34,0x00,0x84,0x01,0x00]"); 1507 free(s); 1508 deserialG(&ds, B); 1509 s = toStringG(&ds); 1510 ck_assert_str_eq(s, "[{\"1\":1},{\"2\":2},{\"3\":3},{\"4\":4},null]"); 1511 free(s); 1512 terminateG(B); 1513 freeManyG(&n, &ds); 1514 1515 // high nibble packed dicts 1516 parseG(&n, "[null,{\"1\":1},{\"2\":2},{\"3\":3},{\"4\":4},null]"); 1517 logVarG(&n); 1518 B = serialG(&n); 1519 logI("len %u", lenG(B)); 1520 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1521 s = sToString((smallt *) B->B); 1522 ck_assert_str_eq(s, "[0x66,0x80,0x04,0x01,0x31,0x00,0x24,0x01,0x32,0x00,0x44,0x01,0x33,0x00,0x64,0x01,0x34,0x00,0x84,0x01,0x00]"); 1523 free(s); 1524 deserialG(&ds, B); 1525 s = toStringG(&ds); 1526 ck_assert_str_eq(s, "[null,{\"1\":1},{\"2\":2},{\"3\":3},{\"4\":4},null]"); 1527 free(s); 1528 terminateG(B); 1529 freeManyG(&n, &ds); 1530 1531 // packed doubles 1532 parseG(&n, "[1.0,2.0,3.0,4.0,null]"); 1533 logVarG(&n); 1534 B = serialG(&n); 1535 logI("len %u", lenG(B)); 1536 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1537 s = sToString((smallt *) B->B); 1538 ck_assert_str_eq(s, "[0x56,0x49,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00]"); 1539 free(s); 1540 deserialG(&ds, B); 1541 s = toStringG(&ds); 1542 ck_assert_str_eq(s, "[1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00,null]"); 1543 free(s); 1544 terminateG(B); 1545 freeManyG(&n, &ds); 1546 1547 // high nibble packed doubles 1548 parseG(&n, "[null,1.0,2.0,3.0,4.0,null]"); 1549 logVarG(&n); 1550 B = serialG(&n); 1551 logI("len %u", lenG(B)); 1552 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1553 s = sToString((smallt *) B->B); 1554 ck_assert_str_eq(s, "[0x66,0x90,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x40,0x00]"); 1555 free(s); 1556 deserialG(&ds, B); 1557 s = toStringG(&ds); 1558 ck_assert_str_eq(s, "[null,1.000000e+00,2.000000e+00,3.000000e+00,4.000000e+00,null]"); 1559 free(s); 1560 terminateG(B); 1561 freeManyG(&n, &ds); 1562 1563 // packed ints 1564 parseG(&n, "[1,2,3,4,null]"); 1565 logVarG(&n); 1566 B = serialG(&n); 1567 logI("len %u", lenG(B)); 1568 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1569 s = sToString((smallt *) B->B); 1570 ck_assert_str_eq(s, "[0x56,0x4a,0x02,0x04,0x06,0x08,0x00]"); 1571 free(s); 1572 deserialG(&ds, B); 1573 s = toStringG(&ds); 1574 ck_assert_str_eq(s, "[1,2,3,4,null]"); 1575 free(s); 1576 terminateG(B); 1577 freeManyG(&n, &ds); 1578 1579 // high nibble packed ints 1580 parseG(&n, "[null,1,2,3,4,null]"); 1581 logVarG(&n); 1582 B = serialG(&n); 1583 logI("len %u", lenG(B)); 1584 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1585 s = sToString((smallt *) B->B); 1586 ck_assert_str_eq(s, "[0x66,0xa0,0x04,0x02,0x04,0x06,0x08,0x00]"); 1587 free(s); 1588 deserialG(&ds, B); 1589 s = toStringG(&ds); 1590 ck_assert_str_eq(s, "[null,1,2,3,4,null]"); 1591 free(s); 1592 terminateG(B); 1593 freeManyG(&n, &ds); 1594 1595 // packed strings 1596 parseG(&n, "[\"1\",\"2\",\"3\",\"4\",null]"); 1597 logVarG(&n); 1598 B = serialG(&n); 1599 logI("len %u", lenG(B)); 1600 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1601 s = sToString((smallt *) B->B); 1602 ck_assert_str_eq(s, "[0x56,0x4b,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x00]"); 1603 free(s); 1604 deserialG(&ds, B); 1605 s = toStringG(&ds); 1606 ck_assert_str_eq(s, "[\"1\",\"2\",\"3\",\"4\",null]"); 1607 free(s); 1608 terminateG(B); 1609 freeManyG(&n, &ds); 1610 1611 // high nibble packed strings 1612 parseG(&n, "[null,\"1\",\"2\",\"3\",\"4\",null]"); 1613 logVarG(&n); 1614 B = serialG(&n); 1615 logI("len %u", lenG(B)); 1616 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1617 s = sToString((smallt *) B->B); 1618 ck_assert_str_eq(s, "[0x66,0xb0,0x04,0x31,0x00,0x32,0x00,0x33,0x00,0x34,0x00,0x00]"); 1619 free(s); 1620 deserialG(&ds, B); 1621 s = toStringG(&ds); 1622 ck_assert_str_eq(s, "[null,\"1\",\"2\",\"3\",\"4\",null]"); 1623 free(s); 1624 terminateG(B); 1625 freeManyG(&n, &ds); 1626 1627 // packed arrays 1628 parseG(&n, "[[1],[2],[3],[4],null]"); 1629 logVarG(&n); 1630 B = serialG(&n); 1631 logI("len %u", lenG(B)); 1632 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1633 s = sToString((smallt *) B->B); 1634 ck_assert_str_eq(s, "[0x56,0x4c,0x01,0x24,0x01,0x44,0x01,0x64,0x01,0x84,0x01,0x00]"); 1635 free(s); 1636 deserialG(&ds, B); 1637 s = toStringG(&ds); 1638 ck_assert_str_eq(s, "[[1],[2],[3],[4],null]"); 1639 free(s); 1640 terminateG(B); 1641 freeManyG(&n, &ds); 1642 1643 // high nibble packed arrays 1644 parseG(&n, "[null,[1],[2],[3],[4],null]"); 1645 logVarG(&n); 1646 B = serialG(&n); 1647 logI("len %u", lenG(B)); 1648 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1649 s = sToString((smallt *) B->B); 1650 ck_assert_str_eq(s, "[0x66,0xc0,0x04,0x01,0x24,0x01,0x44,0x01,0x64,0x01,0x84,0x01,0x00]"); 1651 free(s); 1652 deserialG(&ds, B); 1653 s = toStringG(&ds); 1654 ck_assert_str_eq(s, "[null,[1],[2],[3],[4],null]"); 1655 free(s); 1656 terminateG(B); 1657 freeManyG(&n, &ds); 1658 1659 // smallBytes 1660 parseG(&n, "[1,2,null]"); 1661 createSmallBytes(b); 1662 pushG(&b, 1); 1663 pushG(&b, 2); 1664 pushG(&b, 3); 1665 pushG(&b, 4); 1666 pushG(&b, 5); 1667 pushG(&b, 6); 1668 pushG(&n, &b); 1669 logVarG(&n); 1670 B = serialG(&n); 1671 logI("len %u", lenG(B)); 1672 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1673 s = sToString((smallt *) B->B); 1674 ck_assert_str_eq(s, "[0x46,0x24,0x44,0x70,0x06,0x01,0x02,0x03,0x04,0x05,0x06]"); 1675 free(s); 1676 deserialG(&ds, B); 1677 s = toStringG(&ds); 1678 ck_assert_str_eq(s, "[1,2,null,[0x01,0x02,0x03,0x04,0x05,0x06]]"); 1679 free(s); 1680 terminateG(B); 1681 freeManyG(&n, &ds); 1682 1683 parseG(&n, "[1,2]"); 1684 initiateG(&b); 1685 pushG(&b, 1); 1686 pushG(&b, 2); 1687 pushG(&b, 3); 1688 pushG(&b, 4); 1689 pushG(&b, 5); 1690 pushG(&b, 6); 1691 pushG(&n, &b); 1692 logVarG(&n); 1693 B = serialG(&n); 1694 logI("len %u", lenG(B)); 1695 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1696 s = sToString((smallt *) B->B); 1697 ck_assert_str_eq(s, "[0x36,0x24,0x44,0x67,0x01,0x02,0x03,0x04,0x05,0x06]"); 1698 free(s); 1699 deserialG(&ds, B); 1700 s = toStringG(&ds); 1701 ck_assert_str_eq(s, "[1,2,[0x01,0x02,0x03,0x04,0x05,0x06]]"); 1702 free(s); 1703 terminateG(B); 1704 freeManyG(&n, &ds); 1705 1706 END_TEST 1707 1708 1709 START_TEST(variousT) 1710 1711 createNetSerial(n); 1712 createNetSerial(ds); 1713 char *s; 1714 smallBytest *B; 1715 1716 1717 // array dict int bool string 1718 parseG(&n, "[0, \"asd\", {\"rpc\":\"ds\", \"id\":1, \"p\":true}, [true, \"user\", [[false,\"name\",1], [true, \"name2\", 12340], [false, \"zxc\", 234]]]]"); 1719 logVarG(&n); 1720 B = serialG(&n); 1721 logI("len %u", lenG(B)); 1722 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1723 s = sToString((smallt *) B->B); 1724 ck_assert_str_eq(s, "[0x46,0x04,0x25,0x61,0x73,0x64,0x00,0x03,0x72,0x70,0x63,0x00,0x45,0x64,0x73,0x00,0x69,0x64,0x00,0x02,0x70,0x00,0xb1,0x36,0x51,0x75,0x73,0x65,0x72,0x00,0x6f,0x03,0x03,0x51,0x6e,0x61,0x6d,0x65,0x00,0x24,0x03,0x51,0x6e,0x61,0x6d,0x65,0x32,0x00,0x84,0x8d,0x18,0x03,0x01,0x45,0x7a,0x78,0x63,0x00,0xd4,0x03]"); 1725 free(s); 1726 deserialG(&ds, B); 1727 s = toStringG(&ds); 1728 ck_assert_str_eq(s, "[0,\"asd\",{\"rpc\":\"ds\",\"id\":1,\"p\":true},[true,\"user\",[[false,\"name\",1],[true,\"name2\",12340],[false,\"zxc\",234]]]]"); 1729 free(s); 1730 terminateG(B); 1731 freeManyG(&n, &ds); 1732 1733 parseG(&n, "[[{a:1}, null, {a:1}, {a:1}]]"); 1734 logVarG(&n); 1735 B = serialG(&n); 1736 logI("len %u", lenG(B)); 1737 logSI("%s",toHexSepS(getValG(B), lenG(B), " ")); 1738 s = sToString((smallt *) B->B); 1739 ck_assert_str_eq(s, "[0x6f,0x01,0x04,0x4e,0x01,0x61,0x00,0x02,0xe0,0x14,0x61,0x00,0x02,0x4e,0x01,0x61,0x00,0x02]"); 1740 free(s); 1741 deserialG(&ds, B); 1742 s = toStringG(&ds); 1743 ck_assert_str_eq(s, "[[{\"a\":1},null,{\"a\":1},{\"a\":1}]]"); 1744 free(s); 1745 terminateG(B); 1746 freeManyG(&n, &ds); 1747 1748 END_TEST 1749 1750 Suite * netSerialSuite(void) { 1751 Suite *s; 1752 TCase *tc_core; 1753 1754 s = suite_create("netSerial"); 1755 1756 /* Core test case */ 1757 tc_core = tcase_create("Core"); 1758 1759 1760 tcase_add_test(tc_core, topT); 1761 tcase_add_test(tc_core, uniformDictT); 1762 tcase_add_test(tc_core, uniformArrayT); 1763 tcase_add_test(tc_core, dictT); 1764 tcase_add_test(tc_core, arrayT); 1765 tcase_add_test(tc_core, variousT); 1766 1767 //TODO register tests 1768 1769 suite_add_tcase(s, tc_core); 1770 1771 ret s; 1772 } 1773 1774 int main(int ARGC, char** ARGV) { 1775 1776 argc = ARGC; argv = ARGV; 1777 1778 //dont initialize libsheepy, it conflicts with libcheck - initLibsheepy(ARGV[0]); 1779 setLogMode(LOG_FUNC); 1780 1781 int number_failed; 1782 Suite *s; 1783 SRunner *sr; 1784 1785 s = netSerialSuite(); 1786 sr = srunner_create(s); 1787 1788 srunner_run_all(sr, CK_NORMAL); 1789 number_failed = srunner_ntests_failed(sr); 1790 srunner_free(sr); 1791 1792 exit((number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE); 1793 } 1794 // vim: set expandtab ts=2 sw=2: