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