2 * Copyright 2015-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 with
28 #include <nlio-byteorder.h>
30 #include <nlunit-test.h>
32 #include "nlio-byteorder-test.h"
34 static void CheckGetBig(nlTestSuite *inSuite, void *inContext)
36 const uint8_t v8_in = MAGIC8;
37 const uint16_t v16_in = MAGIC16;
38 const uint32_t v32_in = MAGIC32;
39 const uint64_t v64_in = MAGIC64;
45 v8_out = nlIOBigEndianGet8(&v8_in);
46 v16_out = nlIOBigEndianGet16(&v16_in);
47 v32_out = nlIOBigEndianGet32(&v32_in);
48 v64_out = nlIOBigEndianGet64(&v64_in);
50 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
51 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
52 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
53 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
54 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
56 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
57 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
58 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
59 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
60 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
63 NL_TEST_ASSERT(inSuite, false);
68 static void CheckGetLittle(nlTestSuite *inSuite, void *inContext)
70 const uint8_t v8_in = MAGIC8;
71 const uint16_t v16_in = MAGIC16;
72 const uint32_t v32_in = MAGIC32;
73 const uint64_t v64_in = MAGIC64;
79 v8_out = nlIOLittleEndianGet8(&v8_in);
80 v16_out = nlIOLittleEndianGet16(&v16_in);
81 v32_out = nlIOLittleEndianGet32(&v32_in);
82 v64_out = nlIOLittleEndianGet64(&v64_in);
84 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
85 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
86 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
87 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
88 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
90 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
91 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
92 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
93 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
94 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
97 NL_TEST_ASSERT(inSuite, false);
102 static void CheckPutBig(nlTestSuite *inSuite, void *inContext)
104 const uint8_t v8_in = MAGIC8;
105 const uint16_t v16_in = MAGIC16;
106 const uint32_t v32_in = MAGIC32;
107 const uint64_t v64_in = MAGIC64;
113 nlIOBigEndianPut8(&v8_out, v8_in);
114 nlIOBigEndianPut16(&v16_out, v16_in);
115 nlIOBigEndianPut32(&v32_out, v32_in);
116 nlIOBigEndianPut64(&v64_out, v64_in);
118 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
119 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
120 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
121 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
122 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
124 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
125 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
126 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
127 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
128 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
131 NL_TEST_ASSERT(inSuite, false);
136 static void CheckPutLittle(nlTestSuite *inSuite, void *inContext)
138 const uint8_t v8_in = MAGIC8;
139 const uint16_t v16_in = MAGIC16;
140 const uint32_t v32_in = MAGIC32;
141 const uint64_t v64_in = MAGIC64;
147 nlIOLittleEndianPut8(&v8_out, v8_in);
148 nlIOLittleEndianPut16(&v16_out, v16_in);
149 nlIOLittleEndianPut32(&v32_out, v32_in);
150 nlIOLittleEndianPut64(&v64_out, v64_in);
152 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
153 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
154 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
155 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
156 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
158 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
159 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
160 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
161 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
162 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
165 NL_TEST_ASSERT(inSuite, false);
170 static void CheckReadBig(nlTestSuite *inSuite, void *inContext)
172 const uint8_t v8_in = MAGIC8;
173 const uint16_t v16_in = MAGIC16;
174 const uint32_t v32_in = MAGIC32;
175 const uint64_t v64_in = MAGIC64;
176 const void *p8_in = &v8_in;
177 const void *p16_in = &v16_in;
178 const void *p32_in = &v32_in;
179 const void *p64_in = &v64_in;
185 v8_out = nlIOBigEndianRead8(&p8_in);
186 v16_out = nlIOBigEndianRead16(&p16_in);
187 v32_out = nlIOBigEndianRead32(&p32_in);
188 v64_out = nlIOBigEndianRead64(&p64_in);
190 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
191 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
192 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
193 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
195 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
196 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
197 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
198 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
199 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
201 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
202 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
203 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
204 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
205 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
208 NL_TEST_ASSERT(inSuite, false);
213 static void CheckReadLittle(nlTestSuite *inSuite, void *inContext)
215 const uint8_t v8_in = MAGIC8;
216 const uint16_t v16_in = MAGIC16;
217 const uint32_t v32_in = MAGIC32;
218 const uint64_t v64_in = MAGIC64;
219 const void *p8_in = &v8_in;
220 const void *p16_in = &v16_in;
221 const void *p32_in = &v32_in;
222 const void *p64_in = &v64_in;
228 v8_out = nlIOLittleEndianRead8(&p8_in);
229 v16_out = nlIOLittleEndianRead16(&p16_in);
230 v32_out = nlIOLittleEndianRead32(&p32_in);
231 v64_out = nlIOLittleEndianRead64(&p64_in);
233 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
234 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
235 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
236 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
238 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
239 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
240 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
241 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
242 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
244 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
245 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
246 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
247 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
248 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
251 NL_TEST_ASSERT(inSuite, false);
256 static void CheckWriteBig(nlTestSuite *inSuite, void *inContext)
258 const uint8_t v8_in = MAGIC8;
259 const uint16_t v16_in = MAGIC16;
260 const uint32_t v32_in = MAGIC32;
261 const uint64_t v64_in = MAGIC64;
266 void *p8_out = &v8_out;
267 void *p16_out = &v16_out;
268 void *p32_out = &v32_out;
269 void *p64_out = &v64_out;
271 nlIOBigEndianWrite8(&p8_out, v8_in);
272 nlIOBigEndianWrite16(&p16_out, v16_in);
273 nlIOBigEndianWrite32(&p32_out, v32_in);
274 nlIOBigEndianWrite64(&p64_out, v64_in);
276 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
277 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
278 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
279 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
281 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
282 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
283 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
284 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
285 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
287 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
288 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
289 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
290 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
291 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
294 NL_TEST_ASSERT(inSuite, false);
299 static void CheckWriteLittle(nlTestSuite *inSuite, void *inContext)
301 const uint8_t v8_in = MAGIC8;
302 const uint16_t v16_in = MAGIC16;
303 const uint32_t v32_in = MAGIC32;
304 const uint64_t v64_in = MAGIC64;
309 void *p8_out = &v8_out;
310 void *p16_out = &v16_out;
311 void *p32_out = &v32_out;
312 void *p64_out = &v64_out;
314 nlIOLittleEndianWrite8(&p8_out, v8_in);
315 nlIOLittleEndianWrite16(&p16_out, v16_in);
316 nlIOLittleEndianWrite32(&p32_out, v32_in);
317 nlIOLittleEndianWrite64(&p64_out, v64_in);
319 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
320 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
321 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
322 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
324 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
325 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
326 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
327 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
328 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
330 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
331 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
332 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
333 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
334 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
337 NL_TEST_ASSERT(inSuite, false);
342 static void CheckGetBigAligned(nlTestSuite *inSuite, void *inContext)
344 const uint8_t v8_in = MAGIC8;
345 const uint16_t v16_in = MAGIC16;
346 const uint32_t v32_in = MAGIC32;
347 const uint64_t v64_in = MAGIC64;
353 v8_out = nlIOBigEndianGetAligned8(&v8_in);
354 v16_out = nlIOBigEndianGetAligned16(&v16_in);
355 v32_out = nlIOBigEndianGetAligned32(&v32_in);
356 v64_out = nlIOBigEndianGetAligned64(&v64_in);
358 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
359 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
360 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
361 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
362 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
364 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
365 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
366 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
367 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
368 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
371 NL_TEST_ASSERT(inSuite, false);
376 static void CheckGetLittleAligned(nlTestSuite *inSuite, void *inContext)
378 const uint8_t v8_in = MAGIC8;
379 const uint16_t v16_in = MAGIC16;
380 const uint32_t v32_in = MAGIC32;
381 const uint64_t v64_in = MAGIC64;
387 v8_out = nlIOLittleEndianGetAligned8(&v8_in);
388 v16_out = nlIOLittleEndianGetAligned16(&v16_in);
389 v32_out = nlIOLittleEndianGetAligned32(&v32_in);
390 v64_out = nlIOLittleEndianGetAligned64(&v64_in);
392 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
393 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
394 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
395 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
396 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
398 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
399 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
400 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
401 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
402 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
405 NL_TEST_ASSERT(inSuite, false);
410 static void CheckPutBigAligned(nlTestSuite *inSuite, void *inContext)
412 const uint8_t v8_in = MAGIC8;
413 const uint16_t v16_in = MAGIC16;
414 const uint32_t v32_in = MAGIC32;
415 const uint64_t v64_in = MAGIC64;
421 nlIOBigEndianPutAligned8(&v8_out, v8_in);
422 nlIOBigEndianPutAligned16(&v16_out, v16_in);
423 nlIOBigEndianPutAligned32(&v32_out, v32_in);
424 nlIOBigEndianPutAligned64(&v64_out, v64_in);
426 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
427 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
428 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
429 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
430 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
432 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
433 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
434 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
435 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
436 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
439 NL_TEST_ASSERT(inSuite, false);
444 static void CheckPutLittleAligned(nlTestSuite *inSuite, void *inContext)
446 const uint8_t v8_in = MAGIC8;
447 const uint16_t v16_in = MAGIC16;
448 const uint32_t v32_in = MAGIC32;
449 const uint64_t v64_in = MAGIC64;
455 nlIOLittleEndianPutAligned8(&v8_out, v8_in);
456 nlIOLittleEndianPutAligned16(&v16_out, v16_in);
457 nlIOLittleEndianPutAligned32(&v32_out, v32_in);
458 nlIOLittleEndianPutAligned64(&v64_out, v64_in);
460 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
461 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
462 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
463 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
464 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
466 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
467 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
468 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
469 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
470 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
473 NL_TEST_ASSERT(inSuite, false);
478 static void CheckReadBigAligned(nlTestSuite *inSuite, void *inContext)
480 const uint8_t v8_in = MAGIC8;
481 const uint16_t v16_in = MAGIC16;
482 const uint32_t v32_in = MAGIC32;
483 const uint64_t v64_in = MAGIC64;
484 const void *p8_in = &v8_in;
485 const void *p16_in = &v16_in;
486 const void *p32_in = &v32_in;
487 const void *p64_in = &v64_in;
493 v8_out = nlIOBigEndianReadAligned8(&p8_in);
494 v16_out = nlIOBigEndianReadAligned16(&p16_in);
495 v32_out = nlIOBigEndianReadAligned32(&p32_in);
496 v64_out = nlIOBigEndianReadAligned64(&p64_in);
498 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
499 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
500 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
501 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
503 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
504 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
505 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
506 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
507 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
509 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
510 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
511 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
512 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
513 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
516 NL_TEST_ASSERT(inSuite, false);
521 static void CheckReadLittleAligned(nlTestSuite *inSuite, void *inContext)
523 const uint8_t v8_in = MAGIC8;
524 const uint16_t v16_in = MAGIC16;
525 const uint32_t v32_in = MAGIC32;
526 const uint64_t v64_in = MAGIC64;
527 const void *p8_in = &v8_in;
528 const void *p16_in = &v16_in;
529 const void *p32_in = &v32_in;
530 const void *p64_in = &v64_in;
536 v8_out = nlIOLittleEndianReadAligned8(&p8_in);
537 v16_out = nlIOLittleEndianReadAligned16(&p16_in);
538 v32_out = nlIOLittleEndianReadAligned32(&p32_in);
539 v64_out = nlIOLittleEndianReadAligned64(&p64_in);
541 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
542 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
543 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
544 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
546 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
547 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
548 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
549 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
550 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
552 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
553 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
554 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
555 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
556 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
559 NL_TEST_ASSERT(inSuite, false);
564 static void CheckWriteBigAligned(nlTestSuite *inSuite, void *inContext)
566 const uint8_t v8_in = MAGIC8;
567 const uint16_t v16_in = MAGIC16;
568 const uint32_t v32_in = MAGIC32;
569 const uint64_t v64_in = MAGIC64;
574 void *p8_out = &v8_out;
575 void *p16_out = &v16_out;
576 void *p32_out = &v32_out;
577 void *p64_out = &v64_out;
579 nlIOBigEndianWriteAligned8(&p8_out, v8_in);
580 nlIOBigEndianWriteAligned16(&p16_out, v16_in);
581 nlIOBigEndianWriteAligned32(&p32_out, v32_in);
582 nlIOBigEndianWriteAligned64(&p64_out, v64_in);
584 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
585 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
586 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
587 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
589 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
590 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
591 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
592 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
593 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
595 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
596 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
597 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
598 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
599 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
602 NL_TEST_ASSERT(inSuite, false);
607 static void CheckWriteLittleAligned(nlTestSuite *inSuite, void *inContext)
609 const uint8_t v8_in = MAGIC8;
610 const uint16_t v16_in = MAGIC16;
611 const uint32_t v32_in = MAGIC32;
612 const uint64_t v64_in = MAGIC64;
617 void *p8_out = &v8_out;
618 void *p16_out = &v16_out;
619 void *p32_out = &v32_out;
620 void *p64_out = &v64_out;
622 nlIOLittleEndianWriteAligned8(&p8_out, v8_in);
623 nlIOLittleEndianWriteAligned16(&p16_out, v16_in);
624 nlIOLittleEndianWriteAligned32(&p32_out, v32_in);
625 nlIOLittleEndianWriteAligned64(&p64_out, v64_in);
627 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
628 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
629 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
630 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
632 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
633 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
634 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
635 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
636 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
638 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
639 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
640 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
641 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
642 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
645 NL_TEST_ASSERT(inSuite, false);
652 static void CheckGetBigUnaligned(nlTestSuite *inSuite, void *inContext)
654 const uint8_t v8_in = MAGIC8;
655 const uint16_t v16_in = MAGIC16;
656 const uint32_t v32_in = MAGIC32;
657 const uint64_t v64_in = MAGIC64;
673 uint8_t buffer[sizeof(uint64_t) * 2];
676 // Try an 8-bit quantity. They are aligned anywhere and unaligned
680 memcpy(p, &v8_in, sizeof(v8_in));
682 v8_out = nlIOBigEndianGetUnaligned8(p);
684 // Try 16-bit quantities.
687 memcpy(p, &v16_in, sizeof(v16_in));
689 v16_0_out = nlIOBigEndianGetUnaligned16(p);
692 memcpy(p, &v16_in, sizeof(v16_in));
694 v16_1_out = nlIOBigEndianGetUnaligned16(p);
696 // Try 32-bit quantities.
699 memcpy(p, &v32_in, sizeof(v32_in));
701 v32_0_out = nlIOBigEndianGetUnaligned32(p);
704 memcpy(p, &v32_in, sizeof(v32_in));
706 v32_1_out = nlIOBigEndianGetUnaligned32(p);
709 memcpy(p, &v32_in, sizeof(v32_in));
711 v32_2_out = nlIOBigEndianGetUnaligned32(p);
714 memcpy(p, &v32_in, sizeof(v32_in));
716 v32_3_out = nlIOBigEndianGetUnaligned32(p);
718 // Try 64-bit quantities.
721 memcpy(p, &v64_in, sizeof(v64_in));
723 v64_0_out = nlIOBigEndianGetUnaligned64(p);
726 memcpy(p, &v64_in, sizeof(v64_in));
728 v64_1_out = nlIOBigEndianGetUnaligned64(p);
731 memcpy(p, &v64_in, sizeof(v64_in));
733 v64_2_out = nlIOBigEndianGetUnaligned64(p);
736 memcpy(p, &v64_in, sizeof(v64_in));
738 v64_3_out = nlIOBigEndianGetUnaligned64(p);
741 memcpy(p, &v64_in, sizeof(v64_in));
743 v64_4_out = nlIOBigEndianGetUnaligned64(p);
746 memcpy(p, &v64_in, sizeof(v64_in));
748 v64_5_out = nlIOBigEndianGetUnaligned64(p);
751 memcpy(p, &v64_in, sizeof(v64_in));
753 v64_6_out = nlIOBigEndianGetUnaligned64(p);
756 memcpy(p, &v64_in, sizeof(v64_in));
758 v64_7_out = nlIOBigEndianGetUnaligned64(p);
760 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
761 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
762 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
763 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
764 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
765 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
766 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
767 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
768 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
769 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
770 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
771 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
772 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
773 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
774 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
775 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
777 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
778 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
779 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
780 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
781 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
782 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
783 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
784 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
785 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
786 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
787 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
788 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
789 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
790 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
791 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
792 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
795 NL_TEST_ASSERT(inSuite, false);
800 static void CheckGetLittleUnaligned(nlTestSuite *inSuite, void *inContext)
802 const uint8_t v8_in = MAGIC8;
803 const uint16_t v16_in = MAGIC16;
804 const uint32_t v32_in = MAGIC32;
805 const uint64_t v64_in = MAGIC64;
821 uint8_t buffer[sizeof(uint64_t) * 2];
824 // Try an 8-bit quantity. They are aligned anywhere and unaligned
828 memcpy(p, &v8_in, sizeof(v8_in));
830 v8_out = nlIOLittleEndianGetUnaligned8(p);
832 // Try 16-bit quantities.
835 memcpy(p, &v16_in, sizeof(v16_in));
837 v16_0_out = nlIOLittleEndianGetUnaligned16(p);
840 memcpy(p, &v16_in, sizeof(v16_in));
842 v16_1_out = nlIOLittleEndianGetUnaligned16(p);
844 // Try 32-bit quantities.
847 memcpy(p, &v32_in, sizeof(v32_in));
849 v32_0_out = nlIOLittleEndianGetUnaligned32(p);
852 memcpy(p, &v32_in, sizeof(v32_in));
854 v32_1_out = nlIOLittleEndianGetUnaligned32(p);
857 memcpy(p, &v32_in, sizeof(v32_in));
859 v32_2_out = nlIOLittleEndianGetUnaligned32(p);
862 memcpy(p, &v32_in, sizeof(v32_in));
864 v32_3_out = nlIOLittleEndianGetUnaligned32(p);
866 // Try 64-bit quantities.
869 memcpy(p, &v64_in, sizeof(v64_in));
871 v64_0_out = nlIOLittleEndianGetUnaligned64(p);
874 memcpy(p, &v64_in, sizeof(v64_in));
876 v64_1_out = nlIOLittleEndianGetUnaligned64(p);
879 memcpy(p, &v64_in, sizeof(v64_in));
881 v64_2_out = nlIOLittleEndianGetUnaligned64(p);
884 memcpy(p, &v64_in, sizeof(v64_in));
886 v64_3_out = nlIOLittleEndianGetUnaligned64(p);
889 memcpy(p, &v64_in, sizeof(v64_in));
891 v64_4_out = nlIOLittleEndianGetUnaligned64(p);
894 memcpy(p, &v64_in, sizeof(v64_in));
896 v64_5_out = nlIOLittleEndianGetUnaligned64(p);
899 memcpy(p, &v64_in, sizeof(v64_in));
901 v64_6_out = nlIOLittleEndianGetUnaligned64(p);
904 memcpy(p, &v64_in, sizeof(v64_in));
906 v64_7_out = nlIOLittleEndianGetUnaligned64(p);
908 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
909 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
910 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
911 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
912 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
913 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
914 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
915 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
916 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
917 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
918 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
919 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
920 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
921 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
922 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
923 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
925 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
926 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
927 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
928 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
929 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
930 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
931 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
932 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
933 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
934 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
935 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
936 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
937 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
938 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
939 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
940 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
943 NL_TEST_ASSERT(inSuite, false);
948 static void CheckPutBigUnaligned(nlTestSuite *inSuite, void *inContext)
950 const uint8_t v8_in = MAGIC8;
951 const uint16_t v16_in = MAGIC16;
952 const uint32_t v32_in = MAGIC32;
953 const uint64_t v64_in = MAGIC64;
969 uint8_t buffer[sizeof(uint64_t) * 2];
972 // Try an 8-bit quantity. They are aligned anywhere and unaligned
976 nlIOBigEndianPutUnaligned8(p, v8_in);
977 memcpy(&v8_out, p, sizeof(v8_in));
979 // Try 16-bit quantities.
982 nlIOBigEndianPutUnaligned16(p, v16_in);
983 memcpy(&v16_0_out, p, sizeof(v16_in));
986 nlIOBigEndianPutUnaligned16(p, v16_in);
987 memcpy(&v16_1_out, p, sizeof(v16_in));
989 // Try 32-bit quantities.
992 nlIOBigEndianPutUnaligned32(p, v32_in);
993 memcpy(&v32_0_out, p, sizeof(v32_in));
996 nlIOBigEndianPutUnaligned32(p, v32_in);
997 memcpy(&v32_1_out, p, sizeof(v32_in));
1000 nlIOBigEndianPutUnaligned32(p, v32_in);
1001 memcpy(&v32_2_out, p, sizeof(v32_in));
1004 nlIOBigEndianPutUnaligned32(p, v32_in);
1005 memcpy(&v32_3_out, p, sizeof(v32_in));
1007 // Try 64-bit quantities.
1010 nlIOBigEndianPutUnaligned64(p, v64_in);
1011 memcpy(&v64_0_out, p, sizeof(v64_in));
1014 nlIOBigEndianPutUnaligned64(p, v64_in);
1015 memcpy(&v64_1_out, p, sizeof(v64_in));
1018 nlIOBigEndianPutUnaligned64(p, v64_in);
1019 memcpy(&v64_2_out, p, sizeof(v64_in));
1022 nlIOBigEndianPutUnaligned64(p, v64_in);
1023 memcpy(&v64_3_out, p, sizeof(v64_in));
1026 nlIOBigEndianPutUnaligned64(p, v64_in);
1027 memcpy(&v64_4_out, p, sizeof(v64_in));
1030 nlIOBigEndianPutUnaligned64(p, v64_in);
1031 memcpy(&v64_5_out, p, sizeof(v64_in));
1034 nlIOBigEndianPutUnaligned64(p, v64_in);
1035 memcpy(&v64_6_out, p, sizeof(v64_in));
1038 nlIOBigEndianPutUnaligned64(p, v64_in);
1039 memcpy(&v64_7_out, p, sizeof(v64_in));
1041 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1042 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1043 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1044 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1045 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1046 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1047 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1048 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1049 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1050 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1051 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1052 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1053 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1054 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1055 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1056 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1058 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1059 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1060 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1061 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1062 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1063 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1064 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1065 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1066 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1067 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1068 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1069 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1070 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1071 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1072 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1073 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1076 NL_TEST_ASSERT(inSuite, false);
1081 static void CheckPutLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1083 const uint8_t v8_in = MAGIC8;
1084 const uint16_t v16_in = MAGIC16;
1085 const uint32_t v32_in = MAGIC32;
1086 const uint64_t v64_in = MAGIC64;
1102 uint8_t buffer[sizeof(uint64_t) * 2];
1105 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1109 nlIOLittleEndianPutUnaligned8(p, v8_in);
1110 memcpy(&v8_out, p, sizeof(v8_in));
1112 // Try 16-bit quantities.
1115 nlIOLittleEndianPutUnaligned16(p, v16_in);
1116 memcpy(&v16_0_out, p, sizeof(v16_in));
1119 nlIOLittleEndianPutUnaligned16(p, v16_in);
1120 memcpy(&v16_1_out, p, sizeof(v16_in));
1122 // Try 32-bit quantities.
1125 nlIOLittleEndianPutUnaligned32(p, v32_in);
1126 memcpy(&v32_0_out, p, sizeof(v32_in));
1129 nlIOLittleEndianPutUnaligned32(p, v32_in);
1130 memcpy(&v32_1_out, p, sizeof(v32_in));
1133 nlIOLittleEndianPutUnaligned32(p, v32_in);
1134 memcpy(&v32_2_out, p, sizeof(v32_in));
1137 nlIOLittleEndianPutUnaligned32(p, v32_in);
1138 memcpy(&v32_3_out, p, sizeof(v32_in));
1140 // Try 64-bit quantities.
1143 nlIOLittleEndianPutUnaligned64(p, v64_in);
1144 memcpy(&v64_0_out, p, sizeof(v64_in));
1147 nlIOLittleEndianPutUnaligned64(p, v64_in);
1148 memcpy(&v64_1_out, p, sizeof(v64_in));
1151 nlIOLittleEndianPutUnaligned64(p, v64_in);
1152 memcpy(&v64_2_out, p, sizeof(v64_in));
1155 nlIOLittleEndianPutUnaligned64(p, v64_in);
1156 memcpy(&v64_3_out, p, sizeof(v64_in));
1159 nlIOLittleEndianPutUnaligned64(p, v64_in);
1160 memcpy(&v64_4_out, p, sizeof(v64_in));
1163 nlIOLittleEndianPutUnaligned64(p, v64_in);
1164 memcpy(&v64_5_out, p, sizeof(v64_in));
1167 nlIOLittleEndianPutUnaligned64(p, v64_in);
1168 memcpy(&v64_6_out, p, sizeof(v64_in));
1171 nlIOLittleEndianPutUnaligned64(p, v64_in);
1172 memcpy(&v64_7_out, p, sizeof(v64_in));
1174 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1175 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1176 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1177 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1178 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1179 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1180 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1181 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1182 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1183 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1184 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1185 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1186 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1187 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1188 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1189 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1191 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1192 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1193 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1194 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1195 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1196 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1197 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1198 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1199 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1200 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1201 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1202 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1203 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1204 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1205 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1206 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1209 NL_TEST_ASSERT(inSuite, false);
1214 static void CheckReadBigUnaligned(nlTestSuite *inSuite, void *inContext)
1216 const uint8_t v8_in = MAGIC8;
1217 const uint16_t v16_in = MAGIC16;
1218 const uint32_t v32_in = MAGIC32;
1219 const uint64_t v64_in = MAGIC64;
1235 uint8_t buffer[sizeof(uint64_t) * 2];
1238 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1242 memcpy(&buffer[0], &v8_in, sizeof(v8_in));
1244 v8_out = nlIOBigEndianReadUnaligned8((const void **)&p);
1245 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_in));
1247 // Try 16-bit quantities.
1250 memcpy(&buffer[0], &v16_in, sizeof(v16_in));
1252 v16_0_out = nlIOBigEndianReadUnaligned16((const void **)&p);
1253 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_in));
1256 memcpy(&buffer[1], &v16_in, sizeof(v16_in));
1258 v16_1_out = nlIOBigEndianReadUnaligned16((const void **)&p);
1259 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_in));
1261 // Try 32-bit quantities.
1264 memcpy(&buffer[0], &v32_in, sizeof(v32_in));
1266 v32_0_out = nlIOBigEndianReadUnaligned32((const void **)&p);
1267 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_in));
1270 memcpy(&buffer[1], &v32_in, sizeof(v32_in));
1272 v32_1_out = nlIOBigEndianReadUnaligned32((const void **)&p);
1273 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_in));
1276 memcpy(&buffer[2], &v32_in, sizeof(v32_in));
1278 v32_2_out = nlIOBigEndianReadUnaligned32((const void **)&p);
1279 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_in));
1282 memcpy(&buffer[3], &v32_in, sizeof(v32_in));
1284 v32_3_out = nlIOBigEndianReadUnaligned32((const void **)&p);
1285 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_in));
1287 // Try 64-bit quantities.
1290 memcpy(&buffer[0], &v64_in, sizeof(v64_in));
1292 v64_0_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1293 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_in));
1296 memcpy(&buffer[1], &v64_in, sizeof(v64_in));
1298 v64_1_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1299 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_in));
1302 memcpy(&buffer[2], &v64_in, sizeof(v64_in));
1304 v64_2_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1305 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_in));
1308 memcpy(&buffer[3], &v64_in, sizeof(v64_in));
1310 v64_3_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1311 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_in));
1314 memcpy(&buffer[4], &v64_in, sizeof(v64_in));
1316 v64_4_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1317 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_in));
1320 memcpy(&buffer[5], &v64_in, sizeof(v64_in));
1322 v64_5_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1323 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_in));
1326 memcpy(&buffer[6], &v64_in, sizeof(v64_in));
1328 v64_6_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1329 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_in));
1332 memcpy(&buffer[7], &v64_in, sizeof(v64_in));
1334 v64_7_out = nlIOBigEndianReadUnaligned64((const void **)&p);
1335 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_in));
1337 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1338 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1339 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1340 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1341 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1342 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1343 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1344 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1345 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1346 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1347 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1348 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1349 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1350 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1351 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1352 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1354 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1355 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1356 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1357 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1358 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1359 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1360 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1361 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1362 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1363 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1364 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1365 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1366 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1367 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1368 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1369 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1372 NL_TEST_ASSERT(inSuite, false);
1377 static void CheckReadLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1379 const uint8_t v8_in = MAGIC8;
1380 const uint16_t v16_in = MAGIC16;
1381 const uint32_t v32_in = MAGIC32;
1382 const uint64_t v64_in = MAGIC64;
1398 uint8_t buffer[sizeof(uint64_t) * 2];
1401 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1405 memcpy(&buffer[0], &v8_in, sizeof(v8_in));
1407 v8_out = nlIOLittleEndianReadUnaligned8((const void **)&p);
1408 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_in));
1410 // Try 16-bit quantities.
1413 memcpy(&buffer[0], &v16_in, sizeof(v16_in));
1415 v16_0_out = nlIOLittleEndianReadUnaligned16((const void **)&p);
1416 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_in));
1419 memcpy(&buffer[1], &v16_in, sizeof(v16_in));
1421 v16_1_out = nlIOLittleEndianReadUnaligned16((const void **)&p);
1422 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_in));
1424 // Try 32-bit quantities.
1427 memcpy(&buffer[0], &v32_in, sizeof(v32_in));
1429 v32_0_out = nlIOLittleEndianReadUnaligned32((const void **)&p);
1430 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_in));
1433 memcpy(&buffer[1], &v32_in, sizeof(v32_in));
1435 v32_1_out = nlIOLittleEndianReadUnaligned32((const void **)&p);
1436 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_in));
1439 memcpy(&buffer[2], &v32_in, sizeof(v32_in));
1441 v32_2_out = nlIOLittleEndianReadUnaligned32((const void **)&p);
1442 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_in));
1445 memcpy(&buffer[3], &v32_in, sizeof(v32_in));
1447 v32_3_out = nlIOLittleEndianReadUnaligned32((const void **)&p);
1448 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_in));
1450 // Try 64-bit quantities.
1453 memcpy(&buffer[0], &v64_in, sizeof(v64_in));
1455 v64_0_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1456 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_in));
1459 memcpy(&buffer[1], &v64_in, sizeof(v64_in));
1461 v64_1_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1462 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_in));
1465 memcpy(&buffer[2], &v64_in, sizeof(v64_in));
1467 v64_2_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1468 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_in));
1471 memcpy(&buffer[3], &v64_in, sizeof(v64_in));
1473 v64_3_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1474 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_in));
1477 memcpy(&buffer[4], &v64_in, sizeof(v64_in));
1479 v64_4_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1480 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_in));
1483 memcpy(&buffer[5], &v64_in, sizeof(v64_in));
1485 v64_5_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1486 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_in));
1489 memcpy(&buffer[6], &v64_in, sizeof(v64_in));
1491 v64_6_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1492 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_in));
1495 memcpy(&buffer[7], &v64_in, sizeof(v64_in));
1497 v64_7_out = nlIOLittleEndianReadUnaligned64((const void **)&p);
1498 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_in));
1500 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1501 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1502 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1503 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1504 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1505 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1506 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1507 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1508 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1509 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1510 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1511 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1512 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1513 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1514 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1515 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1517 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1518 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1519 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1520 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1521 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1522 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1523 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1524 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1525 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1526 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1527 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1528 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1529 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1530 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1531 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1532 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1535 NL_TEST_ASSERT(inSuite, false);
1540 static void CheckWriteBigUnaligned(nlTestSuite *inSuite, void *inContext)
1542 const uint8_t v8_in = MAGIC8;
1543 const uint16_t v16_in = MAGIC16;
1544 const uint32_t v32_in = MAGIC32;
1545 const uint64_t v64_in = MAGIC64;
1561 uint8_t buffer[sizeof(uint64_t) * 2];
1564 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1568 nlIOBigEndianWriteUnaligned8(&p, v8_in);
1569 memcpy(&v8_out, &buffer[0], sizeof(v8_in));
1570 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_out));
1572 // Try 16-bit quantities.
1575 nlIOBigEndianWriteUnaligned16(&p, v16_in);
1576 memcpy(&v16_0_out, &buffer[0], sizeof(v16_in));
1577 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_0_out));
1580 nlIOBigEndianWriteUnaligned16(&p, v16_in);
1581 memcpy(&v16_1_out, &buffer[1], sizeof(v16_in));
1582 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_1_out));
1584 // Try 32-bit quantities.
1587 nlIOBigEndianWriteUnaligned32(&p, v32_in);
1588 memcpy(&v32_0_out, &buffer[0], sizeof(v32_in));
1589 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_0_out));
1592 nlIOBigEndianWriteUnaligned32(&p, v32_in);
1593 memcpy(&v32_1_out, &buffer[1], sizeof(v32_in));
1594 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_1_out));
1597 nlIOBigEndianWriteUnaligned32(&p, v32_in);
1598 memcpy(&v32_2_out, &buffer[2], sizeof(v32_in));
1599 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_2_out));
1602 nlIOBigEndianWriteUnaligned32(&p, v32_in);
1603 memcpy(&v32_3_out, &buffer[3], sizeof(v32_in));
1604 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_3_out));
1606 // Try 64-bit quantities.
1609 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1610 memcpy(&v64_0_out, &buffer[0], sizeof(v64_in));
1611 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_0_out));
1614 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1615 memcpy(&v64_1_out, &buffer[1], sizeof(v64_in));
1616 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_1_out));
1619 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1620 memcpy(&v64_2_out, &buffer[2], sizeof(v64_in));
1621 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_2_out));
1624 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1625 memcpy(&v64_3_out, &buffer[3], sizeof(v64_in));
1626 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_3_out));
1629 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1630 memcpy(&v64_4_out, &buffer[4], sizeof(v64_in));
1631 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_4_out));
1634 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1635 memcpy(&v64_5_out, &buffer[5], sizeof(v64_in));
1636 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_5_out));
1639 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1640 memcpy(&v64_6_out, &buffer[6], sizeof(v64_in));
1641 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_6_out));
1644 nlIOBigEndianWriteUnaligned64(&p, v64_in);
1645 memcpy(&v64_7_out, &buffer[7], sizeof(v64_in));
1646 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_7_out));
1648 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1649 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1650 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1651 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1652 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1653 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1654 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1655 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1656 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1657 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1658 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1659 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1660 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1661 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1662 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1663 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1665 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1666 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1667 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1668 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1669 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1670 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1671 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1672 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1673 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1674 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1675 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1676 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1677 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1678 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1679 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1680 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1683 NL_TEST_ASSERT(inSuite, false);
1688 static void CheckWriteLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1690 const uint8_t v8_in = MAGIC8;
1691 const uint16_t v16_in = MAGIC16;
1692 const uint32_t v32_in = MAGIC32;
1693 const uint64_t v64_in = MAGIC64;
1709 uint8_t buffer[sizeof(uint64_t) * 2];
1712 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1716 nlIOLittleEndianWriteUnaligned8(&p, v8_in);
1717 memcpy(&v8_out, &buffer[0], sizeof(v8_in));
1718 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_out));
1720 // Try 16-bit quantities.
1723 nlIOLittleEndianWriteUnaligned16(&p, v16_in);
1724 memcpy(&v16_0_out, &buffer[0], sizeof(v16_in));
1725 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_0_out));
1728 nlIOLittleEndianWriteUnaligned16(&p, v16_in);
1729 memcpy(&v16_1_out, &buffer[1], sizeof(v16_in));
1730 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_1_out));
1732 // Try 32-bit quantities.
1735 nlIOLittleEndianWriteUnaligned32(&p, v32_in);
1736 memcpy(&v32_0_out, &buffer[0], sizeof(v32_in));
1737 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_0_out));
1740 nlIOLittleEndianWriteUnaligned32(&p, v32_in);
1741 memcpy(&v32_1_out, &buffer[1], sizeof(v32_in));
1742 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_1_out));
1745 nlIOLittleEndianWriteUnaligned32(&p, v32_in);
1746 memcpy(&v32_2_out, &buffer[2], sizeof(v32_in));
1747 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_2_out));
1750 nlIOLittleEndianWriteUnaligned32(&p, v32_in);
1751 memcpy(&v32_3_out, &buffer[3], sizeof(v32_in));
1752 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_3_out));
1754 // Try 64-bit quantities.
1757 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1758 memcpy(&v64_0_out, &buffer[0], sizeof(v64_in));
1759 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_0_out));
1762 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1763 memcpy(&v64_1_out, &buffer[1], sizeof(v64_in));
1764 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_1_out));
1767 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1768 memcpy(&v64_2_out, &buffer[2], sizeof(v64_in));
1769 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_2_out));
1772 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1773 memcpy(&v64_3_out, &buffer[3], sizeof(v64_in));
1774 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_3_out));
1777 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1778 memcpy(&v64_4_out, &buffer[4], sizeof(v64_in));
1779 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_4_out));
1782 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1783 memcpy(&v64_5_out, &buffer[5], sizeof(v64_in));
1784 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_5_out));
1787 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1788 memcpy(&v64_6_out, &buffer[6], sizeof(v64_in));
1789 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_6_out));
1792 nlIOLittleEndianWriteUnaligned64(&p, v64_in);
1793 memcpy(&v64_7_out, &buffer[7], sizeof(v64_in));
1794 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_7_out));
1796 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1797 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1798 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1799 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1800 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1801 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1802 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1803 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1804 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1805 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1806 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1807 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1808 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1809 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1810 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1811 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1813 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1814 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1815 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1816 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1817 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1818 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1819 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1820 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1821 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1822 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1823 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1824 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1825 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1826 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1827 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1828 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1831 NL_TEST_ASSERT(inSuite, false);
1836 static const nlTest sTests[] = {
1837 NL_TEST_DEF("get big", CheckGetBig),
1838 NL_TEST_DEF("get little", CheckGetLittle),
1839 NL_TEST_DEF("put big", CheckPutBig),
1840 NL_TEST_DEF("put little", CheckPutLittle),
1841 NL_TEST_DEF("read big", CheckReadBig),
1842 NL_TEST_DEF("read little", CheckReadLittle),
1843 NL_TEST_DEF("write big", CheckWriteBig),
1844 NL_TEST_DEF("write little", CheckWriteLittle),
1845 NL_TEST_DEF("get big aligned", CheckGetBigAligned),
1846 NL_TEST_DEF("get little aligned", CheckGetLittleAligned),
1847 NL_TEST_DEF("put big aligned", CheckPutBigAligned),
1848 NL_TEST_DEF("put little aligned", CheckPutLittleAligned),
1849 NL_TEST_DEF("read big aligned", CheckReadBigAligned),
1850 NL_TEST_DEF("read little aligned", CheckReadLittleAligned),
1851 NL_TEST_DEF("write big aligned", CheckWriteBigAligned),
1852 NL_TEST_DEF("write little aligned", CheckWriteLittleAligned),
1853 NL_TEST_DEF("get big unaligned", CheckGetBigUnaligned),
1854 NL_TEST_DEF("get little unaligned", CheckGetLittleUnaligned),
1855 NL_TEST_DEF("put big unaligned", CheckPutBigUnaligned),
1856 NL_TEST_DEF("put little unaligned", CheckPutLittleUnaligned),
1857 NL_TEST_DEF("read big unaligned", CheckReadBigUnaligned),
1858 NL_TEST_DEF("read little unaligned", CheckReadLittleUnaligned),
1859 NL_TEST_DEF("write big unaligned", CheckWriteBigUnaligned),
1860 NL_TEST_DEF("write little unaligned", CheckWriteLittleUnaligned),
1867 nlTestSuite theSuite = {
1872 nl_test_set_output_style(OUTPUT_CSV);
1874 nlTestRunner(&theSuite, NULL);
1876 return nlTestRunnerStats(&theSuite);