buftvtots.c revision 285830
1255130Srpaulo#include "config.h" 2255130Srpaulo#include "ntp_types.h" 3255130Srpaulo#include "ntp_stdlib.h" 4255130Srpaulo 5255130Srpaulo#include "lfptest.h" 6255130Srpaulo 7255130Srpaulo#include "ntp_unixtime.h" 8255130Srpaulo 9255130Srpaulo#include "unity.h" 10255130Srpaulo 11255130Srpaulo// Required for Solaris. 12255130Srpaulo#include <math.h> 13255130Srpaulo 14255130Srpaulo 15255130Srpaulo 16255130Srpaulovoid test_ZeroBuffer() { 17255130Srpaulo#ifndef SYS_WINNT 18255130Srpaulo const struct timeval input = {0, 0}; 19255130Srpaulo const l_fp expected = {0 + JAN_1970, 0}; 20255130Srpaulo 21255130Srpaulo l_fp actual; 22255130Srpaulo 23255130Srpaulo TEST_ASSERT_TRUE(buftvtots((const char*)(&input), &actual)); 24255130Srpaulo TEST_ASSERT_TRUE(IsEqual(expected, actual)); 25255130Srpaulo#else 26255130Srpaulo TEST_IGNORE_MESSAGE("Test only for Windows, skipping..."); 27255130Srpaulo#endif 28255130Srpaulo} 29255130Srpaulo 30255130Srpaulovoid test_IntegerAndFractionalBuffer() { 31255130Srpaulo#ifndef SYS_WINNT 32255130Srpaulo const struct timeval input = {5, 500000}; // 5.5 33255130Srpaulo const l_fp expected = {5 + JAN_1970, HALF}; 34255130Srpaulo 35255130Srpaulo l_fp actual; 36255130Srpaulo 37255130Srpaulo TEST_ASSERT_TRUE(buftvtots((const char*)(&input), &actual)); 38255130Srpaulo 39255130Srpaulo // Compare the fractional part with an absolute error given. 40255130Srpaulo TEST_ASSERT_EQUAL(expected.l_ui, actual.l_ui); 41255130Srpaulo 42255130Srpaulo double expectedDouble, actualDouble; 43255130Srpaulo M_LFPTOD(0, expected.l_uf, expectedDouble); 44266362Sian M_LFPTOD(0, actual.l_uf, actualDouble); 45266362Sian 46255130Srpaulo // The error should be less than 0.5 us 47255130Srpaulo TEST_ASSERT_DOUBLE_WITHIN(0.0000005,expectedDouble,actualDouble); //delta,epected,actual //_EXPECT_NEAR(expectedDouble, actualDouble, 0.0000005); 48255130Srpaulo#else 49255130Srpaulo TEST_IGNORE_MESSAGE("Test only for Windows, skipping..."); 50255130Srpaulo#endif 51255130Srpaulo} 52255130Srpaulo 53255130Srpaulovoid test_IllegalMicroseconds() { 54255130Srpaulo#ifndef SYS_WINNT 55255130Srpaulo const struct timeval input = {0, 1100000}; // > 999 999 microseconds. 56255130Srpaulo 57255130Srpaulo l_fp actual; 58255130Srpaulo 59255130Srpaulo TEST_ASSERT_FALSE(buftvtots((const char*)(&input), &actual)); 60255130Srpaulo#else 61255130Srpaulo TEST_IGNORE_MESSAGE("Test only for Windows, skipping..."); 62255130Srpaulo#endif 63255130Srpaulo} 64255130Srpaulo 65255130Srpaulo 66255130Srpaulovoid test_AlwaysFalseOnWindows() { 67255130Srpaulo#ifdef SYS_WINNT 68255130Srpaulo /* 69255130Srpaulo * Under Windows, buftvtots will just return 70255130Srpaulo * 0 (false). 71255130Srpaulo */ 72255130Srpaulo l_fp actual; 73255130Srpaulo TEST_ASSERT_FALSE(buftvtots("", &actual)); 74256804Sian#else 75255130Srpaulo TEST_IGNORE_MESSAGE("Non-Windows test, skipping..."); 76256804Sian#endif 77255130Srpaulo} 78255130Srpaulo 79255130Srpaulo