1 | /*============================================================================= |
2 | Copyright (c) 2001-2011 Joel de Guzman |
3 | Copyright (c) 2001-2011 Hartmut Kaiser |
4 | Copyright (c) 2011 Bryce Lelbach |
5 | |
6 | Distributed under the Boost Software License, Version 1.0. (See accompanying |
7 | file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
8 | =============================================================================*/ |
9 | |
10 | #include "uint.hpp" |
11 | |
12 | int |
13 | main() |
14 | { |
15 | using spirit_test::test; |
16 | using spirit_test::test_attr; |
17 | /////////////////////////////////////////////////////////////////////////// |
18 | // parameterized unsigned tests |
19 | /////////////////////////////////////////////////////////////////////////// |
20 | { |
21 | using boost::spirit::qi::uint_; |
22 | unsigned u; |
23 | |
24 | BOOST_TEST(test("123456" , uint_(123456))); |
25 | BOOST_TEST(!test("123456" , uint_(654321))); |
26 | BOOST_TEST(test_attr("123456" , uint_(123456), u)); |
27 | BOOST_TEST(u == 123456); |
28 | BOOST_TEST(!test_attr("123456" , uint_(654321), u)); |
29 | |
30 | BOOST_TEST(test(max_unsigned, uint_(UINT_MAX))); |
31 | BOOST_TEST(test_attr(max_unsigned, uint_(UINT_MAX), u)); |
32 | BOOST_TEST(u == UINT_MAX); |
33 | } |
34 | |
35 | /////////////////////////////////////////////////////////////////////////// |
36 | // parameterized binary tests |
37 | /////////////////////////////////////////////////////////////////////////// |
38 | { |
39 | using boost::spirit::qi::bin; |
40 | unsigned u; |
41 | |
42 | BOOST_TEST(test("11111110" , bin(0xFE))); |
43 | BOOST_TEST(!test("11111110" , bin(0xEF))); |
44 | BOOST_TEST(test_attr("11111110" , bin(0xFE), u)); |
45 | BOOST_TEST(u == 0xFE); |
46 | BOOST_TEST(!test_attr("11111110" , bin(0xEF), u)); |
47 | |
48 | BOOST_TEST(test(max_binary, bin(UINT_MAX))); |
49 | BOOST_TEST(test_attr(max_binary, bin(UINT_MAX), u)); |
50 | BOOST_TEST(u == UINT_MAX); |
51 | } |
52 | |
53 | /////////////////////////////////////////////////////////////////////////// |
54 | // parameterized octal tests |
55 | /////////////////////////////////////////////////////////////////////////// |
56 | { |
57 | using boost::spirit::qi::oct; |
58 | unsigned u; |
59 | |
60 | BOOST_TEST(test("12545674515" , oct(012545674515))); |
61 | #if UINT_MAX > 4294967296 // > 32 bits only |
62 | BOOST_TEST(!test("12545674515" , oct(051547654521))); |
63 | #endif |
64 | BOOST_TEST(test_attr("12545674515" , oct(012545674515), u)); |
65 | BOOST_TEST(u == 012545674515); |
66 | #if UINT_MAX > 4294967296 // > 32 bits only |
67 | BOOST_TEST(!test_attr("12545674515" , oct(051547654521), u)); |
68 | #endif |
69 | |
70 | BOOST_TEST(test(max_octal, oct(UINT_MAX))); |
71 | BOOST_TEST(test_attr(max_octal, oct(UINT_MAX), u)); |
72 | BOOST_TEST(u == UINT_MAX); |
73 | } |
74 | |
75 | /////////////////////////////////////////////////////////////////////////// |
76 | // parameterized hex tests |
77 | /////////////////////////////////////////////////////////////////////////// |
78 | { |
79 | using boost::spirit::qi::hex; |
80 | unsigned u; |
81 | |
82 | BOOST_TEST(test("95BC8DF" , hex(0x95BC8DF))); |
83 | BOOST_TEST(!test("95BC8DF" , hex(0xFD8CB59))); |
84 | BOOST_TEST(test_attr("95BC8DF" , hex(0x95BC8DF), u)); |
85 | BOOST_TEST(u == 0x95BC8DF); |
86 | BOOST_TEST(!test_attr("95BC8DF" , hex(0xFD8CB59), u)); |
87 | |
88 | BOOST_TEST(test("abcdef12" , hex(0xabcdef12))); |
89 | BOOST_TEST(!test("abcdef12" , hex(0x12fedcba))); |
90 | BOOST_TEST(test_attr("abcdef12" , hex(0xabcdef12), u)); |
91 | BOOST_TEST(u == 0xabcdef12); |
92 | BOOST_TEST(!test_attr("abcdef12" , hex(0x12fedcba), u)); |
93 | |
94 | BOOST_TEST(test(max_hex, hex(UINT_MAX))); |
95 | BOOST_TEST(test_attr(max_hex, hex(UINT_MAX), u)); |
96 | BOOST_TEST(u == UINT_MAX); |
97 | } |
98 | |
99 | /////////////////////////////////////////////////////////////////////////// |
100 | // parameterized action tests |
101 | /////////////////////////////////////////////////////////////////////////// |
102 | { |
103 | using boost::phoenix::ref; |
104 | using boost::spirit::ascii::space; |
105 | using boost::spirit::qi::uint_; |
106 | using boost::spirit::qi::_1; |
107 | unsigned n, m; |
108 | |
109 | BOOST_TEST(test("123" , uint_(123)[ref(n) = _1])); |
110 | BOOST_TEST(n == 123); |
111 | BOOST_TEST(!test("123" , uint_(321)[ref(n) = _1])); |
112 | |
113 | BOOST_TEST(test_attr("789" , uint_(789)[ref(n) = _1], m)); |
114 | BOOST_TEST(n == 789 && m == 789); |
115 | BOOST_TEST(!test_attr("789" , uint_(987)[ref(n) = _1], m)); |
116 | |
117 | BOOST_TEST(test(" 456" , uint_(456)[ref(n) = _1], space)); |
118 | BOOST_TEST(n == 456); |
119 | BOOST_TEST(!test(" 456" , uint_(654)[ref(n) = _1], space)); |
120 | } |
121 | |
122 | /////////////////////////////////////////////////////////////////////////// |
123 | // parameterized lazy tests |
124 | /////////////////////////////////////////////////////////////////////////// |
125 | { |
126 | using boost::phoenix::ref; |
127 | using boost::spirit::qi::uint_; |
128 | unsigned n = 123, m = 321; |
129 | |
130 | BOOST_TEST(test("123" , uint_(ref(n)))); |
131 | BOOST_TEST(!test("123" , uint_(ref(m)))); |
132 | } |
133 | |
134 | /////////////////////////////////////////////////////////////////////////// |
135 | // parameterized custom uint tests |
136 | /////////////////////////////////////////////////////////////////////////// |
137 | { |
138 | using boost::spirit::qi::uint_; |
139 | using boost::spirit::qi::uint_parser; |
140 | custom_uint u; |
141 | |
142 | BOOST_TEST(test_attr("123456" , uint_(123456), u)); |
143 | uint_parser<custom_uint, 10, 1, 2> uint2; |
144 | BOOST_TEST(test_attr("12" , uint2(12), u)); |
145 | } |
146 | |
147 | return boost::report_errors(); |
148 | } |
149 | |