1 #define _STLP_DO_IMPORT_CSTD_FUNCTIONS
5 //We also test math functions imported from stdlib.h or
10 #include "cppunit/cppunit_proxy.h"
12 //This test purpose is to check the right import of math.h C symbols
13 //into the std namespace so we do not use the using namespace std
19 class CMathTest
: public CPPUNIT_NS::TestCase
21 CPPUNIT_TEST_SUITE(CMathTest
);
22 #if defined (STLPORT) && !defined (_STLP_USE_NAMESPACES)
25 CPPUNIT_TEST(import_checks
);
26 CPPUNIT_TEST_SUITE_END();
32 CPPUNIT_TEST_SUITE_REGISTRATION(CMathTest
);
35 // tests implementation
37 void CMathTest::import_checks()
39 #if !defined (STLPORT) || defined (_STLP_USE_NAMESPACES)
42 float float_val
= -1.0f
;
43 double double_val
= -1.0;
44 # if !defined (_STLP_NO_LONG_DOUBLE)
45 long double long_double_val
= -1.0l;
48 CPPUNIT_CHECK( are_equals(std::abs(int_val
), -int_val
) );
49 CPPUNIT_CHECK( are_equals(std::abs(long_val
), -long_val
) );
50 CPPUNIT_CHECK( are_equals(std::labs(long_val
), -long_val
) );
51 CPPUNIT_CHECK( are_equals(std::abs(float_val
), -float_val
) );
52 CPPUNIT_CHECK( are_equals(std::abs(double_val
), -double_val
) );
53 # if !defined (_STLP_NO_LONG_DOUBLE)
54 CPPUNIT_CHECK( are_equals(std::abs(long_double_val
), -long_double_val
) );
57 CPPUNIT_CHECK( are_equals(std::fabs(float_val
), -float_val
) );
58 CPPUNIT_CHECK( are_equals(std::fabs(double_val
), -double_val
) );
59 # if !defined (_STLP_NO_LONG_DOUBLE)
60 CPPUNIT_CHECK( are_equals(std::fabs(long_double_val
), -long_double_val
) );
63 std::div_t div_res
= std::div(3, 2);
64 CPPUNIT_CHECK( div_res
.quot
== 1 );
65 CPPUNIT_CHECK( div_res
.rem
== 1 );
66 std::ldiv_t ldiv_res
= std::ldiv(3l, 2l);
67 CPPUNIT_CHECK( ldiv_res
.quot
== 1l );
68 CPPUNIT_CHECK( ldiv_res
.rem
== 1l );
69 ldiv_res
= std::div(3l, 2l);
70 CPPUNIT_CHECK( ldiv_res
.quot
== 1l );
71 CPPUNIT_CHECK( ldiv_res
.rem
== 1l );
74 int rand_val
= std::rand();
75 CPPUNIT_CHECK( rand_val
>= 0 && rand_val
<= RAND_MAX
);
77 CPPUNIT_CHECK( are_equals(std::floor(1.5), 1.0) );
78 CPPUNIT_CHECK( are_equals(std::ceil(1.5), 2.0) );
79 CPPUNIT_CHECK( are_equals(std::fmod(1.5, 1.0), 0.5) );
80 CPPUNIT_CHECK( are_equals(std::sqrt(4.0), 2.0) );
81 CPPUNIT_CHECK( are_equals(std::pow(2.0, 2), 4.0) );
83 * Uncomment the following to check that it generates an ambiguous call
84 * as there is no Standard pow(int, int) function only pow(double, int),
85 * pow(float, int) and some others...
86 * If it do not generate a compile time error it should at least give
89 //CPPUNIT_CHECK( are_equals(std::pow(10, -2), 0.01) );
90 CPPUNIT_CHECK( are_equals(std::pow(10.0, -2), 0.01) );
91 CPPUNIT_CHECK( are_equals(std::exp(0.0), 1.0) );
92 CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0)), 1.0) );
93 CPPUNIT_CHECK( are_equals(std::log10(100.0), 2.0) );
94 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)
95 CPPUNIT_CHECK( are_equals(std::modf(100.5, &double_val
), 0.5) );
96 CPPUNIT_CHECK( are_equals(double_val
, 100.0) );
98 double_val
= std::frexp(8.0, &int_val
);
99 CPPUNIT_CHECK( are_equals(double_val
* std::pow(2.0, int_val
), 8.0) );
100 CPPUNIT_CHECK( are_equals(std::ldexp(1.0, 2), 4.0) );
101 CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0)), 1.0) );
102 CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0)), 1.0) );
103 CPPUNIT_CHECK( are_equals(std::tan(std::atan(1.0)), 1.0) );
104 CPPUNIT_CHECK( are_equals(std::tan(std::atan2(1.0, 1.0)), 1.0) );
105 CPPUNIT_CHECK( are_equals(std::cosh(0.0), 1.0) );
106 CPPUNIT_CHECK( are_equals(std::sinh(0.0), 0.0) );
107 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)
108 CPPUNIT_CHECK( are_equals(std::tanh(0.0), 0.0) );
111 CPPUNIT_CHECK( are_equals(std::floor(1.5f
), 1.0f
) );
112 CPPUNIT_CHECK( are_equals(std::ceil(1.5f
), 2.0f
) );
113 CPPUNIT_CHECK( are_equals(std::fmod(1.5f
, 1.0f
), 0.5f
) );
114 CPPUNIT_CHECK( are_equals(std::sqrt(4.0f
), 2.0f
) );
115 CPPUNIT_CHECK( are_equals(std::pow(2.0f
, 2), 4.0f
) );
116 CPPUNIT_CHECK( are_equals(std::exp(0.0f
), 1.0f
) );
117 CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0f
)), 1.0f
) );
118 CPPUNIT_CHECK( are_equals(std::log10(100.0f
), 2.0f
) );
119 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)
120 CPPUNIT_CHECK( are_equals(std::modf(100.5f
, &float_val
), 0.5f
) );
121 CPPUNIT_CHECK( are_equals(float_val
, 100.0f
) );
123 float_val
= std::frexp(8.0f
, &int_val
);
124 CPPUNIT_CHECK( are_equals(float_val
* std::pow(2.0f
, int_val
), 8.0f
) );
125 CPPUNIT_CHECK( are_equals(std::ldexp(1.0f
, 2), 4.0f
) );
126 CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0f
)), 1.0f
) );
127 CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0f
)), 1.0f
) );
128 CPPUNIT_CHECK( are_equals(std::tan(std::atan(1.0f
)), 1.0f
) );
129 CPPUNIT_CHECK( are_equals(std::tan(std::atan2(1.0f
, 1.0f
)), 1.0f
) );
130 CPPUNIT_CHECK( are_equals(std::cosh(0.0f
), 1.0f
) );
131 CPPUNIT_CHECK( are_equals(std::sinh(0.0f
), 0.0f
) );
132 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)
133 CPPUNIT_CHECK( are_equals(std::tanh(0.0f
), 0.0f
) );
136 # if !defined (_STLP_NO_LONG_DOUBLE)
137 CPPUNIT_CHECK( are_equals(std::floor(1.5l), 1.0l) );
138 CPPUNIT_CHECK( are_equals(std::ceil(1.5l), 2.0l) );
139 CPPUNIT_CHECK( are_equals(std::fmod(1.5l, 1.0l), 0.5l) );
140 CPPUNIT_CHECK( are_equals(std::sqrt(4.0l), 2.0l) );
141 CPPUNIT_CHECK( are_equals(std::pow(2.0l, 2), 4.0l) );
142 CPPUNIT_CHECK( are_equals(std::exp(0.0l), 1.0l) );
143 CPPUNIT_CHECK( are_equals(std::log(std::exp(1.0l)), 1.0l) );
144 CPPUNIT_CHECK( are_equals(std::log10(100.0l), 2.0l) );
145 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_WIN64)
146 CPPUNIT_CHECK( are_equals(std::modf(100.5l, &long_double_val
), 0.5l) );
147 CPPUNIT_CHECK( are_equals(long_double_val
, 100.0l) );
149 long_double_val
= std::frexp(8.0l, &int_val
);
150 CPPUNIT_CHECK( are_equals(long_double_val
* std::pow(2.0l, int_val
), 8.0l) );
151 CPPUNIT_CHECK( are_equals(std::ldexp(1.0l, 2), 4.0l) );
152 CPPUNIT_CHECK( are_equals(std::cos(std::acos(1.0l)), 1.0l) );
153 CPPUNIT_CHECK( are_equals(std::sin(std::asin(1.0l)), 1.0l) );
154 CPPUNIT_CHECK( are_equals(std::tan(0.0l), 0.0l) );
155 CPPUNIT_CHECK( are_equals(std::atan(0.0l), 0.0l) );
156 CPPUNIT_CHECK( are_equals(std::atan2(0.0l, 1.0l), 0.0l) );
157 CPPUNIT_CHECK( are_equals(std::cosh(0.0l), 1.0l) );
158 CPPUNIT_CHECK( are_equals(std::sinh(0.0l), 0.0l) );
159 # if !defined (STLPORT) || !defined (_STLP_USING_PLATFORM_SDK_COMPILER) || !defined (_M_AMD64)
160 CPPUNIT_CHECK( are_equals(std::tanh(0.0l), 0.0l) );
164 CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0))), 2.0) );
165 CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0f
))), 2.0f
) );
166 # if !defined (_STLP_NO_LONG_DOUBLE)
167 CPPUNIT_CHECK( are_equals(std::sqrt(std::sqrt(std::sqrt(256.0l))), 2.0l) );