int.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 165 行
CPP
165 行
/*============================================================================= Copyright (c) 2001-2007 Joel de Guzman Copyright (c) 2001-2008 Hartmut Kaiser 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 <climits>#include <boost/detail/lightweight_test.hpp>#include <boost/spirit/include/qi_numeric.hpp>#include <boost/spirit/include/qi_char.hpp>#include <boost/spirit/include/qi_action.hpp>#include <boost/spirit/include/support_argument.hpp>#include <boost/spirit/include/phoenix_core.hpp>#include <boost/spirit/include/phoenix_operator.hpp>#include "test.hpp"/////////////////////////////////////////////////////////////////////////////////// *** BEWARE PLATFORM DEPENDENT!!! ***// *** The following assumes 32 bit integers and 64 bit long longs.// *** Modify these constant strings when appropriate./////////////////////////////////////////////////////////////////////////////////#ifdef BOOST_HAS_LONG_LONG// Some compilers have long long, but don't define the// LONG_LONG_MIN and LONG_LONG_MAX macros in limits.h. This// assumes that long long is 64 bits.#if !defined(LONG_LONG_MIN) && !defined(LONG_LONG_MAX)# define LONG_LONG_MAX 0x7fffffffffffffffLL# define LONG_LONG_MIN (-LONG_LONG_MAX - 1)#endif#endif // BOOST_HAS_LONG_LONG char const* max_int = "2147483647"; char const* int_overflow = "2147483648"; char const* min_int = "-2147483648"; char const* int_underflow = "-2147483649";#ifdef BOOST_HAS_LONG_LONG char const* max_long_long = "9223372036854775807"; char const* long_long_overflow = "9223372036854775808"; char const* min_long_long = "-9223372036854775808"; char const* long_long_underflow = "-9223372036854775809";#endifintmain(){ using namespace spirit_test; /////////////////////////////////////////////////////////////////////////// // signed integer tests /////////////////////////////////////////////////////////////////////////// { using boost::spirit::int_; int i; BOOST_TEST(test("123456", int_)); BOOST_TEST(test_attr("123456", int_, i)); BOOST_TEST(i == 123456); BOOST_TEST(test("+123456", int_)); BOOST_TEST(test_attr("+123456", int_, i)); BOOST_TEST(i == 123456); BOOST_TEST(test("-123456", int_)); BOOST_TEST(test_attr("-123456", int_, i)); BOOST_TEST(i == -123456); BOOST_TEST(test(max_int, int_)); BOOST_TEST(test_attr(max_int, int_, i)); BOOST_TEST(i == INT_MAX); BOOST_TEST(test(min_int, int_)); BOOST_TEST(test_attr(min_int, int_, i)); BOOST_TEST(i == INT_MIN); BOOST_TEST(!test(int_overflow, int_)); BOOST_TEST(!test_attr(int_overflow, int_, i)); BOOST_TEST(!test(int_underflow, int_)); BOOST_TEST(!test_attr(int_underflow, int_, i)); BOOST_TEST(!test("-", int_)); BOOST_TEST(!test_attr("-", int_, i)); BOOST_TEST(!test("+", int_)); BOOST_TEST(!test_attr("+", int_, i)); // Bug report from Steve Nutt BOOST_TEST(test_attr("5368709120", int_, i, false)); BOOST_TEST(i == 536870912); // with leading zeros BOOST_TEST(test("0000000000123456", int_)); BOOST_TEST(test_attr("0000000000123456", int_, i)); BOOST_TEST(i == 123456); } /////////////////////////////////////////////////////////////////////////// // long long tests ///////////////////////////////////////////////////////////////////////////#ifdef BOOST_HAS_LONG_LONG { using boost::spirit::long_long; boost::long_long_type ll; BOOST_TEST(test("1234567890123456789", long_long)); BOOST_TEST(test_attr("1234567890123456789", long_long, ll)); BOOST_TEST(ll == 1234567890123456789LL); BOOST_TEST(test("-1234567890123456789", long_long)); BOOST_TEST(test_attr("-1234567890123456789", long_long, ll)); BOOST_TEST(ll == -1234567890123456789LL); BOOST_TEST(test(max_long_long, long_long)); BOOST_TEST(test_attr(max_long_long, long_long, ll)); BOOST_TEST(ll == LONG_LONG_MAX); BOOST_TEST(test(min_long_long, long_long)); BOOST_TEST(test_attr(min_long_long, long_long, ll)); BOOST_TEST(ll == LONG_LONG_MIN); BOOST_TEST(!test(long_long_overflow, long_long)); BOOST_TEST(!test_attr(long_long_overflow, long_long, ll)); BOOST_TEST(!test(long_long_underflow, long_long)); BOOST_TEST(!test_attr(long_long_underflow, long_long, ll)); }#endif /////////////////////////////////////////////////////////////////////////// // int_spec<unused_type> tests /////////////////////////////////////////////////////////////////////////// { using boost::spirit::qi::int_spec; using boost::spirit::unused_type; int_spec<unused_type> any_int; BOOST_TEST(test("123456", any_int)); BOOST_TEST(test("-123456", any_int)); BOOST_TEST(test("-1234567890123456789", any_int)); } /////////////////////////////////////////////////////////////////////////// // action tests /////////////////////////////////////////////////////////////////////////// { using namespace boost::phoenix; using boost::spirit::arg_names::_1; using boost::spirit::ascii::space; using boost::spirit::int_; int n, m; BOOST_TEST(test("123", int_[ref(n) = _1])); BOOST_TEST(n == 123); BOOST_TEST(test_attr("789", int_[ref(n) = _1], m)); BOOST_TEST(n == 789 && m == 789); BOOST_TEST(test(" 456", int_[ref(n) = _1], space)); BOOST_TEST(n == 456); } return boost::report_errors();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?