1/* $NetBSD: strtolfp.c,v 1.2 2020/05/25 20:47:36 christos Exp $ */ 2 3#include "config.h" 4 5#include "ntp_stdlib.h" 6#include "ntp_calendar.h" 7 8#include "unity.h" 9#include "lfptest.h" 10 11/* This file tests both atolfp and mstolfp */ 12 13void setUp(void); 14void test_PositiveInteger(void); 15void test_NegativeInteger(void); 16void test_PositiveFraction(void); 17void test_NegativeFraction(void); 18void test_PositiveMsFraction(void); 19void test_NegativeMsFraction(void); 20void test_InvalidChars(void); 21 22 23void 24setUp(void) 25{ 26 init_lib(); 27 28 return; 29} 30 31 32void test_PositiveInteger(void) { 33 const char *str = "500"; 34 const char *str_ms = "500000"; 35 36 l_fp expected = {{500},0}; 37 l_fp actual, actual_ms; 38 39 TEST_ASSERT_TRUE(atolfp(str, &actual)); 40 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 41 42 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 43 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 44} 45 46void test_NegativeInteger(void) { 47 const char *str = "-300"; 48 const char *str_ms = "-300000"; 49 50 l_fp expected; 51 expected.l_i = -300; 52 expected.l_uf = 0; 53 54 l_fp actual, actual_ms; 55 56 TEST_ASSERT_TRUE(atolfp(str, &actual)); 57 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 58 59 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 60 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 61} 62 63void test_PositiveFraction(void) { 64 const char *str = "+500.5"; 65 const char *str_ms = "500500.0"; 66 67 l_fp expected = {{500}, HALF}; 68 l_fp actual, actual_ms; 69 70 TEST_ASSERT_TRUE(atolfp(str, &actual)); 71 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 72 73 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 74 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 75} 76 77void test_NegativeFraction(void) { 78 const char *str = "-300.75"; 79 const char *str_ms = "-300750"; 80 81 l_fp expected; 82 expected.l_i = -301; 83 expected.l_uf = QUARTER; 84 85 l_fp actual, actual_ms; 86 87 TEST_ASSERT_TRUE(atolfp(str, &actual)); 88 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 89 90 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 91 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 92} 93 94void test_PositiveMsFraction(void) { 95 const char *str = "300.00025"; 96 const char *str_ms = "300000.25"; 97 98 l_fp expected = {{300}, QUARTER_PROMILLE_APPRX}; 99 l_fp actual, actual_ms; 100 101 102 TEST_ASSERT_TRUE(atolfp(str, &actual)); 103 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 104 105 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 106 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 107 108} 109 110void test_NegativeMsFraction(void) { 111 const char *str = "-199.99975"; 112 const char *str_ms = "-199999.75"; 113 114 l_fp expected; 115 expected.l_i = -200; 116 expected.l_uf = QUARTER_PROMILLE_APPRX; 117 118 l_fp actual, actual_ms; 119 120 TEST_ASSERT_TRUE(atolfp(str, &actual)); 121 TEST_ASSERT_TRUE(mstolfp(str_ms, &actual_ms)); 122 123 TEST_ASSERT_TRUE(IsEqual(expected, actual)); 124 TEST_ASSERT_TRUE(IsEqual(expected, actual_ms)); 125 126} 127 128void test_InvalidChars(void) { 129 const char *str = "500.4a2"; 130 l_fp actual, actual_ms; 131 132 TEST_ASSERT_FALSE(atolfp(str, &actual)); 133 TEST_ASSERT_FALSE(mstolfp(str, &actual_ms)); 134} 135 136