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