diff options
Diffstat (limited to 'src/boost/libs/spirit/test/qi/uint3.cpp')
-rw-r--r-- | src/boost/libs/spirit/test/qi/uint3.cpp | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/src/boost/libs/spirit/test/qi/uint3.cpp b/src/boost/libs/spirit/test/qi/uint3.cpp new file mode 100644 index 00000000..c7de8529 --- /dev/null +++ b/src/boost/libs/spirit/test/qi/uint3.cpp @@ -0,0 +1,148 @@ +/*============================================================================= + Copyright (c) 2001-2011 Joel de Guzman + Copyright (c) 2001-2011 Hartmut Kaiser + Copyright (c) 2011 Bryce Lelbach + + Distributed under the Boost Software License, Version 1.0. (See accompanying + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +#include "uint.hpp" + +int +main() +{ + using spirit_test::test; + using spirit_test::test_attr; + /////////////////////////////////////////////////////////////////////////// + // parameterized unsigned tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::spirit::qi::uint_; + unsigned u; + + BOOST_TEST(test("123456", uint_(123456))); + BOOST_TEST(!test("123456", uint_(654321))); + BOOST_TEST(test_attr("123456", uint_(123456), u)); + BOOST_TEST(u == 123456); + BOOST_TEST(!test_attr("123456", uint_(654321), u)); + + BOOST_TEST(test(max_unsigned, uint_(UINT_MAX))); + BOOST_TEST(test_attr(max_unsigned, uint_(UINT_MAX), u)); + BOOST_TEST(u == UINT_MAX); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized binary tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::spirit::qi::bin; + unsigned u; + + BOOST_TEST(test("11111110", bin(0xFE))); + BOOST_TEST(!test("11111110", bin(0xEF))); + BOOST_TEST(test_attr("11111110", bin(0xFE), u)); + BOOST_TEST(u == 0xFE); + BOOST_TEST(!test_attr("11111110", bin(0xEF), u)); + + BOOST_TEST(test(max_binary, bin(UINT_MAX))); + BOOST_TEST(test_attr(max_binary, bin(UINT_MAX), u)); + BOOST_TEST(u == UINT_MAX); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized octal tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::spirit::qi::oct; + unsigned u; + + BOOST_TEST(test("12545674515", oct(012545674515))); +#if UINT_MAX > 4294967296 // > 32 bits only + BOOST_TEST(!test("12545674515", oct(051547654521))); +#endif + BOOST_TEST(test_attr("12545674515", oct(012545674515), u)); + BOOST_TEST(u == 012545674515); +#if UINT_MAX > 4294967296 // > 32 bits only + BOOST_TEST(!test_attr("12545674515", oct(051547654521), u)); +#endif + + BOOST_TEST(test(max_octal, oct(UINT_MAX))); + BOOST_TEST(test_attr(max_octal, oct(UINT_MAX), u)); + BOOST_TEST(u == UINT_MAX); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized hex tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::spirit::qi::hex; + unsigned u; + + BOOST_TEST(test("95BC8DF", hex(0x95BC8DF))); + BOOST_TEST(!test("95BC8DF", hex(0xFD8CB59))); + BOOST_TEST(test_attr("95BC8DF", hex(0x95BC8DF), u)); + BOOST_TEST(u == 0x95BC8DF); + BOOST_TEST(!test_attr("95BC8DF", hex(0xFD8CB59), u)); + + BOOST_TEST(test("abcdef12", hex(0xabcdef12))); + BOOST_TEST(!test("abcdef12", hex(0x12fedcba))); + BOOST_TEST(test_attr("abcdef12", hex(0xabcdef12), u)); + BOOST_TEST(u == 0xabcdef12); + BOOST_TEST(!test_attr("abcdef12", hex(0x12fedcba), u)); + + BOOST_TEST(test(max_hex, hex(UINT_MAX))); + BOOST_TEST(test_attr(max_hex, hex(UINT_MAX), u)); + BOOST_TEST(u == UINT_MAX); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized action tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::phoenix::ref; + using boost::spirit::ascii::space; + using boost::spirit::qi::uint_; + using boost::spirit::qi::_1; + unsigned n, m; + + BOOST_TEST(test("123", uint_(123)[ref(n) = _1])); + BOOST_TEST(n == 123); + BOOST_TEST(!test("123", uint_(321)[ref(n) = _1])); + + BOOST_TEST(test_attr("789", uint_(789)[ref(n) = _1], m)); + BOOST_TEST(n == 789 && m == 789); + BOOST_TEST(!test_attr("789", uint_(987)[ref(n) = _1], m)); + + BOOST_TEST(test(" 456", uint_(456)[ref(n) = _1], space)); + BOOST_TEST(n == 456); + BOOST_TEST(!test(" 456", uint_(654)[ref(n) = _1], space)); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized lazy tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::phoenix::ref; + using boost::spirit::qi::uint_; + unsigned n = 123, m = 321; + + BOOST_TEST(test("123", uint_(ref(n)))); + BOOST_TEST(!test("123", uint_(ref(m)))); + } + + /////////////////////////////////////////////////////////////////////////// + // parameterized custom uint tests + /////////////////////////////////////////////////////////////////////////// + { + using boost::spirit::qi::uint_; + using boost::spirit::qi::uint_parser; + custom_uint u; + + BOOST_TEST(test_attr("123456", uint_(123456), u)); + uint_parser<custom_uint, 10, 1, 2> uint2; + BOOST_TEST(test_attr("12", uint2(12), u)); + } + + return boost::report_errors(); +} |