]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | /*============================================================================= |
2 | Copyright (c) 2001-2015 Joel de Guzman | |
3 | Copyright (c) 2001-2011 Hartmut Kaiser | |
4 | Copyright (c) 2011 Bryce Lelbach | |
5 | ||
6 | Use, modification and distribution is subject to the Boost Software | |
7 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at | |
8 | http://www.boost.org/LICENSE_1_0.txt) | |
9 | =============================================================================*/ | |
10 | ||
11 | #include "real.hpp" | |
12 | ||
13 | int | |
14 | main() | |
15 | { | |
16 | using spirit_test::test; | |
17 | using spirit_test::test_attr; | |
18 | ||
19 | /////////////////////////////////////////////////////////////////////////// | |
20 | // thousand separated numbers | |
21 | /////////////////////////////////////////////////////////////////////////// | |
22 | { | |
23 | using boost::spirit::x3::uint_parser; | |
24 | using boost::spirit::x3::parse; | |
25 | ||
26 | uint_parser<unsigned, 10, 1, 3> uint3; | |
27 | uint_parser<unsigned, 10, 3, 3> uint3_3; | |
28 | ||
29 | #define r (uint3 >> *(',' >> uint3_3)) | |
30 | ||
31 | BOOST_TEST(test("1,234,567,890", r)); | |
32 | BOOST_TEST(test("12,345,678,900", r)); | |
33 | BOOST_TEST(test("123,456,789,000", r)); | |
34 | BOOST_TEST(!test("1000,234,567,890", r)); | |
35 | BOOST_TEST(!test("1,234,56,890", r)); | |
36 | BOOST_TEST(!test("1,66", r)); | |
37 | } | |
38 | ||
39 | /////////////////////////////////////////////////////////////////////////// | |
40 | // unsigned real number tests | |
41 | /////////////////////////////////////////////////////////////////////////// | |
42 | { | |
43 | using boost::spirit::x3::real_parser; | |
44 | using boost::spirit::x3::parse; | |
45 | using boost::spirit::x3::ureal_policies; | |
46 | ||
f67539c2 | 47 | constexpr real_parser<double, ureal_policies<double> > udouble; |
7c673cae FG |
48 | double d; |
49 | ||
f67539c2 TL |
50 | BOOST_SPIRIT_ASSERT_CONSTEXPR_CTORS(udouble); |
51 | ||
7c673cae FG |
52 | BOOST_TEST(test("1234", udouble)); |
53 | BOOST_TEST(test_attr("1234", udouble, d) && compare(d, 1234)); | |
54 | ||
55 | BOOST_TEST(test("1.2e3", udouble)); | |
56 | BOOST_TEST(test_attr("1.2e3", udouble, d) && compare(d, 1.2e3)); | |
57 | ||
58 | BOOST_TEST(test("1.2e-3", udouble)); | |
59 | BOOST_TEST(test_attr("1.2e-3", udouble, d) && compare(d, 1.2e-3)); | |
60 | ||
61 | BOOST_TEST(test("1.e2", udouble)); | |
62 | BOOST_TEST(test_attr("1.e2", udouble, d) && compare(d, 1.e2)); | |
63 | ||
64 | BOOST_TEST(test("1.", udouble)); | |
65 | BOOST_TEST(test_attr("1.", udouble, d) && compare(d, 1.)); | |
66 | ||
67 | BOOST_TEST(test(".2e3", udouble)); | |
68 | BOOST_TEST(test_attr(".2e3", udouble, d) && compare(d, .2e3)); | |
69 | ||
70 | BOOST_TEST(test("2e3", udouble)); | |
71 | BOOST_TEST(test_attr("2e3", udouble, d) && compare(d, 2e3)); | |
72 | ||
73 | BOOST_TEST(test("2", udouble)); | |
74 | BOOST_TEST(test_attr("2", udouble, d) && compare(d, 2)); | |
75 | ||
76 | using boost::math::fpclassify; | |
77 | BOOST_TEST(test("inf", udouble)); | |
78 | BOOST_TEST(test("infinity", udouble)); | |
79 | BOOST_TEST(test("INF", udouble)); | |
80 | BOOST_TEST(test("INFINITY", udouble)); | |
81 | ||
82 | BOOST_TEST(test_attr("inf", udouble, d) | |
83 | && FP_INFINITE == fpclassify(d)); | |
84 | BOOST_TEST(test_attr("INF", udouble, d) | |
85 | && FP_INFINITE == fpclassify(d)); | |
86 | BOOST_TEST(test_attr("infinity", udouble, d) | |
87 | && FP_INFINITE == fpclassify(d)); | |
88 | BOOST_TEST(test_attr("INFINITY", udouble, d) | |
89 | && FP_INFINITE == fpclassify(d)); | |
90 | ||
91 | BOOST_TEST(test("nan", udouble)); | |
92 | BOOST_TEST(test_attr("nan", udouble, d) | |
93 | && FP_NAN == fpclassify(d)); | |
94 | BOOST_TEST(test("NAN", udouble)); | |
95 | BOOST_TEST(test_attr("NAN", udouble, d) | |
96 | && FP_NAN == fpclassify(d)); | |
97 | BOOST_TEST(test("nan(...)", udouble)); | |
98 | BOOST_TEST(test_attr("nan(...)", udouble, d) | |
99 | && FP_NAN == fpclassify(d)); | |
100 | BOOST_TEST(test("NAN(...)", udouble)); | |
101 | BOOST_TEST(test_attr("NAN(...)", udouble, d) | |
102 | && FP_NAN == fpclassify(d)); | |
103 | ||
104 | BOOST_TEST(!test("e3", udouble)); | |
105 | BOOST_TEST(!test_attr("e3", udouble, d)); | |
106 | ||
107 | BOOST_TEST(!test("-1.2e3", udouble)); | |
108 | BOOST_TEST(!test_attr("-1.2e3", udouble, d)); | |
109 | ||
110 | BOOST_TEST(!test("+1.2e3", udouble)); | |
111 | BOOST_TEST(!test_attr("+1.2e3", udouble, d)); | |
112 | ||
113 | BOOST_TEST(!test("1.2e", udouble)); | |
114 | BOOST_TEST(!test_attr("1.2e", udouble, d)); | |
115 | ||
116 | BOOST_TEST(!test("-.3", udouble)); | |
117 | BOOST_TEST(!test_attr("-.3", udouble, d)); | |
118 | } | |
119 | ||
120 | return boost::report_errors(); | |
121 | } |