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
32void setUp(void);
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
38
39void
40setUp(void)
41{
42	init_lib();
43
44	return;
45}
46
47void
48rtol(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
70void
71rtoltor(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
97void
98ltor(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
111void 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