171345Sgshapiro/*	$NetBSD: hextolfp.c,v 1.2 2020/05/25 20:47:36 christos Exp $	*/
271345Sgshapiro
3173340Sgshapiro#include "config.h"
471345Sgshapiro
571345Sgshapiro#include "ntp_stdlib.h"
671345Sgshapiro#include "ntp_calendar.h"
771345Sgshapiro
871345Sgshapiro#include "unity.h"
971345Sgshapiro#include "lfptest.h"
1071345Sgshapiro
1171345Sgshapirovoid test_PositiveInteger(void);
1271345Sgshapirovoid test_NegativeInteger(void);
1371345Sgshapirovoid test_PositiveFraction(void);
1471345Sgshapirovoid test_NegativeFraction(void);
1571345Sgshapirovoid test_IllegalNumberOfInteger(void);
1671345Sgshapirovoid test_IllegalChar(void);
1771345Sgshapiro
1871345Sgshapiro
1971345Sgshapirovoid
2071345Sgshapirotest_PositiveInteger(void) {
2171345Sgshapiro	const char *str = "00001000.00000000";
2271345Sgshapiro	l_fp actual;
2371345Sgshapiro
2471345Sgshapiro	l_fp expected = {{4096}, 0}; /* 16^3, no fraction part. */
2571345Sgshapiro
2671345Sgshapiro	TEST_ASSERT_TRUE(hextolfp(str, &actual));
2771345Sgshapiro	TEST_ASSERT_TRUE(IsEqual(expected, actual));
2871345Sgshapiro}
2971345Sgshapiro
30266692Sgshapirovoid
3171345Sgshapirotest_NegativeInteger(void) {
3271345Sgshapiro	const char *str = "ffffffff.00000000"; /* -1 decimal */
3371345Sgshapiro	l_fp actual;
3471345Sgshapiro
3571345Sgshapiro	l_fp expected = {{-1}, 0};
3671345Sgshapiro
3771345Sgshapiro	TEST_ASSERT_TRUE(hextolfp(str, &actual));
38112810Sgshapiro	TEST_ASSERT_TRUE(IsEqual(expected, actual));
3971345Sgshapiro}
4071345Sgshapiro
4171345Sgshapirovoid
4271345Sgshapirotest_PositiveFraction(void) {
4371345Sgshapiro	const char *str = "00002000.80000000"; /* 8196.5 decimal */
4471345Sgshapiro	l_fp actual;
4571345Sgshapiro
4671345Sgshapiro	l_fp expected = {{8192}, HALF};
4771345Sgshapiro
4873188Sgshapiro	TEST_ASSERT_TRUE(hextolfp(str, &actual));
4973188Sgshapiro	TEST_ASSERT_TRUE(IsEqual(expected, actual));
5073188Sgshapiro}
5173188Sgshapiro
5271345Sgshapirovoid
5394334Sgshapirotest_NegativeFraction(void) {
5494334Sgshapiro	const char *str = "ffffffff.40000000"; /* -1 + 0.25 decimal */
5594334Sgshapiro	l_fp actual;
56112810Sgshapiro
57112810Sgshapiro	l_fp expected = {{-1}, QUARTER}; /* -1 + 0.25 */
58112810Sgshapiro
5971345Sgshapiro	TEST_ASSERT_TRUE(hextolfp(str, &actual));
6071345Sgshapiro	TEST_ASSERT_TRUE(IsEqual(expected, actual));
6171345Sgshapiro}
6271345Sgshapiro
6371345Sgshapirovoid
6471345Sgshapirotest_IllegalNumberOfInteger(void) {
6571345Sgshapiro	const char *str = "1000000.00000000"; /* Missing one digit in integral part. */
6671345Sgshapiro	l_fp actual;
6771345Sgshapiro
6871345Sgshapiro	TEST_ASSERT_FALSE(hextolfp(str, &actual));
6971345Sgshapiro}
7071345Sgshapiro
7171345Sgshapirovoid
7271345Sgshapirotest_IllegalChar(void) {
73173340Sgshapiro	const char *str = "10000000.0000h000"; /* Illegal character h. */
7471345Sgshapiro	l_fp actual;
75173340Sgshapiro
7671345Sgshapiro	TEST_ASSERT_FALSE(hextolfp(str, &actual));
7771345Sgshapiro}
78173340Sgshapiro