]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/real2.cpp
add subtree-ish sources for 12.0.3
[ceph.git] / ceph / src / boost / libs / spirit / test / x3 / real2.cpp
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 // signed real number tests
20 ///////////////////////////////////////////////////////////////////////////
21 {
22 using boost::spirit::x3::double_;
23 using boost::spirit::x3::parse;
24 double d;
25
26 BOOST_TEST(test("-1234", double_));
27 BOOST_TEST(test_attr("-1234", double_, d) && compare(d, -1234));
28
29 BOOST_TEST(test("-1.2e3", double_));
30 BOOST_TEST(test_attr("-1.2e3", double_, d) && compare(d, -1.2e3));
31
32 BOOST_TEST(test("+1.2e3", double_));
33 BOOST_TEST(test_attr("+1.2e3", double_, d) && compare(d, 1.2e3));
34
35 BOOST_TEST(test("-0.1", double_));
36 BOOST_TEST(test_attr("-0.1", double_, d) && compare(d, -0.1));
37
38 BOOST_TEST(test("-1.2e-3", double_));
39 BOOST_TEST(test_attr("-1.2e-3", double_, d) && compare(d, -1.2e-3));
40
41 BOOST_TEST(test("-1.e2", double_));
42 BOOST_TEST(test_attr("-1.e2", double_, d) && compare(d, -1.e2));
43
44 BOOST_TEST(test("-.2e3", double_));
45 BOOST_TEST(test_attr("-.2e3", double_, d) && compare(d, -.2e3));
46
47 BOOST_TEST(test("-2e3", double_));
48 BOOST_TEST(test_attr("-2e3", double_, d) && compare(d, -2e3));
49
50 BOOST_TEST(!test("-e3", double_));
51 BOOST_TEST(!test_attr("-e3", double_, d));
52
53 BOOST_TEST(!test("-1.2e", double_));
54 BOOST_TEST(!test_attr("-1.2e", double_, d));
55
56 #if defined(BOOST_SPIRIT_TEST_REAL_PRECISION)
57 BOOST_TEST(test_attr("-5.7222349715140557e+307", double_, d));
58 BOOST_TEST(d == -5.7222349715140557e+307); // exact!
59
60 BOOST_TEST(test_attr("2.0332938517515416e-308", double_, d));
61 BOOST_TEST(d == 2.0332938517515416e-308); // exact!
62
63 BOOST_TEST(test_attr("20332938517515416e291", double_, d));
64 BOOST_TEST(d == 20332938517515416e291); // exact!
65
66 BOOST_TEST(test_attr("2.0332938517515416e307", double_, d));
67 BOOST_TEST(d == 2.0332938517515416e307); // exact!
68 #endif
69
70 using boost::math::fpclassify;
71 using boost::spirit::x3::signbit; // Boost version is broken
72
73 BOOST_TEST(test("-inf", double_));
74 BOOST_TEST(test("-infinity", double_));
75 BOOST_TEST(test_attr("-inf", double_, d) &&
76 FP_INFINITE == fpclassify(d) && signbit(d));
77 BOOST_TEST(test_attr("-infinity", double_, d) &&
78 FP_INFINITE == fpclassify(d) && signbit(d));
79 BOOST_TEST(test("-INF", double_));
80 BOOST_TEST(test("-INFINITY", double_));
81 BOOST_TEST(test_attr("-INF", double_, d) &&
82 FP_INFINITE == fpclassify(d) && signbit(d));
83 BOOST_TEST(test_attr("-INFINITY", double_, d) &&
84 FP_INFINITE == fpclassify(d) && signbit(d));
85
86 BOOST_TEST(test("-nan", double_));
87 BOOST_TEST(test_attr("-nan", double_, d) &&
88 FP_NAN == fpclassify(d) && signbit(d));
89 BOOST_TEST(test("-NAN", double_));
90 BOOST_TEST(test_attr("-NAN", double_, d) &&
91 FP_NAN == fpclassify(d) && signbit(d));
92
93 BOOST_TEST(test("-nan(...)", double_));
94 BOOST_TEST(test_attr("-nan(...)", double_, d) &&
95 FP_NAN == fpclassify(d) && signbit(d));
96 BOOST_TEST(test("-NAN(...)", double_));
97 BOOST_TEST(test_attr("-NAN(...)", double_, d) &&
98 FP_NAN == fpclassify(d) && signbit(d));
99 }
100
101 return boost::report_errors();
102 }