1 | /*============================================================================= |
2 | Copyright (c) 2001-2011 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 | #include <boost/phoenix/core/reference.hpp> |
14 | |
15 | int |
16 | main() |
17 | { |
18 | using spirit_test::test; |
19 | using spirit_test::test_attr; |
20 | |
21 | /////////////////////////////////////////////////////////////////////////// |
22 | // parameterized signed real number tests |
23 | /////////////////////////////////////////////////////////////////////////// |
24 | { |
25 | using boost::spirit::qi::double_; |
26 | double d; |
27 | |
28 | BOOST_TEST(test("+1234" , double_(1234))); |
29 | BOOST_TEST(!test("+1234" , double_(-1234))); |
30 | BOOST_TEST(test_attr("+1234" , double_(1234), d)); |
31 | BOOST_TEST(compare(d, 1234)); |
32 | BOOST_TEST(!test_attr("+1234" , double_(-1234), d)); |
33 | |
34 | BOOST_TEST(test("-1234" , double_(-1234))); |
35 | BOOST_TEST(!test("-1234" , double_(1234))); |
36 | BOOST_TEST(test_attr("-1234" , double_(-1234), d)); |
37 | BOOST_TEST(compare(d, -1234)); |
38 | BOOST_TEST(!test_attr("-1234" , double_(1234), d)); |
39 | |
40 | BOOST_TEST(test("+1.2e3" , double_(1.2e3))); |
41 | BOOST_TEST(!test("+1.2e3" , double_(-1.2e3))); |
42 | BOOST_TEST(test_attr("+1.2e3" , double_(1.2e3), d)); |
43 | BOOST_TEST(compare(d, 1.2e3)); |
44 | BOOST_TEST(!test_attr("+1.2e3" , double_(-1.2e3), d)); |
45 | |
46 | BOOST_TEST(test("-1.2e3" , double_(-1.2e3))); |
47 | BOOST_TEST(!test("-1.2e3" , double_(1.2e3))); |
48 | BOOST_TEST(test_attr("-1.2e3" , double_(-1.2e3), d)); |
49 | BOOST_TEST(compare(d, -1.2e3)); |
50 | BOOST_TEST(!test_attr("-1.2e3" , double_(1.2e3), d)); |
51 | } |
52 | |
53 | /////////////////////////////////////////////////////////////////////////// |
54 | // parameterized unsigned real number tests |
55 | /////////////////////////////////////////////////////////////////////////// |
56 | { |
57 | using boost::spirit::qi::real_parser; |
58 | using boost::spirit::qi::ureal_policies; |
59 | double d; |
60 | |
61 | real_parser<double, ureal_policies<double> > udouble; |
62 | |
63 | BOOST_TEST(test("1234" , udouble(1234))); |
64 | BOOST_TEST(!test("1234" , udouble(4321))); |
65 | BOOST_TEST(test_attr("1234" , udouble(1234), d)); |
66 | BOOST_TEST(compare(d, 1234)); |
67 | BOOST_TEST(!test_attr("1234" , udouble(4321), d)); |
68 | |
69 | BOOST_TEST(test("1.2e3" , udouble(1.2e3))); |
70 | BOOST_TEST(!test("1.2e3" , udouble(3.2e1))); |
71 | BOOST_TEST(test_attr("1.2e3" , udouble(1.2e3), d)); |
72 | BOOST_TEST(compare(d, 1.2e3)); |
73 | BOOST_TEST(!test_attr("1.2e3" , udouble(3.2e1), d)); |
74 | } |
75 | |
76 | /////////////////////////////////////////////////////////////////////////// |
77 | // parameterized custom data type |
78 | /////////////////////////////////////////////////////////////////////////// |
79 | #ifndef BOOST_SPIRIT_NO_MATH_REAL_CONCEPT |
80 | { |
81 | using boost::math::concepts::real_concept; |
82 | using boost::spirit::qi::real_parser; |
83 | using boost::spirit::qi::real_policies; |
84 | |
85 | real_parser<real_concept, real_policies<real_concept> > custom_real; |
86 | real_concept d; |
87 | |
88 | BOOST_TEST(test("-1234" , custom_real(-1234))); |
89 | BOOST_TEST(!test("-1234" , custom_real(4321))); |
90 | BOOST_TEST(test_attr("-1234" , custom_real(-1234), d)); |
91 | BOOST_TEST(compare(d, -1234)); |
92 | BOOST_TEST(!test_attr("-1234" , custom_real(-4321), d)); |
93 | |
94 | BOOST_TEST(test("1.2e3" , custom_real(1.2e3))); |
95 | BOOST_TEST(!test("1.2e3" , custom_real(-1.2e3))); |
96 | BOOST_TEST(test_attr("1.2e3" , custom_real(1.2e3), d)); |
97 | BOOST_TEST(compare(d, 1.2e3)); |
98 | BOOST_TEST(!test_attr("1.2e3" , custom_real(-3.2e1), d)); |
99 | } |
100 | #endif |
101 | |
102 | /////////////////////////////////////////////////////////////////////////// |
103 | // parameterized lazy tests |
104 | /////////////////////////////////////////////////////////////////////////// |
105 | { |
106 | using boost::phoenix::ref; |
107 | using boost::spirit::qi::double_; |
108 | double n = 1.2e3, m = 3.2e1; |
109 | |
110 | BOOST_TEST(test("1.2e3" , double_(ref(n)))); |
111 | BOOST_TEST(!test("1.2e3" , double_(ref(m)))); |
112 | } |
113 | |
114 | /////////////////////////////////////////////////////////////////////////// |
115 | // literal real number tests |
116 | /////////////////////////////////////////////////////////////////////////// |
117 | { |
118 | using boost::spirit::qi::lit; |
119 | |
120 | BOOST_TEST(test("+1.2e3" , lit(1.2e3))); |
121 | BOOST_TEST(!test("+1.2e3" , lit(-1.2e3))); |
122 | BOOST_TEST(test("-1.2e3" , lit(-1.2e3))); |
123 | BOOST_TEST(!test("-1.2e3" , lit(1.2e3))); |
124 | BOOST_TEST(test("1.2e3" , lit(1.2e3))); |
125 | BOOST_TEST(!test("1.2e3" , lit(3.2e1))); |
126 | } |
127 | |
128 | /////////////////////////////////////////////////////////////////////////// |
129 | // literal lazy tests |
130 | /////////////////////////////////////////////////////////////////////////// |
131 | { |
132 | using boost::spirit::qi::lit; |
133 | using boost::phoenix::ref; |
134 | double n = 1.2e3, m = 3.2e1; |
135 | |
136 | BOOST_TEST(test("1.2e3" , lit(ref(n)))); |
137 | BOOST_TEST(!test("1.2e3" , lit(ref(m)))); |
138 | } |
139 | |
140 | return boost::report_errors(); |
141 | } |
142 | |