]>
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 | using namespace boost::spirit::ascii; | |
16 | ||
17 | /////////////////////////////////////////////////////////////////////// | |
18 | BOOST_TEST(test_delimited("0.0 ", double_, 0.0, char_(' '))); | |
19 | BOOST_TEST(test_delimited("1.0 ", double_, 1.0, char_(' '))); | |
20 | BOOST_TEST(test_delimited("1.0 ", double_, 1.0001, char_(' '))); | |
21 | BOOST_TEST(test_delimited("1.001 ", double_, 1.001, char_(' '))); | |
22 | BOOST_TEST(test_delimited("1.01 ", double_, 1.010, char_(' '))); | |
23 | BOOST_TEST(test_delimited("1.1 ", double_, 1.100, char_(' '))); | |
24 | ||
25 | BOOST_TEST(test_delimited("1.234e-04 ", double_, 0.00012345, char_(' '))); | |
26 | BOOST_TEST(test_delimited("0.001 ", double_, 0.0012345, char_(' '))); | |
27 | BOOST_TEST(test_delimited("0.012 ", double_, 0.012345, char_(' '))); | |
28 | BOOST_TEST(test_delimited("0.123 ", double_, 0.12345, char_(' '))); | |
29 | BOOST_TEST(test_delimited("1.234 ", double_, 1.2345, char_(' '))); | |
30 | BOOST_TEST(test_delimited("12.346 ", double_, 12.346, char_(' '))); | |
31 | BOOST_TEST(test_delimited("123.46 ", double_, 123.46, char_(' '))); | |
32 | BOOST_TEST(test_delimited("1234.5 ", double_, 1234.5, char_(' '))); | |
33 | BOOST_TEST(test_delimited("12342.0 ", double_, 12342., char_(' '))); | |
34 | BOOST_TEST(test_delimited("1.234e05 ", double_, 123420., char_(' '))); | |
35 | ||
36 | BOOST_TEST(test_delimited("-1.0 ", double_, -1.0, char_(' '))); | |
37 | BOOST_TEST(test_delimited("-1.234 ", double_, -1.2345, char_(' '))); | |
38 | BOOST_TEST(test_delimited("-1.235 ", double_, -1.2346, char_(' '))); | |
39 | BOOST_TEST(test_delimited("-1234.2 ", double_, -1234.2, char_(' '))); | |
40 | ||
41 | BOOST_TEST(test_delimited("1.0 ", double_(1.0), char_(' '))); | |
42 | BOOST_TEST(test_delimited("1.0 ", double_(1.0001), char_(' '))); | |
43 | BOOST_TEST(test_delimited("1.001 ", double_(1.001), char_(' '))); | |
44 | BOOST_TEST(test_delimited("1.01 ", double_(1.010), char_(' '))); | |
45 | BOOST_TEST(test_delimited("1.1 ", double_(1.100), char_(' '))); | |
46 | ||
47 | BOOST_TEST(test_delimited("1.234e-04 ", double_(0.00012345), char_(' '))); | |
48 | BOOST_TEST(test_delimited("0.001 ", double_(0.0012345), char_(' '))); | |
49 | BOOST_TEST(test_delimited("0.012 ", double_(0.012345), char_(' '))); | |
50 | BOOST_TEST(test_delimited("0.123 ", double_(0.12345), char_(' '))); | |
51 | BOOST_TEST(test_delimited("1.234 ", double_(1.2345), char_(' '))); | |
52 | BOOST_TEST(test_delimited("12.346 ", double_(12.346), char_(' '))); | |
53 | BOOST_TEST(test_delimited("123.46 ", double_(123.46), char_(' '))); | |
54 | BOOST_TEST(test_delimited("1234.5 ", double_(1234.5), char_(' '))); | |
55 | BOOST_TEST(test_delimited("12342.0 ", double_(12342.), char_(' '))); | |
56 | BOOST_TEST(test_delimited("1.234e05 ", double_(123420.), char_(' '))); | |
57 | } | |
58 | ||
59 | { | |
60 | using namespace boost::spirit::ascii; | |
61 | ||
62 | /////////////////////////////////////////////////////////////////////// | |
63 | // test NaN and Inf | |
64 | BOOST_TEST(test_delimited("nan ", double_, | |
65 | std::numeric_limits<double>::quiet_NaN(), char_(' '))); | |
66 | BOOST_TEST(test_delimited("-nan ", double_, | |
67 | -std::numeric_limits<double>::quiet_NaN(), char_(' '))); | |
68 | BOOST_TEST(test_delimited("inf ", double_, | |
69 | std::numeric_limits<double>::infinity(), char_(' '))); | |
70 | BOOST_TEST(test_delimited("-inf ", double_, | |
71 | -std::numeric_limits<double>::infinity(), char_(' '))); | |
72 | ||
73 | typedef karma::real_generator<double, signed_policy<double> > signed_type; | |
74 | signed_type const signed_ = signed_type(); | |
75 | ||
76 | BOOST_TEST(test_delimited("+nan ", signed_, | |
77 | std::numeric_limits<double>::quiet_NaN(), char_(' '))); | |
78 | BOOST_TEST(test_delimited("-nan ", signed_, | |
79 | -std::numeric_limits<double>::quiet_NaN(), char_(' '))); | |
80 | BOOST_TEST(test_delimited("+inf ", signed_, | |
81 | std::numeric_limits<double>::infinity(), char_(' '))); | |
82 | BOOST_TEST(test_delimited("-inf ", signed_, | |
83 | -std::numeric_limits<double>::infinity(), char_(' '))); | |
84 | #if defined(BOOST_SPIRIT_ZERO_PROBLEM) | |
85 | BOOST_TEST(test_delimited(" 0.0 ", signed_, 0.0, char_(' '))); | |
86 | #endif | |
87 | } | |
88 | ||
89 | { | |
90 | using namespace boost::spirit::ascii; | |
91 | ||
92 | /////////////////////////////////////////////////////////////////////// | |
93 | typedef karma::real_generator<double, scientific_policy<double> > | |
94 | science_type; | |
95 | science_type const science = science_type(); | |
96 | ||
97 | BOOST_TEST(test("0.0e00", science, 0.0)); | |
98 | BOOST_TEST(test("1.0e00", science, 1.0)); | |
99 | ||
100 | BOOST_TEST(test("1.234e-05", science, 0.000012345)); | |
101 | BOOST_TEST(test("1.234e-04", science, 0.00012345)); | |
102 | BOOST_TEST(test("1.234e-03", science, 0.0012345)); | |
1e59de90 | 103 | BOOST_TEST(test("1.235e-02", science, 0.012345)); |
7c673cae FG |
104 | BOOST_TEST(test("1.235e-01", science, 0.12345)); // note the rounding error! |
105 | BOOST_TEST(test("1.234e00", science, 1.2345)); | |
106 | BOOST_TEST(test("1.235e01", science, 12.346)); | |
107 | BOOST_TEST(test("1.235e02", science, 123.46)); | |
108 | BOOST_TEST(test("1.234e03", science, 1234.5)); | |
109 | BOOST_TEST(test("1.234e04", science, 12342.)); | |
110 | BOOST_TEST(test("1.234e05", science, 123420.)); | |
111 | ||
112 | BOOST_TEST(test("-1.234e-05", science, -0.000012345)); | |
113 | BOOST_TEST(test("-1.234e-04", science, -0.00012345)); | |
114 | BOOST_TEST(test("-1.234e-03", science, -0.0012345)); | |
1e59de90 | 115 | BOOST_TEST(test("-1.235e-02", science, -0.012345)); |
7c673cae FG |
116 | BOOST_TEST(test("-1.235e-01", science, -0.12345)); // note the rounding error! |
117 | BOOST_TEST(test("-1.234e00", science, -1.2345)); | |
118 | BOOST_TEST(test("-1.235e01", science, -12.346)); | |
119 | BOOST_TEST(test("-1.235e02", science, -123.46)); | |
120 | BOOST_TEST(test("-1.234e03", science, -1234.5)); | |
121 | BOOST_TEST(test("-1.234e04", science, -12342.)); | |
122 | BOOST_TEST(test("-1.234e05", science, -123420.)); | |
123 | ||
124 | BOOST_TEST(test("1.234E-05", upper[science], 0.000012345)); | |
125 | BOOST_TEST(test("1.234E-04", upper[science], 0.00012345)); | |
126 | BOOST_TEST(test("1.234E-03", upper[science], 0.0012345)); | |
1e59de90 | 127 | BOOST_TEST(test("1.235E-02", upper[science], 0.012345)); |
7c673cae FG |
128 | BOOST_TEST(test("1.235E-01", upper[science], 0.12345)); // note the rounding error! |
129 | BOOST_TEST(test("1.234E00", upper[science], 1.2345)); | |
130 | BOOST_TEST(test("1.235E01", upper[science], 12.346)); | |
131 | BOOST_TEST(test("1.235E02", upper[science], 123.46)); | |
132 | BOOST_TEST(test("1.234E03", upper[science], 1234.5)); | |
133 | BOOST_TEST(test("1.234E04", upper[science], 12342.)); | |
134 | BOOST_TEST(test("1.234E05", upper[science], 123420.)); | |
135 | ||
136 | BOOST_TEST(test("-1.234E-05", upper[science], -0.000012345)); | |
137 | BOOST_TEST(test("-1.234E-04", upper[science], -0.00012345)); | |
138 | BOOST_TEST(test("-1.234E-03", upper[science], -0.0012345)); | |
1e59de90 | 139 | BOOST_TEST(test("-1.235E-02", upper[science], -0.012345)); |
7c673cae FG |
140 | BOOST_TEST(test("-1.235E-01", upper[science], -0.12345)); // note the rounding error! |
141 | BOOST_TEST(test("-1.234E00", upper[science], -1.2345)); | |
142 | BOOST_TEST(test("-1.235E01", upper[science], -12.346)); | |
143 | BOOST_TEST(test("-1.235E02", upper[science], -123.46)); | |
144 | BOOST_TEST(test("-1.234E03", upper[science], -1234.5)); | |
145 | BOOST_TEST(test("-1.234E04", upper[science], -12342.)); | |
146 | BOOST_TEST(test("-1.234E05", upper[science], -123420.)); | |
147 | } | |
148 | ||
149 | { | |
150 | BOOST_TEST(test("1.0", lit(1.0))); | |
151 | BOOST_TEST(test("1.0", lit(1.0f))); | |
152 | BOOST_TEST(test("1.0", lit(1.0l))); | |
153 | ||
154 | BOOST_TEST(test("1.0", double_(1.0), 1.0)); | |
155 | BOOST_TEST(test("1.0", float_(1.0), 1.0f)); | |
156 | BOOST_TEST(test("1.0", long_double(1.0), 1.0l)); | |
157 | BOOST_TEST(!test("", double_(1.0), 2.0)); | |
158 | BOOST_TEST(!test("", float_(1.0), 2.0f)); | |
159 | BOOST_TEST(!test("", long_double(1.0), 2.0l)); | |
160 | } | |
161 | ||
162 | return boost::report_errors(); | |
163 | } |