1284990Scy#include "config.h"
2284990Scy
3284990Scy#include <ntp.h>
4284990Scy#include <ntp_fp.h>
5284990Scy#include <refidsmear.h>
6284990Scy
7284990Scy//#include "ntp_stdlib.h"
8284990Scy//#include "ntp_calendar.h"
9284990Scy
10284990Scy#include "unity.h"
11284990Scy
12284990Scy#include <stdio.h>
13284990Scy
14284990Scy/*
15284990Scy * we want to test a refid format of:
16284990Scy * 254.x.y.x
17284990Scy *
18284990Scy * where x.y.z are 24 bits containing 2 (signed) integer bits
19284990Scy * and 22 fractional bits.
20284990Scy *
21284990Scy * we want functions to convert to/from this format, with unit tests.
22284990Scy *
23284990Scy * Interesting test cases include:
24284990Scy * 254.0.0.0
25284990Scy * 254.0.0.1
26284990Scy * 254.127.255.255
27284990Scy * 254.128.0.0
28284990Scy * 254.255.255.255
29284990Scy */
30284990Scy
31290000Sglebius
32293894Sglebiusvoid setUp(void);
33284990Scyvoid rtol(uint32_t r, char *es);
34290000Sglebiusvoid rtoltor(uint32_t er, char *es);
35290000Sglebiusvoid ltor(l_fp l, char *er);
36290000Sglebiusvoid test_refidsmear(void);
37284990Scy
38293894Sglebius
39284990Scyvoid
40293894SglebiussetUp(void)
41293894Sglebius{
42293894Sglebius	init_lib();
43293894Sglebius
44293894Sglebius	return;
45293894Sglebius}
46293894Sglebius
47293894Sglebiusvoid
48284990Scyrtol(uint32_t r, char *es)
49284990Scy{
50284990Scy	l_fp l;
51284990Scy	char *as;
52284990Scy	char msg[100];
53284990Scy
54284990Scy	TEST_ASSERT_NOT_NULL(es);
55284990Scy
56284990Scy	snprintf(msg, 100, "rtol was called with r=%#.8x, es=%s", r, es);
57284990Scy
58284990Scy	l = convertRefIDToLFP(htonl(r));
59284990Scy	as = lfptoa(&l, 8);
60293894Sglebius
61284990Scy	//printf("refid %#x, smear %s\n", r, as);
62284990Scy
63284990Scy	TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
64284990Scy	TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
65284990Scy
66284990Scy	return;
67284990Scy}
68284990Scy
69284990Scy
70284990Scyvoid
71284990Scyrtoltor(uint32_t er, char *es)
72284990Scy{
73284990Scy	l_fp l;
74284990Scy	char *as;
75284990Scy	uint32_t ar;
76284990Scy	char msg[100];
77284990Scy
78284990Scy	TEST_ASSERT_NOT_NULL(es);
79284990Scy
80284990Scy	snprintf(msg, 100, "rtoltor was called with er=%#.8x, es=%s", er, es);
81284990Scy
82284990Scy	l = convertRefIDToLFP(htonl(er));
83284990Scy	as = lfptoa(&l, 8);
84284990Scy
85284990Scy	ar = convertLFPToRefID(l);
86284990Scy
87284990Scy	//printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(ar));
88284990Scy
89284990Scy	TEST_ASSERT_NOT_NULL_MESSAGE(as, msg);
90284990Scy	TEST_ASSERT_EQUAL_STRING_MESSAGE(es, as, msg);
91284990Scy	TEST_ASSERT_EQUAL_UINT_MESSAGE(er, ntohl(ar), msg);
92284990Scy
93284990Scy	return;
94284990Scy}
95284990Scy
96284990Scy
97284990Scyvoid
98284990Scyltor(l_fp l, char *er)
99284990Scy{
100284990Scy	uint32_t r;
101284990Scy
102284990Scy	printf("ltor: ");
103284990Scy
104284990Scy	r = convertLFPToRefID(l);
105284990Scy	printf("smear %s, refid %#.8x\n", lfptoa(&l, 8), ntohl(r));
106284990Scy
107284990Scy	return;
108284990Scy}
109284990Scy
110284990Scy
111284990Scyvoid test_refidsmear(void)
112284990Scy{
113284990Scy
114284990Scy	rtol(0xfe800000, "-2.00000000");
115284990Scy	rtol(0xfe800001, "-1.99999976");
116284990Scy	rtol(0xfe8ffffe, "-1.75000048");
117284990Scy	rtol(0xfe8fffff, "-1.75000024");
118284990Scy	rtol(0xfef00000, "-0.25000000");
119284990Scy	rtol(0xfef00001, "-0.24999976");
120284990Scy	rtol(0xfefffffe, "-0.00000048");
121284990Scy	rtol(0xfeffffff, "-0.00000024");
122284990Scy
123284990Scy	rtol(0xfe000000, "0.00000000");
124284990Scy	rtol(0xfe000001, "0.00000024");
125284990Scy	rtol(0xfe6ffffe, "1.74999952");
126284990Scy	rtol(0xfe6fffff, "1.74999976");
127284990Scy	rtol(0xfe700000, "1.75000000");
128284990Scy	rtol(0xfe700001, "1.75000024");
129284990Scy	rtol(0xfe7ffffe, "1.99999952");
130284990Scy	rtol(0xfe7fffff, "1.99999976");
131284990Scy
132284990Scy	rtoltor(0xfe800000, "-2.00000000");
133284990Scy	rtoltor(0xfe800001, "-1.99999976");
134284990Scy	rtoltor(0xfe8ffffe, "-1.75000048");
135284990Scy	rtoltor(0xfe8fffff, "-1.75000024");
136284990Scy	rtoltor(0xfef00000, "-0.25000000");
137284990Scy	rtoltor(0xfef00001, "-0.24999976");
138284990Scy	rtoltor(0xfefffffe, "-0.00000048");
139284990Scy	rtoltor(0xfeffffff, "-0.00000024");
140284990Scy
141284990Scy	rtoltor(0xfe000000, "0.00000000");
142284990Scy	rtoltor(0xfe000001, "0.00000024");
143284990Scy	rtoltor(0xfe6ffffe, "1.74999952");
144284990Scy	rtoltor(0xfe6fffff, "1.74999976");
145284990Scy	rtoltor(0xfe700000, "1.75000000");
146284990Scy	rtoltor(0xfe700001, "1.75000024");
147284990Scy	rtoltor(0xfe7ffffe, "1.99999952");
148284990Scy	rtoltor(0xfe7fffff, "1.99999976");
149284990Scy
150284990Scy	return;
151284990Scy}
152