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.hpp>
30 #include <nlunit-test.h>
32 #include "nlio-byteorder-test.h"
35 using namespace nl::ByteOrder;
36 using namespace nl::IO;
38 static void CheckGetBig(nlTestSuite *inSuite, void *inContext)
40 const uint8_t v8_in = MAGIC8;
41 const uint16_t v16_in = MAGIC16;
42 const uint32_t v32_in = MAGIC32;
43 const uint64_t v64_in = MAGIC64;
49 v8_out = BigEndian::Get8(&v8_in);
50 v16_out = BigEndian::Get16(&v16_in);
51 v32_out = BigEndian::Get32(&v32_in);
52 v64_out = BigEndian::Get64(&v64_in);
54 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
55 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
56 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
57 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
58 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
60 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
61 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
62 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
63 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
64 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
67 NL_TEST_ASSERT(inSuite, false);
72 static void CheckGetLittle(nlTestSuite *inSuite, void *inContext)
74 const uint8_t v8_in = MAGIC8;
75 const uint16_t v16_in = MAGIC16;
76 const uint32_t v32_in = MAGIC32;
77 const uint64_t v64_in = MAGIC64;
83 v8_out = LittleEndian::Get8(&v8_in);
84 v16_out = LittleEndian::Get16(&v16_in);
85 v32_out = LittleEndian::Get32(&v32_in);
86 v64_out = LittleEndian::Get64(&v64_in);
88 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
89 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
90 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
91 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
92 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
94 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
95 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
96 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
97 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
98 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
101 NL_TEST_ASSERT(inSuite, false);
106 static void CheckPutBig(nlTestSuite *inSuite, void *inContext)
108 const uint8_t v8_in = MAGIC8;
109 const uint16_t v16_in = MAGIC16;
110 const uint32_t v32_in = MAGIC32;
111 const uint64_t v64_in = MAGIC64;
117 BigEndian::Put8(&v8_out, v8_in);
118 BigEndian::Put16(&v16_out, v16_in);
119 BigEndian::Put32(&v32_out, v32_in);
120 BigEndian::Put64(&v64_out, v64_in);
122 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
123 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
124 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
125 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
126 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
128 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
129 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
130 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
131 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
132 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
135 NL_TEST_ASSERT(inSuite, false);
140 static void CheckPutLittle(nlTestSuite *inSuite, void *inContext)
142 const uint8_t v8_in = MAGIC8;
143 const uint16_t v16_in = MAGIC16;
144 const uint32_t v32_in = MAGIC32;
145 const uint64_t v64_in = MAGIC64;
151 LittleEndian::Put8(&v8_out, v8_in);
152 LittleEndian::Put16(&v16_out, v16_in);
153 LittleEndian::Put32(&v32_out, v32_in);
154 LittleEndian::Put64(&v64_out, v64_in);
156 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
157 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
158 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
159 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
160 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
162 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
163 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
164 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
165 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
166 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
169 NL_TEST_ASSERT(inSuite, false);
174 static void CheckReadBig(nlTestSuite *inSuite, void *inContext)
176 const uint8_t v8_in = MAGIC8;
177 const uint16_t v16_in = MAGIC16;
178 const uint32_t v32_in = MAGIC32;
179 const uint64_t v64_in = MAGIC64;
180 const void *p8_in = &v8_in;
181 const void *p16_in = &v16_in;
182 const void *p32_in = &v32_in;
183 const void *p64_in = &v64_in;
189 v8_out = BigEndian::Read8(p8_in);
190 v16_out = BigEndian::Read16(p16_in);
191 v32_out = BigEndian::Read32(p32_in);
192 v64_out = BigEndian::Read64(p64_in);
194 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
195 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
196 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
197 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
199 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
200 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
201 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
202 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
203 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
205 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
206 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
207 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
208 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
209 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
212 NL_TEST_ASSERT(inSuite, false);
217 static void CheckReadLittle(nlTestSuite *inSuite, void *inContext)
219 const uint8_t v8_in = MAGIC8;
220 const uint16_t v16_in = MAGIC16;
221 const uint32_t v32_in = MAGIC32;
222 const uint64_t v64_in = MAGIC64;
223 const void *p8_in = &v8_in;
224 const void *p16_in = &v16_in;
225 const void *p32_in = &v32_in;
226 const void *p64_in = &v64_in;
232 v8_out = LittleEndian::Read8(p8_in);
233 v16_out = LittleEndian::Read16(p16_in);
234 v32_out = LittleEndian::Read32(p32_in);
235 v64_out = LittleEndian::Read64(p64_in);
237 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
238 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
239 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
240 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
242 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
243 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
244 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
245 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
246 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
248 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
249 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
250 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
251 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
252 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
255 NL_TEST_ASSERT(inSuite, false);
260 static void CheckWriteBig(nlTestSuite *inSuite, void *inContext)
262 const uint8_t v8_in = MAGIC8;
263 const uint16_t v16_in = MAGIC16;
264 const uint32_t v32_in = MAGIC32;
265 const uint64_t v64_in = MAGIC64;
270 void *p8_out = &v8_out;
271 void *p16_out = &v16_out;
272 void *p32_out = &v32_out;
273 void *p64_out = &v64_out;
275 BigEndian::Write8(p8_out, v8_in);
276 BigEndian::Write16(p16_out, v16_in);
277 BigEndian::Write32(p32_out, v32_in);
278 BigEndian::Write64(p64_out, v64_in);
280 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
281 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
282 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
283 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
285 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
286 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
287 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
288 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
289 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
291 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
292 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
293 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
294 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
295 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
298 NL_TEST_ASSERT(inSuite, false);
303 static void CheckWriteLittle(nlTestSuite *inSuite, void *inContext)
305 const uint8_t v8_in = MAGIC8;
306 const uint16_t v16_in = MAGIC16;
307 const uint32_t v32_in = MAGIC32;
308 const uint64_t v64_in = MAGIC64;
313 void *p8_out = &v8_out;
314 void *p16_out = &v16_out;
315 void *p32_out = &v32_out;
316 void *p64_out = &v64_out;
318 LittleEndian::Write8(p8_out, v8_in);
319 LittleEndian::Write16(p16_out, v16_in);
320 LittleEndian::Write32(p32_out, v32_in);
321 LittleEndian::Write64(p64_out, v64_in);
323 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
324 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
325 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
326 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
328 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
329 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
330 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
331 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
332 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
334 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
335 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
336 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
337 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
338 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
341 NL_TEST_ASSERT(inSuite, false);
346 static void CheckGetBigAligned(nlTestSuite *inSuite, void *inContext)
348 const uint8_t v8_in = MAGIC8;
349 const uint16_t v16_in = MAGIC16;
350 const uint32_t v32_in = MAGIC32;
351 const uint64_t v64_in = MAGIC64;
357 v8_out = BigEndian::GetAligned8(&v8_in);
358 v16_out = BigEndian::GetAligned16(&v16_in);
359 v32_out = BigEndian::GetAligned32(&v32_in);
360 v64_out = BigEndian::GetAligned64(&v64_in);
362 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
363 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
364 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
365 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
366 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
368 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
369 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
370 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
371 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
372 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
375 NL_TEST_ASSERT(inSuite, false);
380 static void CheckGetLittleAligned(nlTestSuite *inSuite, void *inContext)
382 const uint8_t v8_in = MAGIC8;
383 const uint16_t v16_in = MAGIC16;
384 const uint32_t v32_in = MAGIC32;
385 const uint64_t v64_in = MAGIC64;
391 v8_out = LittleEndian::GetAligned8(&v8_in);
392 v16_out = LittleEndian::GetAligned16(&v16_in);
393 v32_out = LittleEndian::GetAligned32(&v32_in);
394 v64_out = LittleEndian::GetAligned64(&v64_in);
396 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
397 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
398 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
399 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
400 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
402 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
403 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
404 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
405 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
406 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
409 NL_TEST_ASSERT(inSuite, false);
414 static void CheckPutBigAligned(nlTestSuite *inSuite, void *inContext)
416 const uint8_t v8_in = MAGIC8;
417 const uint16_t v16_in = MAGIC16;
418 const uint32_t v32_in = MAGIC32;
419 const uint64_t v64_in = MAGIC64;
425 BigEndian::PutAligned8(&v8_out, v8_in);
426 BigEndian::PutAligned16(&v16_out, v16_in);
427 BigEndian::PutAligned32(&v32_out, v32_in);
428 BigEndian::PutAligned64(&v64_out, v64_in);
430 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
431 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
432 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
433 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
434 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
436 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
437 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
438 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
439 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
440 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
443 NL_TEST_ASSERT(inSuite, false);
448 static void CheckPutLittleAligned(nlTestSuite *inSuite, void *inContext)
450 const uint8_t v8_in = MAGIC8;
451 const uint16_t v16_in = MAGIC16;
452 const uint32_t v32_in = MAGIC32;
453 const uint64_t v64_in = MAGIC64;
459 LittleEndian::PutAligned8(&v8_out, v8_in);
460 LittleEndian::PutAligned16(&v16_out, v16_in);
461 LittleEndian::PutAligned32(&v32_out, v32_in);
462 LittleEndian::PutAligned64(&v64_out, v64_in);
464 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
465 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
466 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
467 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
468 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
470 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
471 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
472 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
473 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
474 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
477 NL_TEST_ASSERT(inSuite, false);
482 static void CheckReadBigAligned(nlTestSuite *inSuite, void *inContext)
484 const uint8_t v8_in = MAGIC8;
485 const uint16_t v16_in = MAGIC16;
486 const uint32_t v32_in = MAGIC32;
487 const uint64_t v64_in = MAGIC64;
488 const void *p8_in = &v8_in;
489 const void *p16_in = &v16_in;
490 const void *p32_in = &v32_in;
491 const void *p64_in = &v64_in;
497 v8_out = BigEndian::ReadAligned8(p8_in);
498 v16_out = BigEndian::ReadAligned16(p16_in);
499 v32_out = BigEndian::ReadAligned32(p32_in);
500 v64_out = BigEndian::ReadAligned64(p64_in);
502 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
503 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
504 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
505 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
507 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
508 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
509 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
510 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
511 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
513 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
514 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
515 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
516 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
517 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
520 NL_TEST_ASSERT(inSuite, false);
525 static void CheckReadLittleAligned(nlTestSuite *inSuite, void *inContext)
527 const uint8_t v8_in = MAGIC8;
528 const uint16_t v16_in = MAGIC16;
529 const uint32_t v32_in = MAGIC32;
530 const uint64_t v64_in = MAGIC64;
531 const void *p8_in = &v8_in;
532 const void *p16_in = &v16_in;
533 const void *p32_in = &v32_in;
534 const void *p64_in = &v64_in;
540 v8_out = LittleEndian::ReadAligned8(p8_in);
541 v16_out = LittleEndian::ReadAligned16(p16_in);
542 v32_out = LittleEndian::ReadAligned32(p32_in);
543 v64_out = LittleEndian::ReadAligned64(p64_in);
545 NL_TEST_ASSERT(inSuite, p8_in == (&v8_in + 1));
546 NL_TEST_ASSERT(inSuite, p16_in == (&v16_in + 1));
547 NL_TEST_ASSERT(inSuite, p32_in == (&v32_in + 1));
548 NL_TEST_ASSERT(inSuite, p64_in == (&v64_in + 1));
550 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
551 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
552 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
553 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
554 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
556 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
557 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
558 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
559 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
560 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
563 NL_TEST_ASSERT(inSuite, false);
568 static void CheckWriteBigAligned(nlTestSuite *inSuite, void *inContext)
570 const uint8_t v8_in = MAGIC8;
571 const uint16_t v16_in = MAGIC16;
572 const uint32_t v32_in = MAGIC32;
573 const uint64_t v64_in = MAGIC64;
578 void *p8_out = &v8_out;
579 void *p16_out = &v16_out;
580 void *p32_out = &v32_out;
581 void *p64_out = &v64_out;
583 BigEndian::WriteAligned8(p8_out, v8_in);
584 BigEndian::WriteAligned16(p16_out, v16_in);
585 BigEndian::WriteAligned32(p32_out, v32_in);
586 BigEndian::WriteAligned64(p64_out, v64_in);
588 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
589 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
590 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
591 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
593 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
594 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
595 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
596 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
597 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
599 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
600 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
601 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
602 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
603 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
606 NL_TEST_ASSERT(inSuite, false);
611 static void CheckWriteLittleAligned(nlTestSuite *inSuite, void *inContext)
613 const uint8_t v8_in = MAGIC8;
614 const uint16_t v16_in = MAGIC16;
615 const uint32_t v32_in = MAGIC32;
616 const uint64_t v64_in = MAGIC64;
621 void *p8_out = &v8_out;
622 void *p16_out = &v16_out;
623 void *p32_out = &v32_out;
624 void *p64_out = &v64_out;
626 LittleEndian::WriteAligned8(p8_out, v8_in);
627 LittleEndian::WriteAligned16(p16_out, v16_in);
628 LittleEndian::WriteAligned32(p32_out, v32_in);
629 LittleEndian::WriteAligned64(p64_out, v64_in);
631 NL_TEST_ASSERT(inSuite, p8_out == (&v8_out + 1));
632 NL_TEST_ASSERT(inSuite, p16_out == (&v16_out + 1));
633 NL_TEST_ASSERT(inSuite, p32_out == (&v32_out + 1));
634 NL_TEST_ASSERT(inSuite, p64_out == (&v64_out + 1));
636 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
637 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
638 NL_TEST_ASSERT(inSuite, v16_out == MAGIC16);
639 NL_TEST_ASSERT(inSuite, v32_out == MAGIC32);
640 NL_TEST_ASSERT(inSuite, v64_out == MAGIC64);
642 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
643 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
644 NL_TEST_ASSERT(inSuite, v16_out == MAGIC_SWAP16);
645 NL_TEST_ASSERT(inSuite, v32_out == MAGIC_SWAP32);
646 NL_TEST_ASSERT(inSuite, v64_out == MAGIC_SWAP64);
649 NL_TEST_ASSERT(inSuite, false);
656 static void CheckGetBigUnaligned(nlTestSuite *inSuite, void *inContext)
658 const uint8_t v8_in = MAGIC8;
659 const uint16_t v16_in = MAGIC16;
660 const uint32_t v32_in = MAGIC32;
661 const uint64_t v64_in = MAGIC64;
677 uint8_t buffer[sizeof(uint64_t) * 2];
680 // Try an 8-bit quantity. They are aligned anywhere and unaligned
684 memcpy(p, &v8_in, sizeof(v8_in));
686 v8_out = BigEndian::GetUnaligned8(p);
688 // Try 16-bit quantities.
691 memcpy(p, &v16_in, sizeof(v16_in));
693 v16_0_out = BigEndian::GetUnaligned16(p);
696 memcpy(p, &v16_in, sizeof(v16_in));
698 v16_1_out = BigEndian::GetUnaligned16(p);
700 // Try 32-bit quantities.
703 memcpy(p, &v32_in, sizeof(v32_in));
705 v32_0_out = BigEndian::GetUnaligned32(p);
708 memcpy(p, &v32_in, sizeof(v32_in));
710 v32_1_out = BigEndian::GetUnaligned32(p);
713 memcpy(p, &v32_in, sizeof(v32_in));
715 v32_2_out = BigEndian::GetUnaligned32(p);
718 memcpy(p, &v32_in, sizeof(v32_in));
720 v32_3_out = BigEndian::GetUnaligned32(p);
722 // Try 64-bit quantities.
725 memcpy(p, &v64_in, sizeof(v64_in));
727 v64_0_out = BigEndian::GetUnaligned64(p);
730 memcpy(p, &v64_in, sizeof(v64_in));
732 v64_1_out = BigEndian::GetUnaligned64(p);
735 memcpy(p, &v64_in, sizeof(v64_in));
737 v64_2_out = BigEndian::GetUnaligned64(p);
740 memcpy(p, &v64_in, sizeof(v64_in));
742 v64_3_out = BigEndian::GetUnaligned64(p);
745 memcpy(p, &v64_in, sizeof(v64_in));
747 v64_4_out = BigEndian::GetUnaligned64(p);
750 memcpy(p, &v64_in, sizeof(v64_in));
752 v64_5_out = BigEndian::GetUnaligned64(p);
755 memcpy(p, &v64_in, sizeof(v64_in));
757 v64_6_out = BigEndian::GetUnaligned64(p);
760 memcpy(p, &v64_in, sizeof(v64_in));
762 v64_7_out = BigEndian::GetUnaligned64(p);
764 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
765 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
766 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
767 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
768 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
769 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
770 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
771 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
772 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
773 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
774 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
775 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
776 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
777 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
778 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
779 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
781 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
782 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
783 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
784 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
785 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
786 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
787 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
788 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
789 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
790 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
791 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
792 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
793 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
794 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
795 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
796 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
799 NL_TEST_ASSERT(inSuite, false);
804 static void CheckGetLittleUnaligned(nlTestSuite *inSuite, void *inContext)
806 const uint8_t v8_in = MAGIC8;
807 const uint16_t v16_in = MAGIC16;
808 const uint32_t v32_in = MAGIC32;
809 const uint64_t v64_in = MAGIC64;
825 uint8_t buffer[sizeof(uint64_t) * 2];
828 // Try an 8-bit quantity. They are aligned anywhere and unaligned
832 memcpy(p, &v8_in, sizeof(v8_in));
834 v8_out = LittleEndian::GetUnaligned8(p);
836 // Try 16-bit quantities.
839 memcpy(p, &v16_in, sizeof(v16_in));
841 v16_0_out = LittleEndian::GetUnaligned16(p);
844 memcpy(p, &v16_in, sizeof(v16_in));
846 v16_1_out = LittleEndian::GetUnaligned16(p);
848 // Try 32-bit quantities.
851 memcpy(p, &v32_in, sizeof(v32_in));
853 v32_0_out = LittleEndian::GetUnaligned32(p);
856 memcpy(p, &v32_in, sizeof(v32_in));
858 v32_1_out = LittleEndian::GetUnaligned32(p);
861 memcpy(p, &v32_in, sizeof(v32_in));
863 v32_2_out = LittleEndian::GetUnaligned32(p);
866 memcpy(p, &v32_in, sizeof(v32_in));
868 v32_3_out = LittleEndian::GetUnaligned32(p);
870 // Try 64-bit quantities.
873 memcpy(p, &v64_in, sizeof(v64_in));
875 v64_0_out = LittleEndian::GetUnaligned64(p);
878 memcpy(p, &v64_in, sizeof(v64_in));
880 v64_1_out = LittleEndian::GetUnaligned64(p);
883 memcpy(p, &v64_in, sizeof(v64_in));
885 v64_2_out = LittleEndian::GetUnaligned64(p);
888 memcpy(p, &v64_in, sizeof(v64_in));
890 v64_3_out = LittleEndian::GetUnaligned64(p);
893 memcpy(p, &v64_in, sizeof(v64_in));
895 v64_4_out = LittleEndian::GetUnaligned64(p);
898 memcpy(p, &v64_in, sizeof(v64_in));
900 v64_5_out = LittleEndian::GetUnaligned64(p);
903 memcpy(p, &v64_in, sizeof(v64_in));
905 v64_6_out = LittleEndian::GetUnaligned64(p);
908 memcpy(p, &v64_in, sizeof(v64_in));
910 v64_7_out = LittleEndian::GetUnaligned64(p);
912 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
913 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
914 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
915 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
916 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
917 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
918 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
919 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
920 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
921 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
922 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
923 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
924 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
925 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
926 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
927 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
929 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
930 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
931 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
932 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
933 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
934 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
935 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
936 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
937 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
938 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
939 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
940 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
941 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
942 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
943 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
944 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
947 NL_TEST_ASSERT(inSuite, false);
952 static void CheckPutBigUnaligned(nlTestSuite *inSuite, void *inContext)
954 const uint8_t v8_in = MAGIC8;
955 const uint16_t v16_in = MAGIC16;
956 const uint32_t v32_in = MAGIC32;
957 const uint64_t v64_in = MAGIC64;
973 uint8_t buffer[sizeof(uint64_t) * 2];
976 // Try an 8-bit quantity. They are aligned anywhere and unaligned
980 BigEndian::PutUnaligned8(p, v8_in);
981 memcpy(&v8_out, p, sizeof(v8_in));
983 // Try 16-bit quantities.
986 BigEndian::PutUnaligned16(p, v16_in);
987 memcpy(&v16_0_out, p, sizeof(v16_in));
990 BigEndian::PutUnaligned16(p, v16_in);
991 memcpy(&v16_1_out, p, sizeof(v16_in));
993 // Try 32-bit quantities.
996 BigEndian::PutUnaligned32(p, v32_in);
997 memcpy(&v32_0_out, p, sizeof(v32_in));
1000 BigEndian::PutUnaligned32(p, v32_in);
1001 memcpy(&v32_1_out, p, sizeof(v32_in));
1004 BigEndian::PutUnaligned32(p, v32_in);
1005 memcpy(&v32_2_out, p, sizeof(v32_in));
1008 BigEndian::PutUnaligned32(p, v32_in);
1009 memcpy(&v32_3_out, p, sizeof(v32_in));
1011 // Try 64-bit quantities.
1014 BigEndian::PutUnaligned64(p, v64_in);
1015 memcpy(&v64_0_out, p, sizeof(v64_in));
1018 BigEndian::PutUnaligned64(p, v64_in);
1019 memcpy(&v64_1_out, p, sizeof(v64_in));
1022 BigEndian::PutUnaligned64(p, v64_in);
1023 memcpy(&v64_2_out, p, sizeof(v64_in));
1026 BigEndian::PutUnaligned64(p, v64_in);
1027 memcpy(&v64_3_out, p, sizeof(v64_in));
1030 BigEndian::PutUnaligned64(p, v64_in);
1031 memcpy(&v64_4_out, p, sizeof(v64_in));
1034 BigEndian::PutUnaligned64(p, v64_in);
1035 memcpy(&v64_5_out, p, sizeof(v64_in));
1038 BigEndian::PutUnaligned64(p, v64_in);
1039 memcpy(&v64_6_out, p, sizeof(v64_in));
1042 BigEndian::PutUnaligned64(p, v64_in);
1043 memcpy(&v64_7_out, p, sizeof(v64_in));
1045 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1046 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1047 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1048 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1049 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1050 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1051 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1052 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1053 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1054 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1055 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1056 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1057 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1058 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1059 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1060 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1062 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1063 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1064 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1065 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1066 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1067 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1068 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1069 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1070 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1071 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1072 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1073 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1074 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1075 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1076 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1077 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1080 NL_TEST_ASSERT(inSuite, false);
1085 static void CheckPutLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1087 const uint8_t v8_in = MAGIC8;
1088 const uint16_t v16_in = MAGIC16;
1089 const uint32_t v32_in = MAGIC32;
1090 const uint64_t v64_in = MAGIC64;
1106 uint8_t buffer[sizeof(uint64_t) * 2];
1109 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1113 LittleEndian::PutUnaligned8(p, v8_in);
1114 memcpy(&v8_out, p, sizeof(v8_in));
1116 // Try 16-bit quantities.
1119 LittleEndian::PutUnaligned16(p, v16_in);
1120 memcpy(&v16_0_out, p, sizeof(v16_in));
1123 LittleEndian::PutUnaligned16(p, v16_in);
1124 memcpy(&v16_1_out, p, sizeof(v16_in));
1126 // Try 32-bit quantities.
1129 LittleEndian::PutUnaligned32(p, v32_in);
1130 memcpy(&v32_0_out, p, sizeof(v32_in));
1133 LittleEndian::PutUnaligned32(p, v32_in);
1134 memcpy(&v32_1_out, p, sizeof(v32_in));
1137 LittleEndian::PutUnaligned32(p, v32_in);
1138 memcpy(&v32_2_out, p, sizeof(v32_in));
1141 LittleEndian::PutUnaligned32(p, v32_in);
1142 memcpy(&v32_3_out, p, sizeof(v32_in));
1144 // Try 64-bit quantities.
1147 LittleEndian::PutUnaligned64(p, v64_in);
1148 memcpy(&v64_0_out, p, sizeof(v64_in));
1151 LittleEndian::PutUnaligned64(p, v64_in);
1152 memcpy(&v64_1_out, p, sizeof(v64_in));
1155 LittleEndian::PutUnaligned64(p, v64_in);
1156 memcpy(&v64_2_out, p, sizeof(v64_in));
1159 LittleEndian::PutUnaligned64(p, v64_in);
1160 memcpy(&v64_3_out, p, sizeof(v64_in));
1163 LittleEndian::PutUnaligned64(p, v64_in);
1164 memcpy(&v64_4_out, p, sizeof(v64_in));
1167 LittleEndian::PutUnaligned64(p, v64_in);
1168 memcpy(&v64_5_out, p, sizeof(v64_in));
1171 LittleEndian::PutUnaligned64(p, v64_in);
1172 memcpy(&v64_6_out, p, sizeof(v64_in));
1175 LittleEndian::PutUnaligned64(p, v64_in);
1176 memcpy(&v64_7_out, p, sizeof(v64_in));
1178 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1179 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1180 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1181 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1182 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1183 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1184 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1185 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1186 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1187 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1188 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1189 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1190 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1191 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1192 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1193 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1195 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1196 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1197 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1198 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1199 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1200 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1201 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1202 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1203 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1204 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1205 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1206 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1207 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1208 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1209 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1210 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1213 NL_TEST_ASSERT(inSuite, false);
1218 static void CheckReadBigUnaligned(nlTestSuite *inSuite, void *inContext)
1220 const uint8_t v8_in = MAGIC8;
1221 const uint16_t v16_in = MAGIC16;
1222 const uint32_t v32_in = MAGIC32;
1223 const uint64_t v64_in = MAGIC64;
1239 uint8_t buffer[sizeof(uint64_t) * 2];
1242 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1246 memcpy(&buffer[0], &v8_in, sizeof(v8_in));
1248 v8_out = BigEndian::ReadUnaligned8(p);
1249 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_in));
1251 // Try 16-bit quantities.
1254 memcpy(&buffer[0], &v16_in, sizeof(v16_in));
1256 v16_0_out = BigEndian::ReadUnaligned16(p);
1257 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_in));
1260 memcpy(&buffer[1], &v16_in, sizeof(v16_in));
1262 v16_1_out = BigEndian::ReadUnaligned16(p);
1263 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_in));
1265 // Try 32-bit quantities.
1268 memcpy(&buffer[0], &v32_in, sizeof(v32_in));
1270 v32_0_out = BigEndian::ReadUnaligned32(p);
1271 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_in));
1274 memcpy(&buffer[1], &v32_in, sizeof(v32_in));
1276 v32_1_out = BigEndian::ReadUnaligned32(p);
1277 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_in));
1280 memcpy(&buffer[2], &v32_in, sizeof(v32_in));
1282 v32_2_out = BigEndian::ReadUnaligned32(p);
1283 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_in));
1286 memcpy(&buffer[3], &v32_in, sizeof(v32_in));
1288 v32_3_out = BigEndian::ReadUnaligned32(p);
1289 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_in));
1291 // Try 64-bit quantities.
1294 memcpy(&buffer[0], &v64_in, sizeof(v64_in));
1296 v64_0_out = BigEndian::ReadUnaligned64(p);
1297 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_in));
1300 memcpy(&buffer[1], &v64_in, sizeof(v64_in));
1302 v64_1_out = BigEndian::ReadUnaligned64(p);
1303 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_in));
1306 memcpy(&buffer[2], &v64_in, sizeof(v64_in));
1308 v64_2_out = BigEndian::ReadUnaligned64(p);
1309 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_in));
1312 memcpy(&buffer[3], &v64_in, sizeof(v64_in));
1314 v64_3_out = BigEndian::ReadUnaligned64(p);
1315 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_in));
1318 memcpy(&buffer[4], &v64_in, sizeof(v64_in));
1320 v64_4_out = BigEndian::ReadUnaligned64(p);
1321 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_in));
1324 memcpy(&buffer[5], &v64_in, sizeof(v64_in));
1326 v64_5_out = BigEndian::ReadUnaligned64(p);
1327 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_in));
1330 memcpy(&buffer[6], &v64_in, sizeof(v64_in));
1332 v64_6_out = BigEndian::ReadUnaligned64(p);
1333 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_in));
1336 memcpy(&buffer[7], &v64_in, sizeof(v64_in));
1338 v64_7_out = BigEndian::ReadUnaligned64(p);
1339 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_in));
1341 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1342 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1343 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1344 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1345 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1346 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1347 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1348 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1349 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1350 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1351 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1352 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1353 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1354 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1355 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1356 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1358 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1359 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1360 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1361 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1362 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1363 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1364 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1365 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1366 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1367 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1368 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1369 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1370 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1371 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1372 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1373 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1376 NL_TEST_ASSERT(inSuite, false);
1381 static void CheckReadLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1383 const uint8_t v8_in = MAGIC8;
1384 const uint16_t v16_in = MAGIC16;
1385 const uint32_t v32_in = MAGIC32;
1386 const uint64_t v64_in = MAGIC64;
1402 uint8_t buffer[sizeof(uint64_t) * 2];
1405 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1409 memcpy(&buffer[0], &v8_in, sizeof(v8_in));
1411 v8_out = LittleEndian::ReadUnaligned8(p);
1412 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_in));
1414 // Try 16-bit quantities.
1417 memcpy(&buffer[0], &v16_in, sizeof(v16_in));
1419 v16_0_out = LittleEndian::ReadUnaligned16(p);
1420 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_in));
1423 memcpy(&buffer[1], &v16_in, sizeof(v16_in));
1425 v16_1_out = LittleEndian::ReadUnaligned16(p);
1426 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_in));
1428 // Try 32-bit quantities.
1431 memcpy(&buffer[0], &v32_in, sizeof(v32_in));
1433 v32_0_out = LittleEndian::ReadUnaligned32(p);
1434 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_in));
1437 memcpy(&buffer[1], &v32_in, sizeof(v32_in));
1439 v32_1_out = LittleEndian::ReadUnaligned32(p);
1440 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_in));
1443 memcpy(&buffer[2], &v32_in, sizeof(v32_in));
1445 v32_2_out = LittleEndian::ReadUnaligned32(p);
1446 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_in));
1449 memcpy(&buffer[3], &v32_in, sizeof(v32_in));
1451 v32_3_out = LittleEndian::ReadUnaligned32(p);
1452 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_in));
1454 // Try 64-bit quantities.
1457 memcpy(&buffer[0], &v64_in, sizeof(v64_in));
1459 v64_0_out = LittleEndian::ReadUnaligned64(p);
1460 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_in));
1463 memcpy(&buffer[1], &v64_in, sizeof(v64_in));
1465 v64_1_out = LittleEndian::ReadUnaligned64(p);
1466 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_in));
1469 memcpy(&buffer[2], &v64_in, sizeof(v64_in));
1471 v64_2_out = LittleEndian::ReadUnaligned64(p);
1472 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_in));
1475 memcpy(&buffer[3], &v64_in, sizeof(v64_in));
1477 v64_3_out = LittleEndian::ReadUnaligned64(p);
1478 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_in));
1481 memcpy(&buffer[4], &v64_in, sizeof(v64_in));
1483 v64_4_out = LittleEndian::ReadUnaligned64(p);
1484 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_in));
1487 memcpy(&buffer[5], &v64_in, sizeof(v64_in));
1489 v64_5_out = LittleEndian::ReadUnaligned64(p);
1490 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_in));
1493 memcpy(&buffer[6], &v64_in, sizeof(v64_in));
1495 v64_6_out = LittleEndian::ReadUnaligned64(p);
1496 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_in));
1499 memcpy(&buffer[7], &v64_in, sizeof(v64_in));
1501 v64_7_out = LittleEndian::ReadUnaligned64(p);
1502 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_in));
1504 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1505 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1506 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1507 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1508 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1509 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1510 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1511 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1512 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1513 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1514 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1515 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1516 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1517 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1518 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1519 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1521 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1522 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1523 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1524 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1525 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1526 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1527 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1528 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1529 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1530 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1531 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1532 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1533 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1534 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1535 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1536 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1539 NL_TEST_ASSERT(inSuite, false);
1544 static void CheckWriteBigUnaligned(nlTestSuite *inSuite, void *inContext)
1546 const uint8_t v8_in = MAGIC8;
1547 const uint16_t v16_in = MAGIC16;
1548 const uint32_t v32_in = MAGIC32;
1549 const uint64_t v64_in = MAGIC64;
1565 uint8_t buffer[sizeof(uint64_t) * 2];
1568 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1572 BigEndian::WriteUnaligned8(p, v8_in);
1573 memcpy(&v8_out, &buffer[0], sizeof(v8_in));
1574 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_out));
1576 // Try 16-bit quantities.
1579 BigEndian::WriteUnaligned16(p, v16_in);
1580 memcpy(&v16_0_out, &buffer[0], sizeof(v16_in));
1581 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_0_out));
1584 BigEndian::WriteUnaligned16(p, v16_in);
1585 memcpy(&v16_1_out, &buffer[1], sizeof(v16_in));
1586 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_1_out));
1588 // Try 32-bit quantities.
1591 BigEndian::WriteUnaligned32(p, v32_in);
1592 memcpy(&v32_0_out, &buffer[0], sizeof(v32_in));
1593 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_0_out));
1596 BigEndian::WriteUnaligned32(p, v32_in);
1597 memcpy(&v32_1_out, &buffer[1], sizeof(v32_in));
1598 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_1_out));
1601 BigEndian::WriteUnaligned32(p, v32_in);
1602 memcpy(&v32_2_out, &buffer[2], sizeof(v32_in));
1603 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_2_out));
1606 BigEndian::WriteUnaligned32(p, v32_in);
1607 memcpy(&v32_3_out, &buffer[3], sizeof(v32_in));
1608 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_3_out));
1610 // Try 64-bit quantities.
1613 BigEndian::WriteUnaligned64(p, v64_in);
1614 memcpy(&v64_0_out, &buffer[0], sizeof(v64_in));
1615 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_0_out));
1618 BigEndian::WriteUnaligned64(p, v64_in);
1619 memcpy(&v64_1_out, &buffer[1], sizeof(v64_in));
1620 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_1_out));
1623 BigEndian::WriteUnaligned64(p, v64_in);
1624 memcpy(&v64_2_out, &buffer[2], sizeof(v64_in));
1625 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_2_out));
1628 BigEndian::WriteUnaligned64(p, v64_in);
1629 memcpy(&v64_3_out, &buffer[3], sizeof(v64_in));
1630 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_3_out));
1633 BigEndian::WriteUnaligned64(p, v64_in);
1634 memcpy(&v64_4_out, &buffer[4], sizeof(v64_in));
1635 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_4_out));
1638 BigEndian::WriteUnaligned64(p, v64_in);
1639 memcpy(&v64_5_out, &buffer[5], sizeof(v64_in));
1640 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_5_out));
1643 BigEndian::WriteUnaligned64(p, v64_in);
1644 memcpy(&v64_6_out, &buffer[6], sizeof(v64_in));
1645 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_6_out));
1648 BigEndian::WriteUnaligned64(p, v64_in);
1649 memcpy(&v64_7_out, &buffer[7], sizeof(v64_in));
1650 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_7_out));
1652 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1653 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1654 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1655 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1656 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1657 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1658 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1659 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1660 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1661 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1662 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1663 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1664 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1665 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1666 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1667 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1669 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1670 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1671 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1672 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1673 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1674 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1675 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1676 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1677 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1678 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1679 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1680 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1681 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1682 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1683 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1684 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1687 NL_TEST_ASSERT(inSuite, false);
1692 static void CheckWriteLittleUnaligned(nlTestSuite *inSuite, void *inContext)
1694 const uint8_t v8_in = MAGIC8;
1695 const uint16_t v16_in = MAGIC16;
1696 const uint32_t v32_in = MAGIC32;
1697 const uint64_t v64_in = MAGIC64;
1713 uint8_t buffer[sizeof(uint64_t) * 2];
1716 // Try an 8-bit quantity. They are aligned anywhere and unaligned
1720 LittleEndian::WriteUnaligned8(p, v8_in);
1721 memcpy(&v8_out, &buffer[0], sizeof(v8_in));
1722 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v8_out));
1724 // Try 16-bit quantities.
1727 LittleEndian::WriteUnaligned16(p, v16_in);
1728 memcpy(&v16_0_out, &buffer[0], sizeof(v16_in));
1729 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v16_0_out));
1732 LittleEndian::WriteUnaligned16(p, v16_in);
1733 memcpy(&v16_1_out, &buffer[1], sizeof(v16_in));
1734 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v16_1_out));
1736 // Try 32-bit quantities.
1739 LittleEndian::WriteUnaligned32(p, v32_in);
1740 memcpy(&v32_0_out, &buffer[0], sizeof(v32_in));
1741 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v32_0_out));
1744 LittleEndian::WriteUnaligned32(p, v32_in);
1745 memcpy(&v32_1_out, &buffer[1], sizeof(v32_in));
1746 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v32_1_out));
1749 LittleEndian::WriteUnaligned32(p, v32_in);
1750 memcpy(&v32_2_out, &buffer[2], sizeof(v32_in));
1751 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v32_2_out));
1754 LittleEndian::WriteUnaligned32(p, v32_in);
1755 memcpy(&v32_3_out, &buffer[3], sizeof(v32_in));
1756 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v32_3_out));
1758 // Try 64-bit quantities.
1761 LittleEndian::WriteUnaligned64(p, v64_in);
1762 memcpy(&v64_0_out, &buffer[0], sizeof(v64_in));
1763 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[0] + sizeof(v64_0_out));
1766 LittleEndian::WriteUnaligned64(p, v64_in);
1767 memcpy(&v64_1_out, &buffer[1], sizeof(v64_in));
1768 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[1] + sizeof(v64_1_out));
1771 LittleEndian::WriteUnaligned64(p, v64_in);
1772 memcpy(&v64_2_out, &buffer[2], sizeof(v64_in));
1773 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[2] + sizeof(v64_2_out));
1776 LittleEndian::WriteUnaligned64(p, v64_in);
1777 memcpy(&v64_3_out, &buffer[3], sizeof(v64_in));
1778 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[3] + sizeof(v64_3_out));
1781 LittleEndian::WriteUnaligned64(p, v64_in);
1782 memcpy(&v64_4_out, &buffer[4], sizeof(v64_in));
1783 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[4] + sizeof(v64_4_out));
1786 LittleEndian::WriteUnaligned64(p, v64_in);
1787 memcpy(&v64_5_out, &buffer[5], sizeof(v64_in));
1788 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[5] + sizeof(v64_5_out));
1791 LittleEndian::WriteUnaligned64(p, v64_in);
1792 memcpy(&v64_6_out, &buffer[6], sizeof(v64_in));
1793 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[6] + sizeof(v64_6_out));
1796 LittleEndian::WriteUnaligned64(p, v64_in);
1797 memcpy(&v64_7_out, &buffer[7], sizeof(v64_in));
1798 NL_TEST_ASSERT(inSuite, p == (uint8_t *)&buffer[7] + sizeof(v64_7_out));
1800 #if NLBYTEORDER == NLBYTEORDER_LITTLE_ENDIAN
1801 NL_TEST_ASSERT(inSuite, v8_out == MAGIC8);
1802 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC16);
1803 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC16);
1804 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC32);
1805 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC32);
1806 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC32);
1807 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC32);
1808 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC64);
1809 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC64);
1810 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC64);
1811 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC64);
1812 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC64);
1813 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC64);
1814 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC64);
1815 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC64);
1817 #elif NLBYTEORDER == NLBYTEORDER_BIG_ENDIAN
1818 NL_TEST_ASSERT(inSuite, v8_out == MAGIC_SWAP8);
1819 NL_TEST_ASSERT(inSuite, v16_0_out == MAGIC_SWAP16);
1820 NL_TEST_ASSERT(inSuite, v16_1_out == MAGIC_SWAP16);
1821 NL_TEST_ASSERT(inSuite, v32_0_out == MAGIC_SWAP32);
1822 NL_TEST_ASSERT(inSuite, v32_1_out == MAGIC_SWAP32);
1823 NL_TEST_ASSERT(inSuite, v32_2_out == MAGIC_SWAP32);
1824 NL_TEST_ASSERT(inSuite, v32_3_out == MAGIC_SWAP32);
1825 NL_TEST_ASSERT(inSuite, v64_0_out == MAGIC_SWAP64);
1826 NL_TEST_ASSERT(inSuite, v64_1_out == MAGIC_SWAP64);
1827 NL_TEST_ASSERT(inSuite, v64_2_out == MAGIC_SWAP64);
1828 NL_TEST_ASSERT(inSuite, v64_3_out == MAGIC_SWAP64);
1829 NL_TEST_ASSERT(inSuite, v64_4_out == MAGIC_SWAP64);
1830 NL_TEST_ASSERT(inSuite, v64_5_out == MAGIC_SWAP64);
1831 NL_TEST_ASSERT(inSuite, v64_6_out == MAGIC_SWAP64);
1832 NL_TEST_ASSERT(inSuite, v64_7_out == MAGIC_SWAP64);
1835 NL_TEST_ASSERT(inSuite, false);
1840 static const nlTest sTests[] = {
1841 NL_TEST_DEF("get big", CheckGetBig),
1842 NL_TEST_DEF("get little", CheckGetLittle),
1843 NL_TEST_DEF("put big", CheckPutBig),
1844 NL_TEST_DEF("put little", CheckPutLittle),
1845 NL_TEST_DEF("read big", CheckReadBig),
1846 NL_TEST_DEF("read little", CheckReadLittle),
1847 NL_TEST_DEF("write big", CheckWriteBig),
1848 NL_TEST_DEF("write little", CheckWriteLittle),
1849 NL_TEST_DEF("get big aligned", CheckGetBigAligned),
1850 NL_TEST_DEF("get little aligned", CheckGetLittleAligned),
1851 NL_TEST_DEF("put big aligned", CheckPutBigAligned),
1852 NL_TEST_DEF("put little aligned", CheckPutLittleAligned),
1853 NL_TEST_DEF("read big aligned", CheckReadBigAligned),
1854 NL_TEST_DEF("read little aligned", CheckReadLittleAligned),
1855 NL_TEST_DEF("write big aligned", CheckWriteBigAligned),
1856 NL_TEST_DEF("write little aligned", CheckWriteLittleAligned),
1857 NL_TEST_DEF("get big unaligned", CheckGetBigUnaligned),
1858 NL_TEST_DEF("get little unaligned", CheckGetLittleUnaligned),
1859 NL_TEST_DEF("put big unaligned", CheckPutBigUnaligned),
1860 NL_TEST_DEF("put little unaligned", CheckPutLittleUnaligned),
1861 NL_TEST_DEF("read big unaligned", CheckReadBigUnaligned),
1862 NL_TEST_DEF("read little unaligned", CheckReadLittleUnaligned),
1863 NL_TEST_DEF("write big unaligned", CheckWriteBigUnaligned),
1864 NL_TEST_DEF("write little unaligned", CheckWriteLittleUnaligned),
1871 nlTestSuite theSuite = {
1872 "nlio-byteorder-cxx",
1876 nl_test_set_output_style(OUTPUT_CSV);
1878 nlTestRunner(&theSuite, NULL);
1880 return nlTestRunnerStats(&theSuite);