1290001Sglebius#include "config.h"
2290001Sglebius
3290001Sglebius#include "ntp_stdlib.h"
4290001Sglebius#include "ntp_calendar.h"
5290001Sglebius
6290001Sglebius#include "unity.h"
7290001Sglebius#include "lfptest.h"
8290001Sglebius
9290001Sglebiusvoid test_PositiveInteger(void);
10290001Sglebiusvoid test_NegativeInteger(void);
11290001Sglebiusvoid test_PositiveFraction(void);
12290001Sglebiusvoid test_NegativeFraction(void);
13290001Sglebiusvoid test_IllegalNumberOfInteger(void);
14290001Sglebiusvoid test_IllegalChar(void);
15290001Sglebius
16290001Sglebius
17290001Sglebiusvoid
18290001Sglebiustest_PositiveInteger(void) {
19290001Sglebius	const char *str = "00001000.00000000";
20290001Sglebius	l_fp actual;
21290001Sglebius
22290001Sglebius	l_fp expected = {{4096}, 0}; /* 16^3, no fraction part. */
23290001Sglebius
24290001Sglebius	TEST_ASSERT_TRUE(hextolfp(str, &actual));
25290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
26290001Sglebius}
27290001Sglebius
28290001Sglebiusvoid
29290001Sglebiustest_NegativeInteger(void) {
30290001Sglebius	const char *str = "ffffffff.00000000"; /* -1 decimal */
31290001Sglebius	l_fp actual;
32290001Sglebius
33290001Sglebius	l_fp expected = {{-1}, 0};
34290001Sglebius
35290001Sglebius	TEST_ASSERT_TRUE(hextolfp(str, &actual));
36290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
37290001Sglebius}
38290001Sglebius
39290001Sglebiusvoid
40290001Sglebiustest_PositiveFraction(void) {
41290001Sglebius	const char *str = "00002000.80000000"; /* 8196.5 decimal */
42290001Sglebius	l_fp actual;
43290001Sglebius
44290001Sglebius	l_fp expected = {{8192}, HALF};
45290001Sglebius
46290001Sglebius	TEST_ASSERT_TRUE(hextolfp(str, &actual));
47290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
48290001Sglebius}
49290001Sglebius
50290001Sglebiusvoid
51290001Sglebiustest_NegativeFraction(void) {
52290001Sglebius	const char *str = "ffffffff.40000000"; /* -1 + 0.25 decimal */
53290001Sglebius	l_fp actual;
54290001Sglebius
55290001Sglebius	l_fp expected = {{-1}, QUARTER}; /* -1 + 0.25 */
56290001Sglebius
57290001Sglebius	TEST_ASSERT_TRUE(hextolfp(str, &actual));
58290001Sglebius	TEST_ASSERT_TRUE(IsEqual(expected, actual));
59290001Sglebius}
60290001Sglebius
61290001Sglebiusvoid
62290001Sglebiustest_IllegalNumberOfInteger(void) {
63290001Sglebius	const char *str = "1000000.00000000"; /* Missing one digit in integral part. */
64290001Sglebius	l_fp actual;
65290001Sglebius
66290001Sglebius	TEST_ASSERT_FALSE(hextolfp(str, &actual));
67290001Sglebius}
68290001Sglebius
69290001Sglebiusvoid
70290001Sglebiustest_IllegalChar(void) {
71290001Sglebius	const char *str = "10000000.0000h000"; /* Illegal character h. */
72290001Sglebius	l_fp actual;
73290001Sglebius
74290001Sglebius	TEST_ASSERT_FALSE(hextolfp(str, &actual));
75290001Sglebius}
76