]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/spirit/test/x3/uint1.cpp
1 /*=============================================================================
2 Copyright (c) 2001-2015 Joel de Guzman
3 Copyright (c) 2001-2011 Hartmut Kaiser
4 Copyright (c) 2011 Bryce Lelbach
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 =============================================================================*/
10 #include <boost/spirit/home/x3.hpp>
15 using spirit_test::test
;
16 using spirit_test::test_attr
;
17 ///////////////////////////////////////////////////////////////////////////
19 ///////////////////////////////////////////////////////////////////////////
21 using boost::spirit::x3::uint_
;
24 BOOST_TEST(test("123456", uint_
));
25 BOOST_TEST(test_attr("123456", uint_
, u
));
26 BOOST_TEST(u
== 123456);
28 BOOST_TEST(test(max_unsigned
, uint_
));
29 BOOST_TEST(test_attr(max_unsigned
, uint_
, u
));
30 BOOST_TEST(u
== UINT_MAX
);
32 BOOST_TEST(!test(unsigned_overflow
, uint_
));
33 BOOST_TEST(!test_attr(unsigned_overflow
, uint_
, u
));
36 ///////////////////////////////////////////////////////////////////////////
38 ///////////////////////////////////////////////////////////////////////////
40 using boost::spirit::x3::bin
;
43 BOOST_TEST(test("11111110", bin
));
44 BOOST_TEST(test_attr("11111110", bin
, u
));
45 BOOST_TEST(u
== 0xFE);
47 BOOST_TEST(test(max_binary
, bin
));
48 BOOST_TEST(test_attr(max_binary
, bin
, u
));
49 BOOST_TEST(u
== UINT_MAX
);
51 BOOST_TEST(!test(binary_overflow
, bin
));
52 BOOST_TEST(!test_attr(binary_overflow
, bin
, u
));
55 ///////////////////////////////////////////////////////////////////////////
57 ///////////////////////////////////////////////////////////////////////////
59 using boost::spirit::x3::oct
;
62 BOOST_TEST(test("12545674515", oct
));
63 BOOST_TEST(test_attr("12545674515", oct
, u
));
64 BOOST_TEST(u
== 012545674515);
66 BOOST_TEST(test(max_octal
, oct
));
67 BOOST_TEST(test_attr(max_octal
, oct
, u
));
68 BOOST_TEST(u
== UINT_MAX
);
70 BOOST_TEST(!test(octal_overflow
, oct
));
71 BOOST_TEST(!test_attr(octal_overflow
, oct
, u
));
74 ///////////////////////////////////////////////////////////////////////////
76 ///////////////////////////////////////////////////////////////////////////
78 using boost::spirit::x3::hex
;
81 BOOST_TEST(test("95BC8DF", hex
));
82 BOOST_TEST(test_attr("95BC8DF", hex
, u
));
83 BOOST_TEST(u
== 0x95BC8DF);
85 BOOST_TEST(test("abcdef12", hex
));
86 BOOST_TEST(test_attr("abcdef12", hex
, u
));
87 BOOST_TEST(u
== 0xabcdef12);
89 BOOST_TEST(test(max_hex
, hex
));
90 BOOST_TEST(test_attr(max_hex
, hex
, u
));
91 BOOST_TEST(u
== UINT_MAX
);
93 BOOST_TEST(!test(hex_overflow
, hex
));
94 BOOST_TEST(!test_attr(hex_overflow
, hex
, u
));
97 ///////////////////////////////////////////////////////////////////////////
99 ///////////////////////////////////////////////////////////////////////////
102 using boost::spirit::x3::uint_parser
;
104 uint_parser
<unsigned, 10, 1, 3> uint3
;
105 BOOST_TEST(test("123456", uint3
, false));
106 BOOST_TEST(test_attr("123456", uint3
, u
, false));
107 BOOST_TEST(u
== 123);
109 uint_parser
<unsigned, 10, 2, 4> uint4
;
110 BOOST_TEST(test("123456", uint4
, false));
111 BOOST_TEST(test_attr("123456", uint4
, u
, false));
112 BOOST_TEST(u
== 1234);
114 char const * first
= "0000000";
115 char const * last
= first
+ std::strlen(first
);
116 uint_parser
<unsigned, 10, 4, 4> uint_exact4
;
117 BOOST_TEST(boost::spirit::x3::parse(first
, last
, uint_exact4
, u
)
118 && first
!= last
&& (last
-first
== 3) && u
== 0);
121 last
= first
+ std::strlen(first
);
122 BOOST_TEST(boost::spirit::x3::parse(first
, last
, uint_exact4
, u
)
123 && first
!= last
&& (last
-first
== 3) && u
== 1);
125 BOOST_TEST(!test("1", uint4
));
126 BOOST_TEST(!test_attr("1", uint4
, u
));
127 BOOST_TEST(test_attr("014567", uint4
, u
, false) && u
== 145);
130 ///////////////////////////////////////////////////////////////////////////
132 ///////////////////////////////////////////////////////////////////////////
134 using boost::spirit::x3::_attr
;
135 using boost::spirit::x3::uint_
;
136 using boost::spirit::x3::ascii::space
;
139 auto f
= [&](auto& ctx
){ n
= _attr(ctx
); };
141 BOOST_TEST(test("123", uint_
[f
]));
142 BOOST_TEST(n
== 123);
143 BOOST_TEST(test(" 456", uint_
[f
], space
));
144 BOOST_TEST(n
== 456);
147 ///////////////////////////////////////////////////////////////////////////
148 // Check overflow is parse error
149 ///////////////////////////////////////////////////////////////////////////
151 boost::spirit::x3::uint_parser
<boost::uint8_t> uint8_
;
154 BOOST_TEST(!test_attr("999", uint8_
, u8
));
155 BOOST_TEST(!test_attr("256", uint8_
, u8
));
156 BOOST_TEST(test_attr("255", uint8_
, u8
));
158 boost::spirit::x3::uint_parser
<boost::uint16_t> uint16_
;
161 BOOST_TEST(!test_attr("99999", uint16_
, u16
));
162 BOOST_TEST(!test_attr("65536", uint16_
, u16
));
163 BOOST_TEST(test_attr("65535", uint16_
, u16
));
165 boost::spirit::x3::uint_parser
<boost::uint32_t> uint32_
;
168 BOOST_TEST(!test_attr("9999999999", uint32_
, u32
));
169 BOOST_TEST(!test_attr("4294967296", uint32_
, u32
));
170 BOOST_TEST(test_attr("4294967295", uint32_
, u32
));
173 ///////////////////////////////////////////////////////////////////////////
175 ///////////////////////////////////////////////////////////////////////////
177 using boost::spirit::x3::uint_
;
178 using boost::spirit::x3::uint_parser
;
181 BOOST_TEST(test_attr("123456", uint_
, u
));
182 uint_parser
<custom_uint
, 10, 1, 2> uint2
;
183 BOOST_TEST(test_attr("12", uint2
, u
));
186 return boost::report_errors();