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 using namespace nl::IO;
36 static void CheckIntrospectionExplicitSize(nlTestSuite *inSuite, void *inContext)
45 // Check for natural alignment of an 8-bit stack variable.
47 aligned = IsAligned(&v8, sizeof(v8));
48 NL_TEST_ASSERT(inSuite, aligned == true);
50 // Check for natural alignment of an 16-bit stack variable, which
51 // should also be aligned on 8-bit as well.
53 aligned = IsAligned(&v16, sizeof(v16));
54 NL_TEST_ASSERT(inSuite, aligned == true);
56 aligned = IsAligned(&v16, sizeof(v8));
57 NL_TEST_ASSERT(inSuite, aligned == true);
59 // Check for natural alignment of an 32-bit stack variable, which
60 // should also be aligned on 16- and 8-bit as well.
62 aligned = IsAligned(&v32, sizeof(v32));
63 NL_TEST_ASSERT(inSuite, aligned == true);
65 aligned = IsAligned(&v32, sizeof(v16));
66 NL_TEST_ASSERT(inSuite, aligned == true);
68 aligned = IsAligned(&v32, sizeof(v8));
69 NL_TEST_ASSERT(inSuite, aligned == true);
71 // Check for natural alignment of an 64-bit stack variable, which
72 // should also be aligned on 32-, 16-, and 8-bit as well.
74 aligned = IsAligned(&v64, sizeof(v64));
75 NL_TEST_ASSERT(inSuite, aligned == true);
77 aligned = IsAligned(&v64, sizeof(v32));
78 NL_TEST_ASSERT(inSuite, aligned == true);
80 aligned = IsAligned(&v64, sizeof(v16));
81 NL_TEST_ASSERT(inSuite, aligned == true);
83 aligned = IsAligned(&v64, sizeof(v8));
84 NL_TEST_ASSERT(inSuite, aligned == true);
86 // Check for natural alignment of an 128-bit stack variable, which
87 // should also be aligned on 64-, 32-, 16-, and 8-bit as well.
89 aligned = IsAligned(&v128, sizeof(v128));
90 NL_TEST_ASSERT(inSuite, aligned == true);
92 aligned = IsAligned(&v128, sizeof(v64));
93 NL_TEST_ASSERT(inSuite, aligned == true);
95 aligned = IsAligned(&v128, sizeof(v32));
96 NL_TEST_ASSERT(inSuite, aligned == true);
98 aligned = IsAligned(&v128, sizeof(v16));
99 NL_TEST_ASSERT(inSuite, aligned == true);
101 aligned = IsAligned(&v128, sizeof(v8));
102 NL_TEST_ASSERT(inSuite, aligned == true);
105 static void CheckIntrospectionTemplate(nlTestSuite *inSuite, void *inContext)
114 // Check for natural alignment of an 8-bit stack variable.
116 aligned = IsAligned(&v8);
117 NL_TEST_ASSERT(inSuite, aligned == true);
119 // Check for natural alignment of an 16-bit stack variable.
121 aligned = IsAligned(&v16);
122 NL_TEST_ASSERT(inSuite, aligned == true);
124 // Check for natural alignment of an 32-bit stack variable.
126 aligned = IsAligned(&v32);
127 NL_TEST_ASSERT(inSuite, aligned == true);
129 // Check for natural alignment of an 64-bit stack variable.
131 aligned = IsAligned(&v64);
132 NL_TEST_ASSERT(inSuite, aligned == true);
134 // Check for natural alignment of an 128-bit stack variable.
136 aligned = IsAligned(&v128);
137 NL_TEST_ASSERT(inSuite, aligned == true);
140 static void CheckIntrospection(nlTestSuite *inSuite, void *inContext)
142 CheckIntrospectionExplicitSize(inSuite, inContext);
143 CheckIntrospectionTemplate(inSuite, inContext);
146 static void CheckAlignedGet(nlTestSuite *inSuite, void *inContext)
148 const uint8_t s8 = MAGIC_8;
149 const uint16_t s16 = MAGIC_16;
150 const uint32_t s32 = MAGIC_32;
151 const uint64_t s64 = MAGIC_64;
157 v8 = GetAligned8(&s8);
158 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
160 v16 = GetAligned16(&s16);
161 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
163 v32 = GetAligned32(&s32);
164 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
166 v64 = GetAligned64(&s64);
167 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
170 static void CheckAlignedPut(nlTestSuite *inSuite, void *inContext)
172 const uint8_t v8 = MAGIC_8;
173 const uint16_t v16 = MAGIC_16;
174 const uint32_t v32 = MAGIC_32;
175 const uint64_t v64 = MAGIC_64;
181 PutAligned8(&s8, v8);
182 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
184 PutAligned16(&s16, v16);
185 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
187 PutAligned32(&s32, v32);
188 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
190 PutAligned64(&s64, v64);
191 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
194 static void CheckUnalignedGet(nlTestSuite *inSuite, void *inContext)
196 const uint8_t s8 = MAGIC_8;
197 const uint16_t s16 = MAGIC_16;
198 const uint32_t s32 = MAGIC_32;
199 const uint64_t s64 = MAGIC_64;
200 uint8_t buffer[sizeof(uint64_t) * 2];
207 // Try an 8-bit quantity. They are aligned anywhere and unaligned
211 memcpy(p, &s8, sizeof(s8));
213 v8 = GetUnaligned8(p);
214 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
216 // Try 16-bit quantities.
219 memcpy(p, &s16, sizeof(s16));
221 v16 = GetUnaligned16(p);
222 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
225 memcpy(p, &s16, sizeof(s16));
227 v16 = GetUnaligned16(p);
228 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
230 // Try 32-bit quantities.
233 memcpy(p, &s32, sizeof(s32));
235 v32 = GetUnaligned32(p);
236 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
239 memcpy(p, &s32, sizeof(s32));
241 v32 = GetUnaligned32(p);
242 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
245 memcpy(p, &s32, sizeof(s32));
247 v32 = GetUnaligned32(p);
248 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
251 memcpy(p, &s32, sizeof(s32));
253 v32 = GetUnaligned32(p);
254 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
256 // Try 64-bit quantities.
259 memcpy(p, &s64, sizeof(s64));
261 v64 = GetUnaligned64(p);
262 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
265 memcpy(p, &s64, sizeof(s64));
267 v64 = GetUnaligned64(p);
268 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
271 memcpy(p, &s64, sizeof(s64));
273 v64 = GetUnaligned64(p);
274 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
277 memcpy(p, &s64, sizeof(s64));
279 v64 = GetUnaligned64(p);
280 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
283 memcpy(p, &s64, sizeof(s64));
285 v64 = GetUnaligned64(p);
286 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
289 memcpy(p, &s64, sizeof(s64));
291 v64 = GetUnaligned64(p);
292 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
295 memcpy(p, &s64, sizeof(s64));
297 v64 = GetUnaligned64(p);
298 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
301 memcpy(p, &s64, sizeof(s64));
303 v64 = GetUnaligned64(p);
304 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
307 static void CheckUnalignedPut(nlTestSuite *inSuite, void *inContext)
309 const uint8_t v8 = MAGIC_8;
310 const uint16_t v16 = MAGIC_16;
311 const uint32_t v32 = MAGIC_32;
312 const uint64_t v64 = MAGIC_64;
313 uint8_t buffer[sizeof(uint64_t) * 2];
320 // Try an 8-bit quantity. They are aligned anywhere and unaligned
324 PutUnaligned8(p, v8);
325 memcpy(&s8, p, sizeof(v8));
326 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
328 // Try 16-bit quantities.
331 PutUnaligned16(p, v16);
332 memcpy(&s16, p, sizeof(v16));
333 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
336 PutUnaligned16(p, v16);
337 memcpy(&s16, p, sizeof(v16));
338 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
340 // Try 32-bit quantities.
343 PutUnaligned32(p, v32);
344 memcpy(&s32, p, sizeof(v32));
345 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
348 PutUnaligned32(p, v32);
349 memcpy(&s32, p, sizeof(v32));
350 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
353 PutUnaligned32(p, v32);
354 memcpy(&s32, p, sizeof(v32));
355 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
358 PutUnaligned32(p, v32);
359 memcpy(&s32, p, sizeof(v32));
360 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
362 // Try 64-bit quantities.
365 PutUnaligned64(p, v64);
366 memcpy(&s64, p, sizeof(v64));
367 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
370 PutUnaligned64(p, v64);
371 memcpy(&s64, p, sizeof(v64));
372 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
375 PutUnaligned64(p, v64);
376 memcpy(&s64, p, sizeof(v64));
377 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
380 PutUnaligned64(p, v64);
381 memcpy(&s64, p, sizeof(v64));
382 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
385 PutUnaligned64(p, v64);
386 memcpy(&s64, p, sizeof(v64));
387 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
390 PutUnaligned64(p, v64);
391 memcpy(&s64, p, sizeof(v64));
392 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
395 PutUnaligned64(p, v64);
396 memcpy(&s64, p, sizeof(v64));
397 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
400 PutUnaligned64(p, v64);
401 memcpy(&s64, p, sizeof(v64));
402 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
405 static void CheckMaybeAlignedGet(nlTestSuite *inSuite, void *inContext)
407 const uint8_t s8 = MAGIC_8;
408 const uint16_t s16 = MAGIC_16;
409 const uint32_t s32 = MAGIC_32;
410 const uint64_t s64 = MAGIC_64;
411 uint8_t buffer[sizeof(uint64_t) * 2];
418 // Try an 8-bit quantity. They are aligned anywhere and unaligned
421 v8 = GetMaybeAligned8(&s8);
422 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
424 // Try 16-bit quantities.
427 memcpy(p, &s16, sizeof(s16));
429 v16 = GetMaybeAligned16(p);
430 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
433 memcpy(p, &s16, sizeof(s16));
435 v16 = GetMaybeAligned16(p);
436 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
438 // Try 32-bit quantities.
441 memcpy(p, &s32, sizeof(s32));
443 v32 = GetMaybeAligned32(p);
444 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
447 memcpy(p, &s32, sizeof(s32));
449 v32 = GetMaybeAligned32(p);
450 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
453 memcpy(p, &s32, sizeof(s32));
455 v32 = GetMaybeAligned32(p);
456 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
459 memcpy(p, &s32, sizeof(s32));
461 v32 = GetMaybeAligned32(p);
462 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
464 // Try 64-bit quantities.
467 memcpy(p, &s64, sizeof(s64));
469 v64 = GetMaybeAligned64(p);
470 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
473 memcpy(p, &s64, sizeof(s64));
475 v64 = GetMaybeAligned64(p);
476 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
479 memcpy(p, &s64, sizeof(s64));
481 v64 = GetMaybeAligned64(p);
482 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
485 memcpy(p, &s64, sizeof(s64));
487 v64 = GetMaybeAligned64(p);
488 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
491 memcpy(p, &s64, sizeof(s64));
493 v64 = GetMaybeAligned64(p);
494 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
497 memcpy(p, &s64, sizeof(s64));
499 v64 = GetMaybeAligned64(p);
500 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
503 memcpy(p, &s64, sizeof(s64));
505 v64 = GetMaybeAligned64(p);
506 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
509 memcpy(p, &s64, sizeof(s64));
511 v64 = GetMaybeAligned64(p);
512 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
515 static void CheckMaybeAlignedPut(nlTestSuite *inSuite, void *inContext)
517 const uint8_t v8 = MAGIC_8;
518 const uint16_t v16 = MAGIC_16;
519 const uint32_t v32 = MAGIC_32;
520 const uint64_t v64 = MAGIC_64;
521 uint8_t buffer[sizeof(uint64_t) * 2];
528 // Try an 8-bit quantity. They are aligned anywhere and unaligned
532 PutMaybeAligned8(p, v8);
533 memcpy(&s8, p, sizeof(v8));
534 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
536 // Try 16-bit quantities.
539 PutMaybeAligned16(p, v16);
540 memcpy(&s16, p, sizeof(v16));
541 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
544 PutMaybeAligned16(p, v16);
545 memcpy(&s16, p, sizeof(v16));
546 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
548 // Try 32-bit quantities.
551 PutMaybeAligned32(p, v32);
552 memcpy(&s32, p, sizeof(v32));
553 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
556 PutMaybeAligned32(p, v32);
557 memcpy(&s32, p, sizeof(v32));
558 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
561 PutMaybeAligned32(p, v32);
562 memcpy(&s32, p, sizeof(v32));
563 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
566 PutMaybeAligned32(p, v32);
567 memcpy(&s32, p, sizeof(v32));
568 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
570 // Try 64-bit quantities.
573 PutMaybeAligned64(p, v64);
574 memcpy(&s64, p, sizeof(v64));
575 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
578 PutMaybeAligned64(p, v64);
579 memcpy(&s64, p, sizeof(v64));
580 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
583 PutMaybeAligned64(p, v64);
584 memcpy(&s64, p, sizeof(v64));
585 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
588 PutMaybeAligned64(p, v64);
589 memcpy(&s64, p, sizeof(v64));
590 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
593 PutMaybeAligned64(p, v64);
594 memcpy(&s64, p, sizeof(v64));
595 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
598 PutMaybeAligned64(p, v64);
599 memcpy(&s64, p, sizeof(v64));
600 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
603 PutMaybeAligned64(p, v64);
604 memcpy(&s64, p, sizeof(v64));
605 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
608 PutMaybeAligned64(p, v64);
609 memcpy(&s64, p, sizeof(v64));
610 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
613 static void CheckGet(nlTestSuite *inSuite, void *inContext)
615 const uint8_t s8 = MAGIC_8;
616 const uint16_t s16 = MAGIC_16;
617 const uint32_t s32 = MAGIC_32;
618 const uint64_t s64 = MAGIC_64;
619 uint8_t buffer[sizeof(uint64_t) * 2];
626 // Try an 8-bit quantity. They are aligned anywhere and unaligned
630 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
632 // Try 16-bit quantities.
635 memcpy(p, &s16, sizeof(s16));
638 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
641 memcpy(p, &s16, sizeof(s16));
644 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
646 // Try 32-bit quantities.
649 memcpy(p, &s32, sizeof(s32));
652 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
655 memcpy(p, &s32, sizeof(s32));
658 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
661 memcpy(p, &s32, sizeof(s32));
664 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
667 memcpy(p, &s32, sizeof(s32));
670 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
672 // Try 64-bit quantities.
675 memcpy(p, &s64, sizeof(s64));
678 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
681 memcpy(p, &s64, sizeof(s64));
684 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
687 memcpy(p, &s64, sizeof(s64));
690 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
693 memcpy(p, &s64, sizeof(s64));
696 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
699 memcpy(p, &s64, sizeof(s64));
702 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
705 memcpy(p, &s64, sizeof(s64));
708 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
711 memcpy(p, &s64, sizeof(s64));
714 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
717 memcpy(p, &s64, sizeof(s64));
720 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
723 static void CheckPut(nlTestSuite *inSuite, void *inContext)
725 const uint8_t v8 = MAGIC_8;
726 const uint16_t v16 = MAGIC_16;
727 const uint32_t v32 = MAGIC_32;
728 const uint64_t v64 = MAGIC_64;
729 uint8_t buffer[sizeof(uint64_t) * 2];
736 // Try an 8-bit quantity. They are aligned anywhere and unaligned
741 memcpy(&s8, p, sizeof(v8));
742 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
744 // Try 16-bit quantities.
748 memcpy(&s16, p, sizeof(v16));
749 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
753 memcpy(&s16, p, sizeof(v16));
754 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
756 // Try 32-bit quantities.
760 memcpy(&s32, p, sizeof(v32));
761 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
765 memcpy(&s32, p, sizeof(v32));
766 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
770 memcpy(&s32, p, sizeof(v32));
771 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
775 memcpy(&s32, p, sizeof(v32));
776 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
778 // Try 64-bit quantities.
782 memcpy(&s64, p, sizeof(v64));
783 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
787 memcpy(&s64, p, sizeof(v64));
788 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
792 memcpy(&s64, p, sizeof(v64));
793 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
797 memcpy(&s64, p, sizeof(v64));
798 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
802 memcpy(&s64, p, sizeof(v64));
803 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
807 memcpy(&s64, p, sizeof(v64));
808 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
812 memcpy(&s64, p, sizeof(v64));
813 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
817 memcpy(&s64, p, sizeof(v64));
818 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
821 static void CheckAlignedRead(nlTestSuite *inSuite, void *inContext)
823 const uint8_t s8 = MAGIC_8;
824 const uint16_t s16 = MAGIC_16;
825 const uint32_t s32 = MAGIC_32;
826 const uint64_t s64 = MAGIC_64;
834 v8 = ReadAligned8(p);
835 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
836 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s8 + sizeof(s8));
839 v16 = ReadAligned16(p);
840 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
841 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s16 + sizeof(s16));
844 v32 = ReadAligned32(p);
845 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
846 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s32 + sizeof(s32));
849 v64 = ReadAligned64(p);
850 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
851 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s64 + sizeof(s64));
854 static void CheckAlignedWrite(nlTestSuite *inSuite, void *inContext)
856 const uint8_t v8 = MAGIC_8;
857 const uint16_t v16 = MAGIC_16;
858 const uint32_t v32 = MAGIC_32;
859 const uint64_t v64 = MAGIC_64;
867 WriteAligned8(p, v8);
868 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
869 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s8 + sizeof(s8));
872 WriteAligned16(p, v16);
873 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
874 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s16 + sizeof(s16));
877 WriteAligned32(p, v32);
878 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
879 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s32 + sizeof(s32));
882 WriteAligned64(p, v64);
883 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
884 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&s64 + sizeof(s64));
887 static void CheckUnalignedRead(nlTestSuite *inSuite, void *inContext)
889 const uint8_t s8 = MAGIC_8;
890 const uint16_t s16 = MAGIC_16;
891 const uint32_t s32 = MAGIC_32;
892 const uint64_t s64 = MAGIC_64;
893 uint8_t buffer[sizeof(uint64_t) * 2];
900 // Try an 8-bit quantity. They are aligned anywhere and unaligned
904 memcpy(&buffer[0], &s8, sizeof(s8));
906 v8 = ReadUnaligned8(p);
907 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
908 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
910 // Try 16-bit quantities.
913 memcpy(&buffer[0], &s16, sizeof(s16));
915 v16 = ReadUnaligned16(p);
916 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
917 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
920 memcpy(&buffer[1], &s16, sizeof(s16));
922 v16 = ReadUnaligned16(p);
923 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
924 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
926 // Try 32-bit quantities.
929 memcpy(&buffer[0], &s32, sizeof(s32));
931 v32 = ReadUnaligned32(p);
932 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
933 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
936 memcpy(&buffer[1], &s32, sizeof(s32));
938 v32 = ReadUnaligned32(p);
939 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
940 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
943 memcpy(&buffer[2], &s32, sizeof(s32));
945 v32 = ReadUnaligned32(p);
946 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
947 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
950 memcpy(&buffer[3], &s32, sizeof(s32));
952 v32 = ReadUnaligned32(p);
953 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
954 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
956 // Try 64-bit quantities.
959 memcpy(&buffer[0], &s64, sizeof(s64));
961 v64 = ReadUnaligned64(p);
962 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
963 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
966 memcpy(&buffer[1], &s64, sizeof(s64));
968 v64 = ReadUnaligned64(p);
969 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
970 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
973 memcpy(&buffer[2], &s64, sizeof(s64));
975 v64 = ReadUnaligned64(p);
976 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
977 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
980 memcpy(&buffer[3], &s64, sizeof(s64));
982 v64 = ReadUnaligned64(p);
983 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
984 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
987 memcpy(&buffer[4], &s64, sizeof(s64));
989 v64 = ReadUnaligned64(p);
990 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
991 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
994 memcpy(&buffer[5], &s64, sizeof(s64));
996 v64 = ReadUnaligned64(p);
997 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
998 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1001 memcpy(&buffer[6], &s64, sizeof(s64));
1003 v64 = ReadUnaligned64(p);
1004 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1005 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1008 memcpy(&buffer[7], &s64, sizeof(s64));
1010 v64 = ReadUnaligned64(p);
1011 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1012 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1015 static void CheckUnalignedWrite(nlTestSuite *inSuite, void *inContext)
1017 const uint8_t v8 = MAGIC_8;
1018 const uint16_t v16 = MAGIC_16;
1019 const uint32_t v32 = MAGIC_32;
1020 const uint64_t v64 = MAGIC_64;
1021 uint8_t buffer[sizeof(uint64_t) * 2];
1028 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1032 WriteUnaligned8(p, v8);
1033 memcpy(&s8, &buffer[0], sizeof(v8));
1034 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
1035 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1037 // Try 16-bit quantities.
1040 WriteUnaligned16(p, v16);
1041 memcpy(&s16, &buffer[0], sizeof(v16));
1042 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1043 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1046 WriteUnaligned16(p, v16);
1047 memcpy(&s16, &buffer[1], sizeof(v16));
1048 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1049 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1051 // Try 32-bit quantities.
1054 WriteUnaligned32(p, v32);
1055 memcpy(&s32, &buffer[0], sizeof(v32));
1056 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1057 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1060 WriteUnaligned32(p, v32);
1061 memcpy(&s32, &buffer[1], sizeof(v32));
1062 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1063 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1066 WriteUnaligned32(p, v32);
1067 memcpy(&s32, &buffer[2], sizeof(v32));
1068 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1069 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1072 WriteUnaligned32(p, v32);
1073 memcpy(&s32, &buffer[3], sizeof(v32));
1074 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1075 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1077 // Try 64-bit quantities.
1080 WriteUnaligned64(p, v64);
1081 memcpy(&s64, &buffer[0], sizeof(v64));
1082 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1083 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1086 WriteUnaligned64(p, v64);
1087 memcpy(&s64, &buffer[1], sizeof(v64));
1088 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1089 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1092 WriteUnaligned64(p, v64);
1093 memcpy(&s64, &buffer[2], sizeof(v64));
1094 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1095 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1098 WriteUnaligned64(p, v64);
1099 memcpy(&s64, &buffer[3], sizeof(v64));
1100 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1101 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1104 WriteUnaligned64(p, v64);
1105 memcpy(&s64, &buffer[4], sizeof(v64));
1106 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1107 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1110 WriteUnaligned64(p, v64);
1111 memcpy(&s64, &buffer[5], sizeof(v64));
1112 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1113 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1116 WriteUnaligned64(p, v64);
1117 memcpy(&s64, &buffer[6], sizeof(v64));
1118 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1119 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1122 WriteUnaligned64(p, v64);
1123 memcpy(&s64, &buffer[7], sizeof(v64));
1124 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1125 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1128 static void CheckMaybeAlignedRead(nlTestSuite *inSuite, void *inContext)
1130 const uint8_t s8 = MAGIC_8;
1131 const uint16_t s16 = MAGIC_16;
1132 const uint32_t s32 = MAGIC_32;
1133 const uint64_t s64 = MAGIC_64;
1134 uint8_t buffer[sizeof(uint64_t) * 2];
1141 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1145 memcpy(&buffer[0], &s8, sizeof(s8));
1147 v8 = ReadMaybeAligned8(p);
1148 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
1149 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1151 // Try 16-bit quantities.
1154 memcpy(&buffer[0], &s16, sizeof(s16));
1156 v16 = ReadMaybeAligned16(p);
1157 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1158 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1161 memcpy(&buffer[1], &s16, sizeof(s16));
1163 v16 = ReadMaybeAligned16(p);
1164 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1165 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1167 // Try 32-bit quantities.
1170 memcpy(&buffer[0], &s32, sizeof(s32));
1172 v32 = ReadMaybeAligned32(p);
1173 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1174 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1177 memcpy(&buffer[1], &s32, sizeof(s32));
1179 v32 = ReadMaybeAligned32(p);
1180 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1181 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1184 memcpy(&buffer[2], &s32, sizeof(s32));
1186 v32 = ReadMaybeAligned32(p);
1187 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1188 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1191 memcpy(&buffer[3], &s32, sizeof(s32));
1193 v32 = ReadMaybeAligned32(p);
1194 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1195 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1197 // Try 64-bit quantities.
1200 memcpy(&buffer[0], &s64, sizeof(s64));
1202 v64 = ReadMaybeAligned64(p);
1203 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1204 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1207 memcpy(&buffer[1], &s64, sizeof(s64));
1209 v64 = ReadMaybeAligned64(p);
1210 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1211 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1214 memcpy(&buffer[2], &s64, sizeof(s64));
1216 v64 = ReadMaybeAligned64(p);
1217 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1218 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1221 memcpy(&buffer[3], &s64, sizeof(s64));
1223 v64 = ReadMaybeAligned64(p);
1224 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1225 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1228 memcpy(&buffer[4], &s64, sizeof(s64));
1230 v64 = ReadMaybeAligned64(p);
1231 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1232 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1235 memcpy(&buffer[5], &s64, sizeof(s64));
1237 v64 = ReadMaybeAligned64(p);
1238 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1239 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1242 memcpy(&buffer[6], &s64, sizeof(s64));
1244 v64 = ReadMaybeAligned64(p);
1245 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1246 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1249 memcpy(&buffer[7], &s64, sizeof(s64));
1251 v64 = ReadMaybeAligned64(p);
1252 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1253 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1256 static void CheckMaybeAlignedWrite(nlTestSuite *inSuite, void *inContext)
1258 const uint8_t v8 = MAGIC_8;
1259 const uint16_t v16 = MAGIC_16;
1260 const uint32_t v32 = MAGIC_32;
1261 const uint64_t v64 = MAGIC_64;
1262 uint8_t buffer[sizeof(uint64_t) * 2];
1269 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1273 WriteMaybeAligned8(p, v8);
1274 memcpy(&s8, &buffer[0], sizeof(v8));
1275 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
1276 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1278 // Try 16-bit quantities.
1281 WriteMaybeAligned16(p, v16);
1282 memcpy(&s16, &buffer[0], sizeof(v16));
1283 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1284 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1287 WriteMaybeAligned16(p, v16);
1288 memcpy(&s16, &buffer[1], sizeof(v16));
1289 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1290 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1292 // Try 32-bit quantities.
1295 WriteMaybeAligned32(p, v32);
1296 memcpy(&s32, &buffer[0], sizeof(v32));
1297 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1298 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1301 WriteMaybeAligned32(p, v32);
1302 memcpy(&s32, &buffer[1], sizeof(v32));
1303 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1304 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1307 WriteMaybeAligned32(p, v32);
1308 memcpy(&s32, &buffer[2], sizeof(v32));
1309 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1310 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1313 WriteMaybeAligned32(p, v32);
1314 memcpy(&s32, &buffer[3], sizeof(v32));
1315 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1316 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1318 // Try 64-bit quantities.
1321 WriteMaybeAligned64(p, v64);
1322 memcpy(&s64, &buffer[0], sizeof(v64));
1323 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1324 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1327 WriteMaybeAligned64(p, v64);
1328 memcpy(&s64, &buffer[1], sizeof(v64));
1329 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1330 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1333 WriteMaybeAligned64(p, v64);
1334 memcpy(&s64, &buffer[2], sizeof(v64));
1335 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1336 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1339 WriteMaybeAligned64(p, v64);
1340 memcpy(&s64, &buffer[3], sizeof(v64));
1341 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1342 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1345 WriteMaybeAligned64(p, v64);
1346 memcpy(&s64, &buffer[4], sizeof(v64));
1347 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1348 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1351 WriteMaybeAligned64(p, v64);
1352 memcpy(&s64, &buffer[5], sizeof(v64));
1353 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1354 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1357 WriteMaybeAligned64(p, v64);
1358 memcpy(&s64, &buffer[6], sizeof(v64));
1359 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1360 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1363 WriteMaybeAligned64(p, v64);
1364 memcpy(&s64, &buffer[7], sizeof(v64));
1365 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1366 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1369 static void CheckRead(nlTestSuite *inSuite, void *inContext)
1371 const uint8_t s8 = MAGIC_8;
1372 const uint16_t s16 = MAGIC_16;
1373 const uint32_t s32 = MAGIC_32;
1374 const uint64_t s64 = MAGIC_64;
1375 uint8_t buffer[sizeof(uint64_t) * 2];
1382 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1386 memcpy(&buffer[0], &s8, sizeof(s8));
1389 NL_TEST_ASSERT(inSuite, v8 == MAGIC_8);
1390 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1392 // Try 16-bit quantities.
1395 memcpy(&buffer[0], &s16, sizeof(s16));
1398 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1399 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1402 memcpy(&buffer[1], &s16, sizeof(s16));
1405 NL_TEST_ASSERT(inSuite, v16 == MAGIC_16);
1406 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1408 // Try 32-bit quantities.
1411 memcpy(&buffer[0], &s32, sizeof(s32));
1414 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1415 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1418 memcpy(&buffer[1], &s32, sizeof(s32));
1421 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1422 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1425 memcpy(&buffer[2], &s32, sizeof(s32));
1428 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1429 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1432 memcpy(&buffer[3], &s32, sizeof(s32));
1435 NL_TEST_ASSERT(inSuite, v32 == MAGIC_32);
1436 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1438 // Try 64-bit quantities.
1441 memcpy(&buffer[0], &s64, sizeof(s64));
1444 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1445 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1448 memcpy(&buffer[1], &s64, sizeof(s64));
1451 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1452 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1455 memcpy(&buffer[2], &s64, sizeof(s64));
1458 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1459 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1462 memcpy(&buffer[3], &s64, sizeof(s64));
1465 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1466 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1469 memcpy(&buffer[4], &s64, sizeof(s64));
1472 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1473 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1476 memcpy(&buffer[5], &s64, sizeof(s64));
1479 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1480 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1483 memcpy(&buffer[6], &s64, sizeof(s64));
1486 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1487 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1490 memcpy(&buffer[7], &s64, sizeof(s64));
1493 NL_TEST_ASSERT(inSuite, v64 == MAGIC_64);
1494 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1497 static void CheckWrite(nlTestSuite *inSuite, void *inContext)
1499 const uint8_t v8 = MAGIC_8;
1500 const uint16_t v16 = MAGIC_16;
1501 const uint32_t v32 = MAGIC_32;
1502 const uint64_t v64 = MAGIC_64;
1503 uint8_t buffer[sizeof(uint64_t) * 2];
1510 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1515 memcpy(&s8, &buffer[0], sizeof(v8));
1516 NL_TEST_ASSERT(inSuite, s8 == MAGIC_8);
1517 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s8));
1519 // Try 16-bit quantities.
1523 memcpy(&s16, &buffer[0], sizeof(v16));
1524 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1525 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s16));
1529 memcpy(&s16, &buffer[1], sizeof(v16));
1530 NL_TEST_ASSERT(inSuite, s16 == MAGIC_16);
1531 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s16));
1533 // Try 32-bit quantities.
1537 memcpy(&s32, &buffer[0], sizeof(v32));
1538 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1539 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s32));
1543 memcpy(&s32, &buffer[1], sizeof(v32));
1544 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1545 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s32));
1549 memcpy(&s32, &buffer[2], sizeof(v32));
1550 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1551 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s32));
1555 memcpy(&s32, &buffer[3], sizeof(v32));
1556 NL_TEST_ASSERT(inSuite, s32 == MAGIC_32);
1557 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s32));
1559 // Try 64-bit quantities.
1563 memcpy(&s64, &buffer[0], sizeof(v64));
1564 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1565 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(s64));
1569 memcpy(&s64, &buffer[1], sizeof(v64));
1570 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1571 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(s64));
1575 memcpy(&s64, &buffer[2], sizeof(v64));
1576 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1577 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(s64));
1581 memcpy(&s64, &buffer[3], sizeof(v64));
1582 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1583 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(s64));
1587 memcpy(&s64, &buffer[4], sizeof(v64));
1588 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1589 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(s64));
1593 memcpy(&s64, &buffer[5], sizeof(v64));
1594 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1595 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(s64));
1599 memcpy(&s64, &buffer[6], sizeof(v64));
1600 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1601 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(s64));
1605 memcpy(&s64, &buffer[7], sizeof(v64));
1606 NL_TEST_ASSERT(inSuite, s64 == MAGIC_64);
1607 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(s64));
1610 static const nlTest sTests[] = {
1611 NL_TEST_DEF("introspection", CheckIntrospection),
1612 NL_TEST_DEF("aligned get", CheckAlignedGet),
1613 NL_TEST_DEF("aligned put", CheckAlignedPut),
1614 NL_TEST_DEF("unaligned get", CheckUnalignedGet),
1615 NL_TEST_DEF("unaligned put", CheckUnalignedPut),
1616 NL_TEST_DEF("maybe aligned get", CheckMaybeAlignedGet),
1617 NL_TEST_DEF("maybe aligned put", CheckMaybeAlignedPut),
1618 NL_TEST_DEF("get", CheckGet),
1619 NL_TEST_DEF("put", CheckPut),
1620 NL_TEST_DEF("aligned read", CheckAlignedRead),
1621 NL_TEST_DEF("aligned write", CheckAlignedWrite),
1622 NL_TEST_DEF("unaligned read", CheckUnalignedRead),
1623 NL_TEST_DEF("unaligned write", CheckUnalignedWrite),
1624 NL_TEST_DEF("maybe aligned read", CheckMaybeAlignedRead),
1625 NL_TEST_DEF("maybe aligned write", CheckMaybeAlignedWrite),
1626 NL_TEST_DEF("read", CheckRead),
1627 NL_TEST_DEF("write", CheckWrite),
1633 nlTestSuite theSuite = {
1638 nl_test_set_output_style(OUTPUT_CSV);
1640 nlTestRunner(&theSuite, NULL);
1642 return nlTestRunnerStats(&theSuite);