int1.cpp 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. // Copyright (c) 2001-2011 Hartmut Kaiser
  2. //
  3. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  4. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  5. #include <boost/config/warning_disable.hpp>
  6. #include <boost/detail/lightweight_test.hpp>
  7. #include <boost/mpl/vector.hpp>
  8. #include <boost/mpl/for_each.hpp>
  9. #include <boost/mpl/if.hpp>
  10. #include <boost/mpl/bool.hpp>
  11. #include <boost/spirit/include/phoenix_core.hpp>
  12. #include <boost/spirit/include/phoenix_operator.hpp>
  13. #include <boost/spirit/include/karma_char.hpp>
  14. #include <boost/spirit/include/karma_numeric.hpp>
  15. #include <boost/spirit/include/karma_directive.hpp>
  16. #include <boost/spirit/include/karma_action.hpp>
  17. #include <boost/limits.hpp>
  18. #include "test.hpp"
  19. using namespace spirit_test;
  20. ///////////////////////////////////////////////////////////////////////////////
  21. int
  22. main()
  23. {
  24. using namespace boost::spirit;
  25. {
  26. using namespace boost::spirit::ascii;
  27. ///////////////////////////////////////////////////////////////////////
  28. // this is currently ambiguous with character literals
  29. BOOST_TEST(test("0", 0));
  30. BOOST_TEST(test("123", 123));
  31. BOOST_TEST(test("-123", -123));
  32. BOOST_TEST(test("0", int_, 0));
  33. BOOST_TEST(test("123", int_, 123));
  34. BOOST_TEST(test("-123", int_, -123));
  35. BOOST_TEST(test_delimited("0 ", int_, 0, char_(' ')));
  36. BOOST_TEST(test_delimited("123 ", int_, 123, char_(' ')));
  37. BOOST_TEST(test_delimited("-123 ", int_, -123, char_(' ')));
  38. BOOST_TEST(test("0", lower[int_], 0));
  39. BOOST_TEST(test("123", lower[int_], 123));
  40. BOOST_TEST(test("-123", lower[int_], -123));
  41. BOOST_TEST(test_delimited("0 ", lower[int_], 0, char_(' ')));
  42. BOOST_TEST(test_delimited("123 ", lower[int_], 123, char_(' ')));
  43. BOOST_TEST(test_delimited("-123 ", lower[int_], -123, char_(' ')));
  44. BOOST_TEST(test("0", upper[int_], 0));
  45. BOOST_TEST(test("123", upper[int_], 123));
  46. BOOST_TEST(test("-123", upper[int_], -123));
  47. BOOST_TEST(test_delimited("0 ", upper[int_], 0, char_(' ')));
  48. BOOST_TEST(test_delimited("123 ", upper[int_], 123, char_(' ')));
  49. BOOST_TEST(test_delimited("-123 ", upper[int_], -123, char_(' ')));
  50. ///////////////////////////////////////////////////////////////////////
  51. BOOST_TEST(test("0", int_(0)));
  52. BOOST_TEST(test("123", int_(123)));
  53. BOOST_TEST(test("-123", int_(-123)));
  54. BOOST_TEST(test_delimited("0 ", int_(0), char_(' ')));
  55. BOOST_TEST(test_delimited("123 ", int_(123), char_(' ')));
  56. BOOST_TEST(test_delimited("-123 ", int_(-123), char_(' ')));
  57. BOOST_TEST(test("0", lower[int_(0)]));
  58. BOOST_TEST(test("123", lower[int_(123)]));
  59. BOOST_TEST(test("-123", lower[int_(-123)]));
  60. BOOST_TEST(test_delimited("0 ", lower[int_(0)], char_(' ')));
  61. BOOST_TEST(test_delimited("123 ", lower[int_(123)], char_(' ')));
  62. BOOST_TEST(test_delimited("-123 ", lower[int_(-123)], char_(' ')));
  63. BOOST_TEST(test("0", upper[int_(0)]));
  64. BOOST_TEST(test("123", upper[int_(123)]));
  65. BOOST_TEST(test("-123", upper[int_(-123)]));
  66. BOOST_TEST(test_delimited("0 ", upper[int_(0)], char_(' ')));
  67. BOOST_TEST(test_delimited("123 ", upper[int_(123)], char_(' ')));
  68. BOOST_TEST(test_delimited("-123 ", upper[int_(-123)], char_(' ')));
  69. }
  70. { // literals, make sure there are no ambiguities
  71. BOOST_TEST(test("0", lit(short(0))));
  72. BOOST_TEST(test("0", lit(0)));
  73. BOOST_TEST(test("0", lit(0L)));
  74. #ifdef BOOST_HAS_LONG_LONG
  75. BOOST_TEST(test("0", lit(0LL)));
  76. #endif
  77. BOOST_TEST(test("0", lit((unsigned short)0)));
  78. BOOST_TEST(test("0", lit(0U)));
  79. BOOST_TEST(test("0", lit(0UL)));
  80. #ifdef BOOST_HAS_LONG_LONG
  81. BOOST_TEST(test("0", lit(0ULL)));
  82. #endif
  83. BOOST_TEST(test("a", lit('a')));
  84. BOOST_TEST(test("a", 'a'));
  85. BOOST_TEST(test(L"a", L'a'));
  86. }
  87. { // lazy numerics
  88. using namespace boost::phoenix;
  89. BOOST_TEST(test("0", int_(val(0))));
  90. BOOST_TEST(test("123", int_(val(123))));
  91. BOOST_TEST(test("-123", int_(val(-123))));
  92. int i1 = 0, i2 = 123, i3 = -123;
  93. BOOST_TEST(test("0", int_(ref(i1))));
  94. BOOST_TEST(test("123", int_(ref(i2))));
  95. BOOST_TEST(test("-123", int_(ref(i3))));
  96. }
  97. {
  98. ///////////////////////////////////////////////////////////////////////
  99. using namespace boost::spirit::ascii;
  100. BOOST_TEST(test("1234", uint_(1234)));
  101. BOOST_TEST(test("ff", hex(0xff)));
  102. BOOST_TEST(test("1234", oct(01234)));
  103. BOOST_TEST(test("11110000", bin(0xf0)));
  104. BOOST_TEST(test_delimited("1234 ", uint_(1234), char_(' ')));
  105. BOOST_TEST(test_delimited("ff ", hex(0xff), char_(' ')));
  106. BOOST_TEST(test_delimited("1234 ", oct(01234), char_(' ')));
  107. BOOST_TEST(test_delimited("11110000 ", bin(0xf0), char_(' ')));
  108. BOOST_TEST(test("1234", lower[uint_(1234)]));
  109. BOOST_TEST(test("ff", lower[hex(0xff)]));
  110. BOOST_TEST(test("1234", lower[oct(01234)]));
  111. BOOST_TEST(test("11110000", lower[bin(0xf0)]));
  112. BOOST_TEST(test_delimited("1234 ", lower[uint_(1234)], char_(' ')));
  113. BOOST_TEST(test_delimited("ff ", lower[hex(0xff)], char_(' ')));
  114. BOOST_TEST(test_delimited("1234 ", lower[oct(01234)], char_(' ')));
  115. BOOST_TEST(test_delimited("11110000 ", lower[bin(0xf0)], char_(' ')));
  116. BOOST_TEST(test("1234", upper[uint_(1234)]));
  117. BOOST_TEST(test("FF", upper[hex(0xff)]));
  118. BOOST_TEST(test("1234", upper[oct(01234)]));
  119. BOOST_TEST(test("11110000", upper[bin(0xf0)]));
  120. BOOST_TEST(test_delimited("1234 ", upper[uint_(1234)], char_(' ')));
  121. BOOST_TEST(test_delimited("FF ", upper[hex(0xff)], char_(' ')));
  122. BOOST_TEST(test_delimited("1234 ", upper[oct(01234)], char_(' ')));
  123. BOOST_TEST(test_delimited("11110000 ", upper[bin(0xf0)], char_(' ')));
  124. BOOST_TEST(test("FF", upper[upper[hex(0xff)]]));
  125. BOOST_TEST(test("FF", upper[lower[hex(0xff)]]));
  126. BOOST_TEST(test("ff", lower[upper[hex(0xff)]]));
  127. BOOST_TEST(test("ff", lower[lower[hex(0xff)]]));
  128. BOOST_TEST(test_delimited("FF ", upper[upper[hex(0xff)]], char_(' ')));
  129. BOOST_TEST(test_delimited("FF ", upper[lower[hex(0xff)]], char_(' ')));
  130. BOOST_TEST(test_delimited("ff ", lower[upper[hex(0xff)]], char_(' ')));
  131. BOOST_TEST(test_delimited("ff ", lower[lower[hex(0xff)]], char_(' ')));
  132. }
  133. return boost::report_errors();
  134. }