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