/*============================================================================= 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 uint2; BOOST_TEST(test_attr("12", uint2(12), u)); } return boost::report_errors(); }