1 /* $NetBSD: refidsmear.c,v 1.2 2020/05/25 20:47:36 christos Exp $ */
2
3 #include "config.h"
4
5 #include <ntp.h>
6 #include <ntp_fp.h>
7 #include <refidsmear.h>
8
9 //#include "ntp_stdlib.h"
10 //#include "ntp_calendar.h"
11
12 #include "unity.h"
13
14 #include <stdio.h>
15
16 /*
17 * we want to test a refid format of:
18 * 254.x.y.x
19 *
20 * where x.y.z are 24 bits containing 2 (signed) integer bits
21 * and 22 fractional bits.
22 *
23 * we want functions to convert to/from this format, with unit tests.
24 *
25 * Interesting test cases include:
26 * 254.0.0.0
27 * 254.0.0.1
28 * 254.127.255.255
29 * 254.128.0.0
30 * 254.255.255.255
31 */
32
33
34 void setUp(void);
35 void rtol(uint32_t r, char *es);
36 void rtoltor(uint32_t er, char *es);
37 void ltor(l_fp l, char *er);
38 void test_refidsmear(void);
39
40
41 void
setUp(void)42 setUp(void)
43 {
44 init_lib();
45
46 return;
47 }
48
49 void
rtol(uint32_t r,char * es)50 rtol(uint32_t r, char *es)
51 {
52 l_fp l;
53 char *as;
54 char msg[100];
55
56 TEST_ASSERT_NOT_NULL(es);
57
58 snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es);
59
60 l = convertRefIDToLFP(htonl(r));
61 as = lfptoa(&l, 8);
62
63 //printf("refid %#x, smear %s\n", r, as);
64
65 TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
66 TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
67
68 return;
69 }
70
71
72 void
rtoltor(uint32_t er,char * es)73 rtoltor(uint32_t er, char *es)
74 {
75 l_fp l;
76 char *as;
77 uint32_t ar;
78 char msg[100];
79
80 TEST_ASSERT_NOT_NULL(es);
81
82 snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es);
83
84 l = convertRefIDToLFP(htonl(er));
85 as = lfptoa(&l, 8);
86
87 ar = convertLFPToRefID(l);
88
89 //printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar));
90
91 TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
92 TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
93 TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg);
94
95 return;
96 }
97
98
99 void
ltor(l_fp l,char * er)100 ltor(l_fp l, char *er)
101 {
102 uint32_t r;
103
104 printf("ltor: ");
105
106 r = convertLFPToRefID(l);
107 printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r));
108
109 return;
110 }
111
112
test_refidsmear(void)113 void test_refidsmear(void)
114 {
115
116 rtol(0xfe800000, "-2.00000000");
117 rtol(0xfe800001, "-1.99999976");
118 rtol(0xfe8ffffe, "-1.75000048");
119 rtol(0xfe8fffff, "-1.75000024");
120 rtol(0xfef00000, "-0.25000000");
121 rtol(0xfef00001, "-0.24999976");
122 rtol(0xfefffffe, "-0.00000048");
123 rtol(0xfeffffff, "-0.00000024");
124
125 rtol(0xfe000000, "+0.00000000");
126 rtol(0xfe000001, "+0.00000024");
127 rtol(0xfe6ffffe, "+1.74999952");
128 rtol(0xfe6fffff, "+1.74999976");
129 rtol(0xfe700000, "+1.75000000");
130 rtol(0xfe700001, "+1.75000024");
131 rtol(0xfe7ffffe, "+1.99999952");
132 rtol(0xfe7fffff, "+1.99999976");
133
134 rtoltor(0xfe800000, "-2.00000000");
135 rtoltor(0xfe800001, "-1.99999976");
136 rtoltor(0xfe8ffffe, "-1.75000048");
137 rtoltor(0xfe8fffff, "-1.75000024");
138 rtoltor(0xfef00000, "-0.25000000");
139 rtoltor(0xfef00001, "-0.24999976");
140 rtoltor(0xfefffffe, "-0.00000048");
141 rtoltor(0xfeffffff, "-0.00000024");
142
143 rtoltor(0xfe000000, "+0.00000000");
144 rtoltor(0xfe000001, "+0.00000024");
145 rtoltor(0xfe6ffffe, "+1.74999952");
146 rtoltor(0xfe6fffff, "+1.74999976");
147 rtoltor(0xfe700000, "+1.75000000");
148 rtoltor(0xfe700001, "+1.75000024");
149 rtoltor(0xfe7ffffe, "+1.99999952");
150 rtoltor(0xfe7fffff, "+1.99999976");
151
152 return;
153 }
154