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