| /*============================================================================= |
| 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 "int.hpp" |
| |
| int |
| main() |
| { |
| using spirit_test::test; |
| using spirit_test::test_attr; |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // signed integer literal tests |
| /////////////////////////////////////////////////////////////////////////// |
| { |
| using boost::spirit::lit; |
| int i = 123456; |
| |
| BOOST_TEST( test("123456", lit(123456))); |
| BOOST_TEST(!test("123456", lit(0))); |
| BOOST_TEST( test("123456", lit(i))); |
| BOOST_TEST(!test("123456", lit(-i))); |
| BOOST_TEST( test("+425", lit(425))); |
| BOOST_TEST(!test("+425", lit(17))); |
| BOOST_TEST( test("-2000", lit(-2000))); |
| BOOST_TEST(!test("-2000", lit(2000))); |
| BOOST_TEST( test(max_int, lit(INT_MAX))); |
| BOOST_TEST(!test(max_int, lit(INT_MIN))); |
| |
| BOOST_TEST( test(min_int, lit(INT_MIN))); |
| BOOST_TEST(!test(min_int, lit(INT_MAX))); |
| |
| BOOST_TEST(!test("-", lit(8451))); |
| BOOST_TEST(!test("+", lit(8451))); |
| |
| // with leading zeros |
| BOOST_TEST(test("000000000098765", lit(98765))); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // long long literal tests |
| /////////////////////////////////////////////////////////////////////////// |
| #ifdef BOOST_HAS_LONG_LONG |
| { |
| using boost::spirit::lit; |
| boost::long_long_type ll = 1234567890123456789LL; |
| |
| BOOST_TEST( test("1234567890123456789", lit(1234567890123456789LL))); |
| BOOST_TEST(!test("1234567890123456789", lit(-19LL))); |
| BOOST_TEST( test("1234567890123456789", lit(ll))); |
| BOOST_TEST(!test("1234567890123456789", lit(-ll))); |
| BOOST_TEST( test("-100000000000000", lit(-100000000000000LL))); |
| BOOST_TEST(!test("-100000000000000", lit(3243515525263LL))); |
| BOOST_TEST( test(max_long_long, lit(LONG_LONG_MAX))); |
| BOOST_TEST(!test(max_long_long, lit(LONG_LONG_MIN))); |
| |
| BOOST_TEST( test(min_long_long, lit(LONG_LONG_MIN))); |
| BOOST_TEST(!test(min_long_long, lit(LONG_LONG_MAX))); |
| } |
| #endif |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // short_ and long_ literal tests |
| /////////////////////////////////////////////////////////////////////////// |
| { |
| using boost::spirit::lit; |
| short s = 12345; |
| long l = 1234567890L; |
| |
| BOOST_TEST( test("12345", lit(12345))); |
| BOOST_TEST(!test("12345", lit(-12345))); |
| BOOST_TEST( test("12345", lit(s))); |
| BOOST_TEST(!test("12345", lit(-s))); |
| BOOST_TEST( test("-12345", lit(-12345))); |
| BOOST_TEST(!test("-12345", lit(12345))); |
| BOOST_TEST( test("-12345", lit(-s))); |
| BOOST_TEST(!test("-12345", lit(s))); |
| |
| BOOST_TEST( test("1234567890", lit(1234567890))); |
| BOOST_TEST(!test("1234567890", lit(-1234567890))); |
| BOOST_TEST( test("1234567890", lit(l))); |
| BOOST_TEST(!test("1234567890", lit(-l))); |
| BOOST_TEST( test("-1234567890", lit(-1234567890))); |
| BOOST_TEST(!test("-1234567890", lit(1234567890))); |
| BOOST_TEST( test("-1234567890", lit(-l))); |
| BOOST_TEST(!test("-1234567890", lit(l))); |
| } |
| |
| /////////////////////////////////////////////////////////////////////////// |
| // literal lazy tests |
| /////////////////////////////////////////////////////////////////////////// |
| { |
| using boost::phoenix::ref; |
| using boost::spirit::qi::lit; |
| int n = 123, m = 321; |
| |
| BOOST_TEST(test("123", lit(ref(n)))); |
| BOOST_TEST(!test("123", lit(ref(m)))); |
| } |
| |
| return boost::report_errors(); |
| } |