]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | // Copyright (c) 2001-2011 Hartmut Kaiser |
2 | // Copyright (c) 2011 Bryce Lelbach | |
3 | // | |
4 | // Distributed under the Boost Software License, Version 1.0. (See accompanying | |
5 | // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) | |
6 | ||
7c673cae FG |
7 | #include "real.hpp" |
8 | ||
9 | /////////////////////////////////////////////////////////////////////////////// | |
10 | int main() | |
11 | { | |
12 | using namespace boost::spirit; | |
13 | ||
14 | { | |
15 | /////////////////////////////////////////////////////////////////////// | |
16 | // use the default real_policies | |
17 | BOOST_TEST(test("0.0", double_, 0.0)); | |
18 | BOOST_TEST(test("1.0", double_, 1.0)); | |
19 | BOOST_TEST(test("1.0", double_, 1.0001)); | |
20 | BOOST_TEST(test("1.001", double_, 1.001)); | |
21 | BOOST_TEST(test("1.01", double_, 1.010)); | |
22 | BOOST_TEST(test("1.1", double_, 1.100)); | |
23 | ||
24 | BOOST_TEST(test("1.234e-04", double_, 0.00012345)); | |
25 | BOOST_TEST(test("0.001", double_, 0.0012345)); | |
26 | BOOST_TEST(test("0.012", double_, 0.012345)); | |
27 | BOOST_TEST(test("0.123", double_, 0.12345)); | |
28 | BOOST_TEST(test("1.234", double_, 1.2345)); | |
29 | BOOST_TEST(test("12.346", double_, 12.346)); | |
30 | BOOST_TEST(test("123.46", double_, 123.46)); | |
31 | BOOST_TEST(test("1234.5", double_, 1234.5)); | |
32 | BOOST_TEST(test("12342.0", double_, 12342.)); | |
33 | BOOST_TEST(test("1.234e05", double_, 123420.)); | |
34 | ||
35 | BOOST_TEST(test("-1.0", double_, -1.0)); | |
36 | BOOST_TEST(test("-1.234", double_, -1.2345)); | |
37 | BOOST_TEST(test("-1.235", double_, -1.2346)); | |
38 | BOOST_TEST(test("-1234.2", double_, -1234.2)); | |
39 | ||
40 | BOOST_TEST(test("1.0", double_(1.0))); | |
41 | BOOST_TEST(test("1.0", double_(1.0001))); | |
42 | BOOST_TEST(test("1.001", double_(1.001))); | |
43 | BOOST_TEST(test("1.01", double_(1.010))); | |
44 | BOOST_TEST(test("1.1", double_(1.100))); | |
45 | ||
46 | BOOST_TEST(test("1.234e-04", double_(0.00012345))); | |
47 | BOOST_TEST(test("0.001", double_(0.0012345))); | |
48 | BOOST_TEST(test("0.012", double_(0.012345))); | |
49 | BOOST_TEST(test("0.123", double_(0.12345))); | |
50 | BOOST_TEST(test("1.234", double_(1.2345))); | |
51 | BOOST_TEST(test("12.346", double_(12.346))); | |
52 | BOOST_TEST(test("123.46", double_(123.46))); | |
53 | BOOST_TEST(test("1234.5", double_(1234.5))); | |
54 | BOOST_TEST(test("12342.0", double_(12342.))); | |
55 | BOOST_TEST(test("1.234e05", double_(123420.))); | |
56 | } | |
57 | ||
58 | { | |
59 | /////////////////////////////////////////////////////////////////////// | |
60 | // test NaN and Inf | |
61 | BOOST_TEST(test("nan", double_, std::numeric_limits<double>::quiet_NaN())); | |
62 | BOOST_TEST(test("-nan", double_, -std::numeric_limits<double>::quiet_NaN())); | |
63 | BOOST_TEST(test("inf", double_, std::numeric_limits<double>::infinity())); | |
64 | BOOST_TEST(test("-inf", double_, -std::numeric_limits<double>::infinity())); | |
65 | ||
66 | typedef karma::real_generator<double, signed_policy<double> > signed_type; | |
67 | signed_type const signed_ = signed_type(); | |
68 | ||
69 | BOOST_TEST(test("+nan", signed_, std::numeric_limits<double>::quiet_NaN())); | |
70 | BOOST_TEST(test("-nan", signed_, -std::numeric_limits<double>::quiet_NaN())); | |
71 | BOOST_TEST(test("+inf", signed_, std::numeric_limits<double>::infinity())); | |
72 | BOOST_TEST(test("-inf", signed_, -std::numeric_limits<double>::infinity())); | |
73 | #if defined(BOOST_SPIRIT_ZERO_PROBLEM) | |
74 | BOOST_TEST(test(" 0.0", signed_, 0.0)); | |
75 | #endif | |
76 | ||
77 | BOOST_TEST(test("+nan", signed_(std::numeric_limits<double>::quiet_NaN()))); | |
78 | BOOST_TEST(test("-nan", signed_(-std::numeric_limits<double>::quiet_NaN()))); | |
79 | BOOST_TEST(test("+inf", signed_(std::numeric_limits<double>::infinity()))); | |
80 | BOOST_TEST(test("-inf", signed_(-std::numeric_limits<double>::infinity()))); | |
81 | #if defined(BOOST_SPIRIT_ZERO_PROBLEM) | |
82 | BOOST_TEST(test(" 0.0", signed_(0.0))); | |
83 | #endif | |
84 | } | |
85 | ||
86 | { | |
87 | /////////////////////////////////////////////////////////////////////// | |
88 | typedef karma::real_generator<double, statefull_policy<double> > | |
89 | statefull_type; | |
90 | ||
91 | statefull_policy<double> policy(5, true); | |
92 | statefull_type const statefull = statefull_type(policy); | |
93 | ||
94 | BOOST_TEST(test("0.00000", statefull, 0.0)); | |
95 | BOOST_TEST(test("0.00000", statefull(0.0))); | |
96 | ||
97 | using namespace boost::phoenix; | |
98 | BOOST_TEST(test("0.00000", statefull(val(0.0)))); | |
99 | } | |
100 | ||
101 | { | |
102 | /////////////////////////////////////////////////////////////////////// | |
103 | typedef karma::real_generator<double, trailing_zeros_policy<double> > | |
104 | trailing_zeros_type; | |
105 | trailing_zeros_type const trail_zeros = trailing_zeros_type(); | |
106 | ||
107 | BOOST_TEST(test("0.0000", trail_zeros, 0.0)); | |
108 | BOOST_TEST(test("1.0000", trail_zeros, 1.0)); | |
109 | BOOST_TEST(test("1.0001", trail_zeros, 1.0001)); | |
110 | BOOST_TEST(test("1.0010", trail_zeros, 1.001)); | |
111 | BOOST_TEST(test("1.0100", trail_zeros, 1.010)); | |
112 | BOOST_TEST(test("1.1000", trail_zeros, 1.100)); | |
113 | ||
114 | BOOST_TEST(test("1.2345e-04", trail_zeros, 0.00012345)); | |
115 | BOOST_TEST(test("0.0012", trail_zeros, 0.0012345)); | |
116 | BOOST_TEST(test("0.0123", trail_zeros, 0.012345)); | |
117 | BOOST_TEST(test("0.1235", trail_zeros, 0.12345)); | |
118 | BOOST_TEST(test("1.2345", trail_zeros, 1.2345)); | |
119 | BOOST_TEST(test("12.3460", trail_zeros, 12.346)); | |
120 | BOOST_TEST(test("123.4600", trail_zeros, 123.46)); | |
121 | BOOST_TEST(test("1234.5000", trail_zeros, 1234.5)); | |
122 | BOOST_TEST(test("12342.0000", trail_zeros, 12342.)); | |
123 | BOOST_TEST(test("1.2342e05", trail_zeros, 123420.)); | |
124 | ||
125 | BOOST_TEST(test("-1.0000", trail_zeros, -1.0)); | |
126 | BOOST_TEST(test("-1.2345", trail_zeros, -1.2345)); | |
127 | BOOST_TEST(test("-1.2346", trail_zeros, -1.2346)); | |
128 | BOOST_TEST(test("-1234.2000", trail_zeros, -1234.2)); | |
129 | ||
130 | BOOST_TEST(test("1.0000", trail_zeros(1.0))); | |
131 | BOOST_TEST(test("1.0001", trail_zeros(1.0001))); | |
132 | BOOST_TEST(test("1.0010", trail_zeros(1.001))); | |
133 | BOOST_TEST(test("1.0100", trail_zeros(1.010))); | |
134 | BOOST_TEST(test("1.1000", trail_zeros(1.100))); | |
135 | ||
136 | BOOST_TEST(test("1.2345e-04", trail_zeros(0.00012345))); | |
137 | BOOST_TEST(test("0.0012", trail_zeros(0.0012345))); | |
138 | BOOST_TEST(test("0.0123", trail_zeros(0.012345))); | |
139 | BOOST_TEST(test("0.1235", trail_zeros(0.12345))); | |
140 | BOOST_TEST(test("1.2345", trail_zeros(1.2345))); | |
141 | BOOST_TEST(test("12.3460", trail_zeros(12.346))); | |
142 | BOOST_TEST(test("123.4600", trail_zeros(123.46))); | |
143 | BOOST_TEST(test("1234.5000", trail_zeros(1234.5))); | |
144 | BOOST_TEST(test("12342.0000", trail_zeros(12342.))); | |
145 | BOOST_TEST(test("1.2342e05", trail_zeros(123420.))); | |
146 | } | |
147 | ||
148 | { | |
149 | using namespace boost::spirit::ascii; | |
150 | ||
151 | /////////////////////////////////////////////////////////////////////// | |
152 | // test NaN and Inf | |
153 | BOOST_TEST(test("NAN", upper[double_], | |
154 | std::numeric_limits<double>::quiet_NaN())); | |
155 | BOOST_TEST(test("-NAN", upper[double_], | |
156 | -std::numeric_limits<double>::quiet_NaN())); | |
157 | BOOST_TEST(test("INF", upper[double_], | |
158 | std::numeric_limits<double>::infinity())); | |
159 | BOOST_TEST(test("-INF", upper[double_], | |
160 | -std::numeric_limits<double>::infinity())); | |
161 | ||
162 | typedef karma::real_generator<double, signed_policy<double> > signed_type; | |
163 | signed_type const signed_ = signed_type(); | |
164 | ||
165 | BOOST_TEST(test("+NAN", upper[signed_], | |
166 | std::numeric_limits<double>::quiet_NaN())); | |
167 | BOOST_TEST(test("-NAN", upper[signed_], | |
168 | -std::numeric_limits<double>::quiet_NaN())); | |
169 | BOOST_TEST(test("+INF", upper[signed_], | |
170 | std::numeric_limits<double>::infinity())); | |
171 | BOOST_TEST(test("-INF", upper[signed_], | |
172 | -std::numeric_limits<double>::infinity())); | |
173 | #if defined(BOOST_SPIRIT_ZERO_PROBLEM) | |
174 | BOOST_TEST(test(" 0.0", upper[signed_], 0.0)); | |
175 | #endif | |
176 | } | |
177 | ||
178 | ||
179 | return boost::report_errors(); | |
180 | } |