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