uint3.cpp 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Joel de Guzman
  3. Copyright (c) 2001-2011 Hartmut Kaiser
  4. Copyright (c) 2011 Bryce Lelbach
  5. Distributed under the Boost Software License, Version 1.0. (See accompanying
  6. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. =============================================================================*/
  8. #include "uint.hpp"
  9. int
  10. main()
  11. {
  12. using spirit_test::test;
  13. using spirit_test::test_attr;
  14. ///////////////////////////////////////////////////////////////////////////
  15. // parameterized unsigned tests
  16. ///////////////////////////////////////////////////////////////////////////
  17. {
  18. using boost::spirit::qi::uint_;
  19. unsigned u;
  20. BOOST_TEST(test("123456", uint_(123456)));
  21. BOOST_TEST(!test("123456", uint_(654321)));
  22. BOOST_TEST(test_attr("123456", uint_(123456), u));
  23. BOOST_TEST(u == 123456);
  24. BOOST_TEST(!test_attr("123456", uint_(654321), u));
  25. BOOST_TEST(test(max_unsigned, uint_(UINT_MAX)));
  26. BOOST_TEST(test_attr(max_unsigned, uint_(UINT_MAX), u));
  27. BOOST_TEST(u == UINT_MAX);
  28. }
  29. ///////////////////////////////////////////////////////////////////////////
  30. // parameterized binary tests
  31. ///////////////////////////////////////////////////////////////////////////
  32. {
  33. using boost::spirit::qi::bin;
  34. unsigned u;
  35. BOOST_TEST(test("11111110", bin(0xFE)));
  36. BOOST_TEST(!test("11111110", bin(0xEF)));
  37. BOOST_TEST(test_attr("11111110", bin(0xFE), u));
  38. BOOST_TEST(u == 0xFE);
  39. BOOST_TEST(!test_attr("11111110", bin(0xEF), u));
  40. BOOST_TEST(test(max_binary, bin(UINT_MAX)));
  41. BOOST_TEST(test_attr(max_binary, bin(UINT_MAX), u));
  42. BOOST_TEST(u == UINT_MAX);
  43. }
  44. ///////////////////////////////////////////////////////////////////////////
  45. // parameterized octal tests
  46. ///////////////////////////////////////////////////////////////////////////
  47. {
  48. using boost::spirit::qi::oct;
  49. unsigned u;
  50. BOOST_TEST(test("12545674515", oct(012545674515)));
  51. #if UINT_MAX > 4294967296 // > 32 bits only
  52. BOOST_TEST(!test("12545674515", oct(051547654521)));
  53. #endif
  54. BOOST_TEST(test_attr("12545674515", oct(012545674515), u));
  55. BOOST_TEST(u == 012545674515);
  56. #if UINT_MAX > 4294967296 // > 32 bits only
  57. BOOST_TEST(!test_attr("12545674515", oct(051547654521), u));
  58. #endif
  59. BOOST_TEST(test(max_octal, oct(UINT_MAX)));
  60. BOOST_TEST(test_attr(max_octal, oct(UINT_MAX), u));
  61. BOOST_TEST(u == UINT_MAX);
  62. }
  63. ///////////////////////////////////////////////////////////////////////////
  64. // parameterized hex tests
  65. ///////////////////////////////////////////////////////////////////////////
  66. {
  67. using boost::spirit::qi::hex;
  68. unsigned u;
  69. BOOST_TEST(test("95BC8DF", hex(0x95BC8DF)));
  70. BOOST_TEST(!test("95BC8DF", hex(0xFD8CB59)));
  71. BOOST_TEST(test_attr("95BC8DF", hex(0x95BC8DF), u));
  72. BOOST_TEST(u == 0x95BC8DF);
  73. BOOST_TEST(!test_attr("95BC8DF", hex(0xFD8CB59), u));
  74. BOOST_TEST(test("abcdef12", hex(0xabcdef12)));
  75. BOOST_TEST(!test("abcdef12", hex(0x12fedcba)));
  76. BOOST_TEST(test_attr("abcdef12", hex(0xabcdef12), u));
  77. BOOST_TEST(u == 0xabcdef12);
  78. BOOST_TEST(!test_attr("abcdef12", hex(0x12fedcba), u));
  79. BOOST_TEST(test(max_hex, hex(UINT_MAX)));
  80. BOOST_TEST(test_attr(max_hex, hex(UINT_MAX), u));
  81. BOOST_TEST(u == UINT_MAX);
  82. }
  83. ///////////////////////////////////////////////////////////////////////////
  84. // parameterized action tests
  85. ///////////////////////////////////////////////////////////////////////////
  86. {
  87. using boost::phoenix::ref;
  88. using boost::spirit::ascii::space;
  89. using boost::spirit::qi::uint_;
  90. using boost::spirit::qi::_1;
  91. unsigned n, m;
  92. BOOST_TEST(test("123", uint_(123)[ref(n) = _1]));
  93. BOOST_TEST(n == 123);
  94. BOOST_TEST(!test("123", uint_(321)[ref(n) = _1]));
  95. BOOST_TEST(test_attr("789", uint_(789)[ref(n) = _1], m));
  96. BOOST_TEST(n == 789 && m == 789);
  97. BOOST_TEST(!test_attr("789", uint_(987)[ref(n) = _1], m));
  98. BOOST_TEST(test(" 456", uint_(456)[ref(n) = _1], space));
  99. BOOST_TEST(n == 456);
  100. BOOST_TEST(!test(" 456", uint_(654)[ref(n) = _1], space));
  101. }
  102. ///////////////////////////////////////////////////////////////////////////
  103. // parameterized lazy tests
  104. ///////////////////////////////////////////////////////////////////////////
  105. {
  106. using boost::phoenix::ref;
  107. using boost::spirit::qi::uint_;
  108. unsigned n = 123, m = 321;
  109. BOOST_TEST(test("123", uint_(ref(n))));
  110. BOOST_TEST(!test("123", uint_(ref(m))));
  111. }
  112. ///////////////////////////////////////////////////////////////////////////
  113. // parameterized custom uint tests
  114. ///////////////////////////////////////////////////////////////////////////
  115. {
  116. using boost::spirit::qi::uint_;
  117. using boost::spirit::qi::uint_parser;
  118. custom_uint u;
  119. BOOST_TEST(test_attr("123456", uint_(123456), u));
  120. uint_parser<custom_uint, 10, 1, 2> uint2;
  121. BOOST_TEST(test_attr("12", uint2(12), u));
  122. }
  123. return boost::report_errors();
  124. }