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