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