1 /* $NetBSD: vi64ops.c,v 1.3 2024/08/18 20:47:27 christos Exp $ */
2
3 #include "config.h"
4
5 #include "ntp_stdlib.h"
6 #include "vint64ops.h"
7
8 #include "unity.h"
9
10
11 int IsEqual(const vint64 expected, const vint64 actual);
12 void test_ParseVUI64_pos(void);
13 void test_ParseVUI64_neg(void);
14 void test_ParseVUI64_case(void);
15
16
17 // technically bool
18 int
IsEqual(const vint64 expected,const vint64 actual)19 IsEqual(const vint64 expected, const vint64 actual) {
20 if (0 == memcmp(&expected, &actual, sizeof(vint64))) {
21 printf( "%x.", expected.D_s.hi);
22 printf("%x", expected.D_s.lo);
23 printf(" but was ");
24 printf("%x.", actual.D_s.hi);
25 printf("%x\n", actual.D_s.lo);
26 return TRUE;
27 } else {
28 printf("expected: ");
29 printf( "%d.", expected.D_s.hi);
30 printf("%d", expected.D_s.lo);
31 printf(" but was ");
32 printf("%d", actual.D_s.lo);
33 printf("%d", actual.D_s.lo);
34 return FALSE;
35 }
36 }
37
38 // ----------------------------------------------------------------------
39 // test number parser
40 void
test_ParseVUI64_pos(void)41 test_ParseVUI64_pos(void) {
42 vint64 act, exp;
43 char *sp;
44 char *ep;
45
46 sp = "1234x";
47 exp.D_s.hi = 0;
48 exp.D_s.lo = 1234;
49 act = strtouv64(sp, &ep, 0);
50
51 TEST_ASSERT_TRUE(IsEqual(exp, act));
52 TEST_ASSERT_EQUAL(*ep, 'x');
53 }
54
55
56 void
test_ParseVUI64_neg(void)57 test_ParseVUI64_neg(void) {
58 vint64 act, exp;
59 char *sp;
60 char *ep;
61
62 sp = "-1234x";
63 exp.D_s.hi = ~0;
64 exp.D_s.lo = -1234;
65 act = strtouv64(sp, &ep, 0);
66 TEST_ASSERT_TRUE(IsEqual(exp, act));
67 TEST_ASSERT_EQUAL(*ep, 'x');
68 }
69
70 void
test_ParseVUI64_case(void)71 test_ParseVUI64_case(void) {
72 vint64 act, exp;
73 char *sp;
74 char *ep;
75
76 sp = "0123456789AbCdEf";
77 exp.D_s.hi = 0x01234567;
78 exp.D_s.lo = 0x89ABCDEF;
79 act = strtouv64(sp, &ep, 16);
80 TEST_ASSERT_TRUE(IsEqual(exp, act));
81 TEST_ASSERT_EQUAL(*ep, '\0');
82 }
83