2 * Copyright 2012-2016 Nest Labs Inc. All Rights Reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 * This file implements a unit test suite for the C language
20 * binding of the Nest Labs memory-mapped I/O functions and
30 #include <nlunit-test.h>
32 #include "nlio-test.h"
34 static void CheckIntrospection(nlTestSuite *inSuite, void *inContext)
43 // Check for natural alignment of an 8-bit stack variable.
45 aligned = nlIOIsAligned(&v8, sizeof(v8));
46 NL_TEST_ASSERT(inSuite, aligned == true);
48 // Check for natural alignment of an 16-bit stack variable, which
49 // should also be aligned on 8-bit as well.
51 aligned = nlIOIsAligned(&v16, sizeof(v16));
52 NL_TEST_ASSERT(inSuite, aligned == true);
54 aligned = nlIOIsAligned(&v16, sizeof(v8));
55 NL_TEST_ASSERT(inSuite, aligned == true);
57 // Check for natural alignment of an 32-bit stack variable, which
58 // should also be aligned on 16- and 8-bit as well.
60 aligned = nlIOIsAligned(&v32, sizeof(v32));
61 NL_TEST_ASSERT(inSuite, aligned == true);
63 aligned = nlIOIsAligned(&v32, sizeof(v16));
64 NL_TEST_ASSERT(inSuite, aligned == true);
66 aligned = nlIOIsAligned(&v32, sizeof(v8));
67 NL_TEST_ASSERT(inSuite, aligned == true);
69 // Check for natural alignment of an 64-bit stack variable, which
70 // should also be aligned on 32-, 16-, and 8-bit as well.
72 aligned = nlIOIsAligned(&v64, sizeof(v64));
73 NL_TEST_ASSERT(inSuite, aligned == true);
75 aligned = nlIOIsAligned(&v64, sizeof(v32));
76 NL_TEST_ASSERT(inSuite, aligned == true);
78 aligned = nlIOIsAligned(&v64, sizeof(v16));
79 NL_TEST_ASSERT(inSuite, aligned == true);
81 aligned = nlIOIsAligned(&v64, sizeof(v8));
82 NL_TEST_ASSERT(inSuite, aligned == true);
84 // Check for natural alignment of an 128-bit stack variable, which
85 // should also be aligned on 64-, 32-, 16-, and 8-bit as well.
87 aligned = nlIOIsAligned(&v128, sizeof(v128));
88 NL_TEST_ASSERT(inSuite, aligned == true);
90 aligned = nlIOIsAligned(&v128, sizeof(v64));
91 NL_TEST_ASSERT(inSuite, aligned == true);
93 aligned = nlIOIsAligned(&v128, sizeof(v32));
94 NL_TEST_ASSERT(inSuite, aligned == true);
96 aligned = nlIOIsAligned(&v128, sizeof(v16));
97 NL_TEST_ASSERT(inSuite, aligned == true);
99 aligned = nlIOIsAligned(&v128, sizeof(v8));
100 NL_TEST_ASSERT(inSuite, aligned == true);
103 static void CheckAlignedGet(nlTestSuite *inSuite, void *inContext)
105 const uint8_t s8 = MAGIC_8;
106 const uint16_t s16 = MAGIC_16;
107 const uint32_t s32 = MAGIC_32;
108 const uint64_t s64 = MAGIC_64;
114 v8 = nlIOGetAligned8(&s8);
115 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
117 v16 = nlIOGetAligned16(&s16);
118 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
120 v32 = nlIOGetAligned32(&s32);
121 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
123 v64 = nlIOGetAligned64(&s64);
124 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
127 static void CheckAlignedPut(nlTestSuite *inSuite, void *inContext)
129 const uint8_t v8 = MAGIC_8;
130 const uint16_t v16 = MAGIC_16;
131 const uint32_t v32 = MAGIC_32;
132 const uint64_t v64 = MAGIC_64;
138 nlIOPutAligned8(&s8, v8);
139 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
141 nlIOPutAligned16(&s16, v16);
142 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
144 nlIOPutAligned32(&s32, v32);
145 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
147 nlIOPutAligned64(&s64, v64);
148 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
151 static void CheckUnalignedGet(nlTestSuite *inSuite, void *inContext)
153 const uint8_t s8 = MAGIC_8;
154 const uint16_t s16 = MAGIC_16;
155 const uint32_t s32 = MAGIC_32;
156 const uint64_t s64 = MAGIC_64;
157 uint8_t buffer[sizeof(uint64_t) * 2];
164 // Try an 8-bit quantity. They are aligned anywhere and unaligned
168 memcpy(p, &s8, sizeof(s8));
170 v8 = nlIOGetUnaligned8(p);
171 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
173 // Try 16-bit quantities.
176 memcpy(p, &s16, sizeof(s16));
178 v16 = nlIOGetUnaligned16(p);
179 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
182 memcpy(p, &s16, sizeof(s16));
184 v16 = nlIOGetUnaligned16(p);
185 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
187 // Try 32-bit quantities.
190 memcpy(p, &s32, sizeof(s32));
192 v32 = nlIOGetUnaligned32(p);
193 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
196 memcpy(p, &s32, sizeof(s32));
198 v32 = nlIOGetUnaligned32(p);
199 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
202 memcpy(p, &s32, sizeof(s32));
204 v32 = nlIOGetUnaligned32(p);
205 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
208 memcpy(p, &s32, sizeof(s32));
210 v32 = nlIOGetUnaligned32(p);
211 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
213 // Try 64-bit quantities.
216 memcpy(p, &s64, sizeof(s64));
218 v64 = nlIOGetUnaligned64(p);
219 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
222 memcpy(p, &s64, sizeof(s64));
224 v64 = nlIOGetUnaligned64(p);
225 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
228 memcpy(p, &s64, sizeof(s64));
230 v64 = nlIOGetUnaligned64(p);
231 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
234 memcpy(p, &s64, sizeof(s64));
236 v64 = nlIOGetUnaligned64(p);
237 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
240 memcpy(p, &s64, sizeof(s64));
242 v64 = nlIOGetUnaligned64(p);
243 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
246 memcpy(p, &s64, sizeof(s64));
248 v64 = nlIOGetUnaligned64(p);
249 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
252 memcpy(p, &s64, sizeof(s64));
254 v64 = nlIOGetUnaligned64(p);
255 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
258 memcpy(p, &s64, sizeof(s64));
260 v64 = nlIOGetUnaligned64(p);
261 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
264 static void CheckUnalignedPut(nlTestSuite *inSuite, void *inContext)
266 const uint8_t v8 = MAGIC_8;
267 const uint16_t v16 = MAGIC_16;
268 const uint32_t v32 = MAGIC_32;
269 const uint64_t v64 = MAGIC_64;
270 uint8_t buffer[sizeof(uint64_t) * 2];
277 // Try an 8-bit quantity. They are aligned anywhere and unaligned
281 nlIOPutUnaligned8(p, v8);
282 memcpy(&s8, p, sizeof(v8));
283 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
285 // Try 16-bit quantities.
288 nlIOPutUnaligned16(p, v16);
289 memcpy(&s16, p, sizeof(v16));
290 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
293 nlIOPutUnaligned16(p, v16);
294 memcpy(&s16, p, sizeof(v16));
295 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
297 // Try 32-bit quantities.
300 nlIOPutUnaligned32(p, v32);
301 memcpy(&s32, p, sizeof(v32));
302 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
305 nlIOPutUnaligned32(p, v32);
306 memcpy(&s32, p, sizeof(v32));
307 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
310 nlIOPutUnaligned32(p, v32);
311 memcpy(&s32, p, sizeof(v32));
312 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
315 nlIOPutUnaligned32(p, v32);
316 memcpy(&s32, p, sizeof(v32));
317 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
319 // Try 64-bit quantities.
322 nlIOPutUnaligned64(p, v64);
323 memcpy(&s64, p, sizeof(v64));
324 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
327 nlIOPutUnaligned64(p, v64);
328 memcpy(&s64, p, sizeof(v64));
329 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
332 nlIOPutUnaligned64(p, v64);
333 memcpy(&s64, p, sizeof(v64));
334 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
337 nlIOPutUnaligned64(p, v64);
338 memcpy(&s64, p, sizeof(v64));
339 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
342 nlIOPutUnaligned64(p, v64);
343 memcpy(&s64, p, sizeof(v64));
344 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
347 nlIOPutUnaligned64(p, v64);
348 memcpy(&s64, p, sizeof(v64));
349 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
352 nlIOPutUnaligned64(p, v64);
353 memcpy(&s64, p, sizeof(v64));
354 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
357 nlIOPutUnaligned64(p, v64);
358 memcpy(&s64, p, sizeof(v64));
359 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
362 static void CheckMaybeAlignedGet(nlTestSuite *inSuite, void *inContext)
364 const uint8_t s8 = MAGIC_8;
365 const uint16_t s16 = MAGIC_16;
366 const uint32_t s32 = MAGIC_32;
367 const uint64_t s64 = MAGIC_64;
368 uint8_t buffer[sizeof(uint64_t) * 2];
375 // Try an 8-bit quantity. They are aligned anywhere and unaligned
378 v8 = nlIOGetMaybeAligned8(&s8);
379 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
381 // Try 16-bit quantities.
384 memcpy(p, &s16, sizeof(s16));
386 v16 = nlIOGetMaybeAligned16(p);
387 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
390 memcpy(p, &s16, sizeof(s16));
392 v16 = nlIOGetMaybeAligned16(p);
393 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
395 // Try 32-bit quantities.
398 memcpy(p, &s32, sizeof(s32));
400 v32 = nlIOGetMaybeAligned32(p);
401 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
404 memcpy(p, &s32, sizeof(s32));
406 v32 = nlIOGetMaybeAligned32(p);
407 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
410 memcpy(p, &s32, sizeof(s32));
412 v32 = nlIOGetMaybeAligned32(p);
413 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
416 memcpy(p, &s32, sizeof(s32));
418 v32 = nlIOGetMaybeAligned32(p);
419 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
421 // Try 64-bit quantities.
424 memcpy(p, &s64, sizeof(s64));
426 v64 = nlIOGetMaybeAligned64(p);
427 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
430 memcpy(p, &s64, sizeof(s64));
432 v64 = nlIOGetMaybeAligned64(p);
433 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
436 memcpy(p, &s64, sizeof(s64));
438 v64 = nlIOGetMaybeAligned64(p);
439 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
442 memcpy(p, &s64, sizeof(s64));
444 v64 = nlIOGetMaybeAligned64(p);
445 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
448 memcpy(p, &s64, sizeof(s64));
450 v64 = nlIOGetMaybeAligned64(p);
451 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
454 memcpy(p, &s64, sizeof(s64));
456 v64 = nlIOGetMaybeAligned64(p);
457 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
460 memcpy(p, &s64, sizeof(s64));
462 v64 = nlIOGetMaybeAligned64(p);
463 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
466 memcpy(p, &s64, sizeof(s64));
468 v64 = nlIOGetMaybeAligned64(p);
469 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
472 static void CheckMaybeAlignedPut(nlTestSuite *inSuite, void *inContext)
474 const uint8_t v8 = MAGIC_8;
475 const uint16_t v16 = MAGIC_16;
476 const uint32_t v32 = MAGIC_32;
477 const uint64_t v64 = MAGIC_64;
478 uint8_t buffer[sizeof(uint64_t) * 2];
485 // Try an 8-bit quantity. They are aligned anywhere and unaligned
489 nlIOPutMaybeAligned8(p, v8);
490 memcpy(&s8, p, sizeof(v8));
491 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
493 // Try 16-bit quantities.
496 nlIOPutMaybeAligned16(p, v16);
497 memcpy(&s16, p, sizeof(v16));
498 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
501 nlIOPutMaybeAligned16(p, v16);
502 memcpy(&s16, p, sizeof(v16));
503 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
505 // Try 32-bit quantities.
508 nlIOPutMaybeAligned32(p, v32);
509 memcpy(&s32, p, sizeof(v32));
510 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
513 nlIOPutMaybeAligned32(p, v32);
514 memcpy(&s32, p, sizeof(v32));
515 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
518 nlIOPutMaybeAligned32(p, v32);
519 memcpy(&s32, p, sizeof(v32));
520 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
523 nlIOPutMaybeAligned32(p, v32);
524 memcpy(&s32, p, sizeof(v32));
525 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
527 // Try 64-bit quantities.
530 nlIOPutMaybeAligned64(p, v64);
531 memcpy(&s64, p, sizeof(v64));
532 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
535 nlIOPutMaybeAligned64(p, v64);
536 memcpy(&s64, p, sizeof(v64));
537 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
540 nlIOPutMaybeAligned64(p, v64);
541 memcpy(&s64, p, sizeof(v64));
542 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
545 nlIOPutMaybeAligned64(p, v64);
546 memcpy(&s64, p, sizeof(v64));
547 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
550 nlIOPutMaybeAligned64(p, v64);
551 memcpy(&s64, p, sizeof(v64));
552 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
555 nlIOPutMaybeAligned64(p, v64);
556 memcpy(&s64, p, sizeof(v64));
557 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
560 nlIOPutMaybeAligned64(p, v64);
561 memcpy(&s64, p, sizeof(v64));
562 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
565 nlIOPutMaybeAligned64(p, v64);
566 memcpy(&s64, p, sizeof(v64));
567 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
570 static void CheckGet(nlTestSuite *inSuite, void *inContext)
572 const uint8_t s8 = MAGIC_8;
573 const uint16_t s16 = MAGIC_16;
574 const uint32_t s32 = MAGIC_32;
575 const uint64_t s64 = MAGIC_64;
576 uint8_t buffer[sizeof(uint64_t) * 2];
583 // Try an 8-bit quantity. They are aligned anywhere and unaligned
587 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
589 // Try 16-bit quantities.
592 memcpy(p, &s16, sizeof(s16));
595 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
598 memcpy(p, &s16, sizeof(s16));
601 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
603 // Try 32-bit quantities.
606 memcpy(p, &s32, sizeof(s32));
609 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
612 memcpy(p, &s32, sizeof(s32));
615 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
618 memcpy(p, &s32, sizeof(s32));
621 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
624 memcpy(p, &s32, sizeof(s32));
627 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
629 // Try 64-bit quantities.
632 memcpy(p, &s64, sizeof(s64));
635 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
638 memcpy(p, &s64, sizeof(s64));
641 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
644 memcpy(p, &s64, sizeof(s64));
647 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
650 memcpy(p, &s64, sizeof(s64));
653 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
656 memcpy(p, &s64, sizeof(s64));
659 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
662 memcpy(p, &s64, sizeof(s64));
665 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
668 memcpy(p, &s64, sizeof(s64));
671 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
674 memcpy(p, &s64, sizeof(s64));
677 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
680 static void CheckPut(nlTestSuite *inSuite, void *inContext)
682 const uint8_t v8 = MAGIC_8;
683 const uint16_t v16 = MAGIC_16;
684 const uint32_t v32 = MAGIC_32;
685 const uint64_t v64 = MAGIC_64;
686 uint8_t buffer[sizeof(uint64_t) * 2];
693 // Try an 8-bit quantity. They are aligned anywhere and unaligned
698 memcpy(&s8, p, sizeof(v8));
699 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
701 // Try 16-bit quantities.
705 memcpy(&s16, p, sizeof(v16));
706 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
710 memcpy(&s16, p, sizeof(v16));
711 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
713 // Try 32-bit quantities.
717 memcpy(&s32, p, sizeof(v32));
718 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
722 memcpy(&s32, p, sizeof(v32));
723 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
727 memcpy(&s32, p, sizeof(v32));
728 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
732 memcpy(&s32, p, sizeof(v32));
733 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
735 // Try 64-bit quantities.
739 memcpy(&s64, p, sizeof(v64));
740 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
744 memcpy(&s64, p, sizeof(v64));
745 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
749 memcpy(&s64, p, sizeof(v64));
750 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
754 memcpy(&s64, p, sizeof(v64));
755 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
759 memcpy(&s64, p, sizeof(v64));
760 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
764 memcpy(&s64, p, sizeof(v64));
765 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
769 memcpy(&s64, p, sizeof(v64));
770 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
774 memcpy(&s64, p, sizeof(v64));
775 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
778 static void CheckAlignedRead(nlTestSuite *inSuite, void *inContext)
780 const uint8_t s8 = MAGIC_8;
781 const uint16_t s16 = MAGIC_16;
782 const uint32_t s32 = MAGIC_32;
783 const uint64_t s64 = MAGIC_64;
791 v8 = nlIOReadAligned8(&p);
792 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
793 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s8 + sizeof(s8));
796 v16 = nlIOReadAligned16(&p);
797 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
798 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s16 + sizeof(s16));
801 v32 = nlIOReadAligned32(&p);
802 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
803 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s32 + sizeof(s32));
806 v64 = nlIOReadAligned64(&p);
807 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
808 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s64 + sizeof(s64));
811 static void CheckAlignedWrite(nlTestSuite *inSuite, void *inContext)
813 const uint8_t v8 = MAGIC_8;
814 const uint16_t v16 = MAGIC_16;
815 const uint32_t v32 = MAGIC_32;
816 const uint64_t v64 = MAGIC_64;
824 nlIOWriteAligned8(&p, v8);
825 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
826 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s8 + sizeof(s8));
829 nlIOWriteAligned16(&p, v16);
830 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
831 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s16 + sizeof(s16));
834 nlIOWriteAligned32(&p, v32);
835 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
836 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s32 + sizeof(s32));
839 nlIOWriteAligned64(&p, v64);
840 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
841 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s64 + sizeof(s64));
844 static void CheckUnalignedRead(nlTestSuite *inSuite, void *inContext)
846 const uint8_t s8 = MAGIC_8;
847 const uint16_t s16 = MAGIC_16;
848 const uint32_t s32 = MAGIC_32;
849 const uint64_t s64 = MAGIC_64;
850 uint8_t buffer[sizeof(uint64_t) * 2];
857 // Try an 8-bit quantity. They are aligned anywhere and unaligned
861 memcpy(&buffer[0], &s8, sizeof(s8));
863 v8 = nlIOReadUnaligned8((const void **)&p);
864 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
865 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
867 // Try 16-bit quantities.
870 memcpy(&buffer[0], &s16, sizeof(s16));
872 v16 = nlIOReadUnaligned16((const void **)&p);
873 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
874 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
877 memcpy(&buffer[1], &s16, sizeof(s16));
879 v16 = nlIOReadUnaligned16((const void **)&p);
880 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
881 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
883 // Try 32-bit quantities.
886 memcpy(&buffer[0], &s32, sizeof(s32));
888 v32 = nlIOReadUnaligned32((const void **)&p);
889 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
890 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
893 memcpy(&buffer[1], &s32, sizeof(s32));
895 v32 = nlIOReadUnaligned32((const void **)&p);
896 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
897 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
900 memcpy(&buffer[2], &s32, sizeof(s32));
902 v32 = nlIOReadUnaligned32((const void **)&p);
903 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
904 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
907 memcpy(&buffer[3], &s32, sizeof(s32));
909 v32 = nlIOReadUnaligned32((const void **)&p);
910 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
911 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
913 // Try 64-bit quantities.
916 memcpy(&buffer[0], &s64, sizeof(s64));
918 v64 = nlIOReadUnaligned64((const void **)&p);
919 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
920 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
923 memcpy(&buffer[1], &s64, sizeof(s64));
925 v64 = nlIOReadUnaligned64((const void **)&p);
926 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
927 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
930 memcpy(&buffer[2], &s64, sizeof(s64));
932 v64 = nlIOReadUnaligned64((const void **)&p);
933 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
934 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
937 memcpy(&buffer[3], &s64, sizeof(s64));
939 v64 = nlIOReadUnaligned64((const void **)&p);
940 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
941 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
944 memcpy(&buffer[4], &s64, sizeof(s64));
946 v64 = nlIOReadUnaligned64((const void **)&p);
947 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
948 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
951 memcpy(&buffer[5], &s64, sizeof(s64));
953 v64 = nlIOReadUnaligned64((const void **)&p);
954 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
955 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
958 memcpy(&buffer[6], &s64, sizeof(s64));
960 v64 = nlIOReadUnaligned64((const void **)&p);
961 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
962 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
965 memcpy(&buffer[7], &s64, sizeof(s64));
967 v64 = nlIOReadUnaligned64((const void **)&p);
968 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
969 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
972 static void CheckUnalignedWrite(nlTestSuite *inSuite, void *inContext)
974 const uint8_t v8 = MAGIC_8;
975 const uint16_t v16 = MAGIC_16;
976 const uint32_t v32 = MAGIC_32;
977 const uint64_t v64 = MAGIC_64;
978 uint8_t buffer[sizeof(uint64_t) * 2];
985 // Try an 8-bit quantity. They are aligned anywhere and unaligned
989 nlIOWriteUnaligned8(&p, v8);
990 memcpy(&s8, &buffer[0], sizeof(v8));
991 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
992 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
994 // Try 16-bit quantities.
997 nlIOWriteUnaligned16(&p, v16);
998 memcpy(&s16, &buffer[0], sizeof(v16));
999 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1000 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1003 nlIOWriteUnaligned16(&p, v16);
1004 memcpy(&s16, &buffer[1], sizeof(v16));
1005 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1006 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1008 // Try 32-bit quantities.
1011 nlIOWriteUnaligned32(&p, v32);
1012 memcpy(&s32, &buffer[0], sizeof(v32));
1013 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1014 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1017 nlIOWriteUnaligned32(&p, v32);
1018 memcpy(&s32, &buffer[1], sizeof(v32));
1019 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1020 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1023 nlIOWriteUnaligned32(&p, v32);
1024 memcpy(&s32, &buffer[2], sizeof(v32));
1025 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1026 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1029 nlIOWriteUnaligned32(&p, v32);
1030 memcpy(&s32, &buffer[3], sizeof(v32));
1031 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1032 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1034 // Try 64-bit quantities.
1037 nlIOWriteUnaligned64(&p, v64);
1038 memcpy(&s64, &buffer[0], sizeof(v64));
1039 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1040 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1043 nlIOWriteUnaligned64(&p, v64);
1044 memcpy(&s64, &buffer[1], sizeof(v64));
1045 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1046 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1049 nlIOWriteUnaligned64(&p, v64);
1050 memcpy(&s64, &buffer[2], sizeof(v64));
1051 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1052 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1055 nlIOWriteUnaligned64(&p, v64);
1056 memcpy(&s64, &buffer[3], sizeof(v64));
1057 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1058 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1061 nlIOWriteUnaligned64(&p, v64);
1062 memcpy(&s64, &buffer[4], sizeof(v64));
1063 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1064 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1067 nlIOWriteUnaligned64(&p, v64);
1068 memcpy(&s64, &buffer[5], sizeof(v64));
1069 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1070 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1073 nlIOWriteUnaligned64(&p, v64);
1074 memcpy(&s64, &buffer[6], sizeof(v64));
1075 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1076 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1079 nlIOWriteUnaligned64(&p, v64);
1080 memcpy(&s64, &buffer[7], sizeof(v64));
1081 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1082 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1085 static void CheckMaybeAlignedRead(nlTestSuite *inSuite, void *inContext)
1087 const uint8_t s8 = MAGIC_8;
1088 const uint16_t s16 = MAGIC_16;
1089 const uint32_t s32 = MAGIC_32;
1090 const uint64_t s64 = MAGIC_64;
1091 uint8_t buffer[sizeof(uint64_t) * 2];
1098 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1102 memcpy(&buffer[0], &s8, sizeof(s8));
1104 v8 = nlIOReadMaybeAligned8((const void **)&p);
1105 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
1106 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1108 // Try 16-bit quantities.
1111 memcpy(&buffer[0], &s16, sizeof(s16));
1113 v16 = nlIOReadMaybeAligned16((const void **)&p);
1114 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1115 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1118 memcpy(&buffer[1], &s16, sizeof(s16));
1120 v16 = nlIOReadMaybeAligned16((const void **)&p);
1121 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1122 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1124 // Try 32-bit quantities.
1127 memcpy(&buffer[0], &s32, sizeof(s32));
1129 v32 = nlIOReadMaybeAligned32((const void **)&p);
1130 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1131 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1134 memcpy(&buffer[1], &s32, sizeof(s32));
1136 v32 = nlIOReadMaybeAligned32((const void **)&p);
1137 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1138 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1141 memcpy(&buffer[2], &s32, sizeof(s32));
1143 v32 = nlIOReadMaybeAligned32((const void **)&p);
1144 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1145 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1148 memcpy(&buffer[3], &s32, sizeof(s32));
1150 v32 = nlIOReadMaybeAligned32((const void **)&p);
1151 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1152 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1154 // Try 64-bit quantities.
1157 memcpy(&buffer[0], &s64, sizeof(s64));
1159 v64 = nlIOReadMaybeAligned64((const void **)&p);
1160 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1161 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1164 memcpy(&buffer[1], &s64, sizeof(s64));
1166 v64 = nlIOReadMaybeAligned64((const void **)&p);
1167 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1168 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1171 memcpy(&buffer[2], &s64, sizeof(s64));
1173 v64 = nlIOReadMaybeAligned64((const void **)&p);
1174 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1175 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1178 memcpy(&buffer[3], &s64, sizeof(s64));
1180 v64 = nlIOReadMaybeAligned64((const void **)&p);
1181 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1182 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1185 memcpy(&buffer[4], &s64, sizeof(s64));
1187 v64 = nlIOReadMaybeAligned64((const void **)&p);
1188 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1189 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1192 memcpy(&buffer[5], &s64, sizeof(s64));
1194 v64 = nlIOReadMaybeAligned64((const void **)&p);
1195 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1196 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1199 memcpy(&buffer[6], &s64, sizeof(s64));
1201 v64 = nlIOReadMaybeAligned64((const void **)&p);
1202 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1203 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1206 memcpy(&buffer[7], &s64, sizeof(s64));
1208 v64 = nlIOReadMaybeAligned64((const void **)&p);
1209 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1210 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1213 static void CheckMaybeAlignedWrite(nlTestSuite *inSuite, void *inContext)
1215 const uint8_t v8 = MAGIC_8;
1216 const uint16_t v16 = MAGIC_16;
1217 const uint32_t v32 = MAGIC_32;
1218 const uint64_t v64 = MAGIC_64;
1219 uint8_t buffer[sizeof(uint64_t) * 2];
1226 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1230 nlIOWriteMaybeAligned8(&p, v8);
1231 memcpy(&s8, &buffer[0], sizeof(v8));
1232 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
1233 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1235 // Try 16-bit quantities.
1238 nlIOWriteMaybeAligned16(&p, v16);
1239 memcpy(&s16, &buffer[0], sizeof(v16));
1240 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1241 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1244 nlIOWriteMaybeAligned16(&p, v16);
1245 memcpy(&s16, &buffer[1], sizeof(v16));
1246 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1247 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1249 // Try 32-bit quantities.
1252 nlIOWriteMaybeAligned32(&p, v32);
1253 memcpy(&s32, &buffer[0], sizeof(v32));
1254 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1255 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1258 nlIOWriteMaybeAligned32(&p, v32);
1259 memcpy(&s32, &buffer[1], sizeof(v32));
1260 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1261 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1264 nlIOWriteMaybeAligned32(&p, v32);
1265 memcpy(&s32, &buffer[2], sizeof(v32));
1266 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1267 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1270 nlIOWriteMaybeAligned32(&p, v32);
1271 memcpy(&s32, &buffer[3], sizeof(v32));
1272 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1273 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1275 // Try 64-bit quantities.
1278 nlIOWriteMaybeAligned64(&p, v64);
1279 memcpy(&s64, &buffer[0], sizeof(v64));
1280 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1281 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1284 nlIOWriteMaybeAligned64(&p, v64);
1285 memcpy(&s64, &buffer[1], sizeof(v64));
1286 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1287 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1290 nlIOWriteMaybeAligned64(&p, v64);
1291 memcpy(&s64, &buffer[2], sizeof(v64));
1292 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1293 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1296 nlIOWriteMaybeAligned64(&p, v64);
1297 memcpy(&s64, &buffer[3], sizeof(v64));
1298 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1299 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1302 nlIOWriteMaybeAligned64(&p, v64);
1303 memcpy(&s64, &buffer[4], sizeof(v64));
1304 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1305 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1308 nlIOWriteMaybeAligned64(&p, v64);
1309 memcpy(&s64, &buffer[5], sizeof(v64));
1310 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1311 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1314 nlIOWriteMaybeAligned64(&p, v64);
1315 memcpy(&s64, &buffer[6], sizeof(v64));
1316 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1317 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1320 nlIOWriteMaybeAligned64(&p, v64);
1321 memcpy(&s64, &buffer[7], sizeof(v64));
1322 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1323 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1326 static void CheckRead(nlTestSuite *inSuite, void *inContext)
1328 const uint8_t s8 = MAGIC_8;
1329 const uint16_t s16 = MAGIC_16;
1330 const uint32_t s32 = MAGIC_32;
1331 const uint64_t s64 = MAGIC_64;
1332 uint8_t buffer[sizeof(uint64_t) * 2];
1339 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1343 memcpy(&buffer[0], &s8, sizeof(s8));
1345 v8 = nlIORead8((const void **)&p);
1346 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
1347 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1349 // Try 16-bit quantities.
1352 memcpy(&buffer[0], &s16, sizeof(s16));
1354 v16 = nlIORead16((const void **)&p);
1355 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1356 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1359 memcpy(&buffer[1], &s16, sizeof(s16));
1361 v16 = nlIORead16((const void **)&p);
1362 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1363 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1365 // Try 32-bit quantities.
1368 memcpy(&buffer[0], &s32, sizeof(s32));
1370 v32 = nlIORead32((const void **)&p);
1371 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1372 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1375 memcpy(&buffer[1], &s32, sizeof(s32));
1377 v32 = nlIORead32((const void **)&p);
1378 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1379 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1382 memcpy(&buffer[2], &s32, sizeof(s32));
1384 v32 = nlIORead32((const void **)&p);
1385 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1386 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1389 memcpy(&buffer[3], &s32, sizeof(s32));
1391 v32 = nlIORead32((const void **)&p);
1392 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1393 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1395 // Try 64-bit quantities.
1398 memcpy(&buffer[0], &s64, sizeof(s64));
1400 v64 = nlIORead64((const void **)&p);
1401 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1402 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1405 memcpy(&buffer[1], &s64, sizeof(s64));
1407 v64 = nlIORead64((const void **)&p);
1408 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1409 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1412 memcpy(&buffer[2], &s64, sizeof(s64));
1414 v64 = nlIORead64((const void **)&p);
1415 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1416 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1419 memcpy(&buffer[3], &s64, sizeof(s64));
1421 v64 = nlIORead64((const void **)&p);
1422 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1423 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1426 memcpy(&buffer[4], &s64, sizeof(s64));
1428 v64 = nlIORead64((const void **)&p);
1429 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1430 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1433 memcpy(&buffer[5], &s64, sizeof(s64));
1435 v64 = nlIORead64((const void **)&p);
1436 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1437 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1440 memcpy(&buffer[6], &s64, sizeof(s64));
1442 v64 = nlIORead64((const void **)&p);
1443 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1444 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1447 memcpy(&buffer[7], &s64, sizeof(s64));
1449 v64 = nlIORead64((const void **)&p);
1450 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1451 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1454 static void CheckWrite(nlTestSuite *inSuite, void *inContext)
1456 const uint8_t v8 = MAGIC_8;
1457 const uint16_t v16 = MAGIC_16;
1458 const uint32_t v32 = MAGIC_32;
1459 const uint64_t v64 = MAGIC_64;
1460 uint8_t buffer[sizeof(uint64_t) * 2];
1467 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1472 memcpy(&s8, &buffer[0], sizeof(v8));
1473 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
1474 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1476 // Try 16-bit quantities.
1479 nlIOWrite16(&p, v16);
1480 memcpy(&s16, &buffer[0], sizeof(v16));
1481 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1482 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1485 nlIOWrite16(&p, v16);
1486 memcpy(&s16, &buffer[1], sizeof(v16));
1487 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1488 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1490 // Try 32-bit quantities.
1493 nlIOWrite32(&p, v32);
1494 memcpy(&s32, &buffer[0], sizeof(v32));
1495 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1496 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1499 nlIOWrite32(&p, v32);
1500 memcpy(&s32, &buffer[1], sizeof(v32));
1501 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1502 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1505 nlIOWrite32(&p, v32);
1506 memcpy(&s32, &buffer[2], sizeof(v32));
1507 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1508 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1511 nlIOWrite32(&p, v32);
1512 memcpy(&s32, &buffer[3], sizeof(v32));
1513 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1514 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1516 // Try 64-bit quantities.
1519 nlIOWrite64(&p, v64);
1520 memcpy(&s64, &buffer[0], sizeof(v64));
1521 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1522 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1525 nlIOWrite64(&p, v64);
1526 memcpy(&s64, &buffer[1], sizeof(v64));
1527 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1528 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1531 nlIOWrite64(&p, v64);
1532 memcpy(&s64, &buffer[2], sizeof(v64));
1533 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1534 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1537 nlIOWrite64(&p, v64);
1538 memcpy(&s64, &buffer[3], sizeof(v64));
1539 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1540 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1543 nlIOWrite64(&p, v64);
1544 memcpy(&s64, &buffer[4], sizeof(v64));
1545 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1546 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1549 nlIOWrite64(&p, v64);
1550 memcpy(&s64, &buffer[5], sizeof(v64));
1551 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1552 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1555 nlIOWrite64(&p, v64);
1556 memcpy(&s64, &buffer[6], sizeof(v64));
1557 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1558 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1561 nlIOWrite64(&p, v64);
1562 memcpy(&s64, &buffer[7], sizeof(v64));
1563 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1564 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1567 static const nlTest sTests[] = {
1568 NL_TEST_DEF("introspection", CheckIntrospection),
1569 NL_TEST_DEF("aligned get", CheckAlignedGet),
1570 NL_TEST_DEF("aligned put", CheckAlignedPut),
1571 NL_TEST_DEF("unaligned get", CheckUnalignedGet),
1572 NL_TEST_DEF("unaligned put", CheckUnalignedPut),
1573 NL_TEST_DEF("maybe aligned get", CheckMaybeAlignedGet),
1574 NL_TEST_DEF("maybe aligned put", CheckMaybeAlignedPut),
1575 NL_TEST_DEF("get", CheckGet),
1576 NL_TEST_DEF("put", CheckPut),
1577 NL_TEST_DEF("aligned read", CheckAlignedRead),
1578 NL_TEST_DEF("aligned write", CheckAlignedWrite),
1579 NL_TEST_DEF("unaligned read", CheckUnalignedRead),
1580 NL_TEST_DEF("unaligned write", CheckUnalignedWrite),
1581 NL_TEST_DEF("maybe aligned read", CheckMaybeAlignedRead),
1582 NL_TEST_DEF("maybe aligned write", CheckMaybeAlignedWrite),
1583 NL_TEST_DEF("read", CheckRead),
1584 NL_TEST_DEF("write", CheckWrite),
1590 nlTestSuite theSuite = {
1595 nl_test_set_output_style(OUTPUT_CSV);
1597 nlTestRunner(&theSuite, NULL);
1599 return nlTestRunnerStats(&theSuite);