• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
main()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