xref: /netbsd-src/external/bsd/ntp/dist/tests/libntp/refidsmear.c (revision a6f3f22f245acb8ee3bbf6871d7dce989204fa97)
1 /*	$NetBSD: refidsmear.c,v 1.1.1.3 2015/10/23 17:47:45 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 
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 void
41 rtol(uint32_t r, char *es)
42 {
43 	l_fp l;
44 	char *as;
45 	char msg[100];
46 
47 	TEST_ASSERT_NOT_NULL(es);
48 
49 	snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es);
50 
51 	l = convertRefIDToLFP(htonl(r));
52 	as = lfptoa(&l, 8);
53 
54 	//printf("refid %#x, smear %s\n", r, as);
55 
56 	TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
57 	TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
58 
59 	return;
60 }
61 
62 
63 
64 
65 void
66 rtoltor(uint32_t er, char *es)
67 {
68 	l_fp l;
69 	char *as;
70 	uint32_t ar;
71 	char msg[100];
72 
73 	TEST_ASSERT_NOT_NULL(es);
74 
75 	snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es);
76 
77 	l = convertRefIDToLFP(htonl(er));
78 	as = lfptoa(&l, 8);
79 
80 	ar = convertLFPToRefID(l);
81 
82 	//printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar));
83 
84 	TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
85 	TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
86 	TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg);
87 
88 	return;
89 }
90 
91 
92 void
93 ltor(l_fp l, char *er)
94 {
95 	uint32_t r;
96 
97 	printf("ltor: ");
98 
99 	r = convertLFPToRefID(l);
100 	printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r));
101 
102 	return;
103 }
104 
105 
106 void test_refidsmear(void)
107 {
108 
109 	rtol(0xfe800000, "-2.00000000");
110 	rtol(0xfe800001, "-1.99999976");
111 	rtol(0xfe8ffffe, "-1.75000048");
112 	rtol(0xfe8fffff, "-1.75000024");
113 	rtol(0xfef00000, "-0.25000000");
114 	rtol(0xfef00001, "-0.24999976");
115 	rtol(0xfefffffe, "-0.00000048");
116 	rtol(0xfeffffff, "-0.00000024");
117 
118 	rtol(0xfe000000, "0.00000000");
119 	rtol(0xfe000001, "0.00000024");
120 	rtol(0xfe6ffffe, "1.74999952");
121 	rtol(0xfe6fffff, "1.74999976");
122 	rtol(0xfe700000, "1.75000000");
123 	rtol(0xfe700001, "1.75000024");
124 	rtol(0xfe7ffffe, "1.99999952");
125 	rtol(0xfe7fffff, "1.99999976");
126 
127 	rtoltor(0xfe800000, "-2.00000000");
128 	rtoltor(0xfe800001, "-1.99999976");
129 	rtoltor(0xfe8ffffe, "-1.75000048");
130 	rtoltor(0xfe8fffff, "-1.75000024");
131 	rtoltor(0xfef00000, "-0.25000000");
132 	rtoltor(0xfef00001, "-0.24999976");
133 	rtoltor(0xfefffffe, "-0.00000048");
134 	rtoltor(0xfeffffff, "-0.00000024");
135 
136 	rtoltor(0xfe000000, "0.00000000");
137 	rtoltor(0xfe000001, "0.00000024");
138 	rtoltor(0xfe6ffffe, "1.74999952");
139 	rtoltor(0xfe6fffff, "1.74999976");
140 	rtoltor(0xfe700000, "1.75000000");
141 	rtoltor(0xfe700001, "1.75000024");
142 	rtoltor(0xfe7ffffe, "1.99999952");
143 	rtoltor(0xfe7fffff, "1.99999976");
144 
145 	return;
146 }
147