int2.cpp 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  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/spirit/include/karma_rule.hpp>
  18. #include <boost/limits.hpp>
  19. #include "test.hpp"
  20. using namespace spirit_test;
  21. ///////////////////////////////////////////////////////////////////////////////
  22. int
  23. main()
  24. {
  25. using namespace boost::spirit;
  26. {
  27. using namespace boost::spirit::ascii;
  28. karma::int_generator<int, 10, true> const signed_int =
  29. karma::int_generator<int, 10, true>();
  30. ///////////////////////////////////////////////////////////////////////
  31. BOOST_TEST(test(" 0", signed_int, 0));
  32. BOOST_TEST(test("+123", signed_int, 123));
  33. BOOST_TEST(test("-123", signed_int, -123));
  34. BOOST_TEST(test_delimited(" 0 ", signed_int, 0, char_(' ')));
  35. BOOST_TEST(test_delimited("+123 ", signed_int, 123, char_(' ')));
  36. BOOST_TEST(test_delimited("-123 ", signed_int, -123, char_(' ')));
  37. BOOST_TEST(test(" 0", lower[signed_int], 0));
  38. BOOST_TEST(test("+123", lower[signed_int], 123));
  39. BOOST_TEST(test("-123", lower[signed_int], -123));
  40. BOOST_TEST(test_delimited(" 0 ", lower[signed_int], 0, char_(' ')));
  41. BOOST_TEST(test_delimited("+123 ", lower[signed_int], 123, char_(' ')));
  42. BOOST_TEST(test_delimited("-123 ", lower[signed_int], -123, char_(' ')));
  43. BOOST_TEST(test(" 0", upper[signed_int], 0));
  44. BOOST_TEST(test("+123", upper[signed_int], 123));
  45. BOOST_TEST(test("-123", upper[signed_int], -123));
  46. BOOST_TEST(test_delimited(" 0 ", upper[signed_int], 0, char_(' ')));
  47. BOOST_TEST(test_delimited("+123 ", upper[signed_int], 123, char_(' ')));
  48. BOOST_TEST(test_delimited("-123 ", upper[signed_int], -123, char_(' ')));
  49. ///////////////////////////////////////////////////////////////////////
  50. BOOST_TEST(test(" 0", signed_int(0)));
  51. BOOST_TEST(test("+123", signed_int(123)));
  52. BOOST_TEST(test("-123", signed_int(-123)));
  53. BOOST_TEST(test_delimited(" 0 ", signed_int(0), char_(' ')));
  54. BOOST_TEST(test_delimited("+123 ", signed_int(123), char_(' ')));
  55. BOOST_TEST(test_delimited("-123 ", signed_int(-123), char_(' ')));
  56. BOOST_TEST(test(" 0", lower[signed_int(0)]));
  57. BOOST_TEST(test("+123", lower[signed_int(123)]));
  58. BOOST_TEST(test("-123", lower[signed_int(-123)]));
  59. BOOST_TEST(test_delimited(" 0 ", lower[signed_int(0)], char_(' ')));
  60. BOOST_TEST(test_delimited("+123 ", lower[signed_int(123)], char_(' ')));
  61. BOOST_TEST(test_delimited("-123 ", lower[signed_int(-123)], char_(' ')));
  62. BOOST_TEST(test(" 0", upper[signed_int(0)]));
  63. BOOST_TEST(test("+123", upper[signed_int(123)]));
  64. BOOST_TEST(test("-123", upper[signed_int(-123)]));
  65. BOOST_TEST(test_delimited(" 0 ", upper[signed_int(0)], char_(' ')));
  66. BOOST_TEST(test_delimited("+123 ", upper[signed_int(123)], char_(' ')));
  67. BOOST_TEST(test_delimited("-123 ", upper[signed_int(-123)], char_(' ')));
  68. using namespace boost::phoenix;
  69. BOOST_TEST(test(" 0", signed_int(val(0))));
  70. BOOST_TEST(test("+123", signed_int(val(123))));
  71. BOOST_TEST(test("-123", signed_int(val(-123))));
  72. int i1 = 0, i2 = 123, i3 = -123;
  73. BOOST_TEST(test(" 0", signed_int(ref(i1))));
  74. BOOST_TEST(test("+123", signed_int(ref(i2))));
  75. BOOST_TEST(test("-123", signed_int(ref(i3))));
  76. }
  77. {
  78. ///////////////////////////////////////////////////////////////////////
  79. using namespace boost::spirit::ascii;
  80. BOOST_TEST(test("1234", uint_, 1234));
  81. BOOST_TEST(test("ff", hex, 0xff));
  82. BOOST_TEST(test("1234", oct, 01234));
  83. BOOST_TEST(test("11110000", bin, 0xf0));
  84. BOOST_TEST(test_delimited("1234 ", uint_, 1234, char_(' ')));
  85. BOOST_TEST(test_delimited("ff ", hex, 0xff, char_(' ')));
  86. BOOST_TEST(test_delimited("1234 ", oct, 01234, char_(' ')));
  87. BOOST_TEST(test_delimited("11110000 ", bin, 0xf0, char_(' ')));
  88. // test unsigned generator with signed integral value
  89. BOOST_TEST(test("ff", hex, (char)0xff));
  90. BOOST_TEST(test_delimited("ff ", hex, (char)0xff, char_(' ')));
  91. BOOST_TEST(test("1234", lower[uint_], 1234));
  92. BOOST_TEST(test("ff", lower[hex], 0xff));
  93. BOOST_TEST(test("1234", lower[oct], 01234));
  94. BOOST_TEST(test("11110000", lower[bin], 0xf0));
  95. BOOST_TEST(test_delimited("1234 ", lower[uint_], 1234, char_(' ')));
  96. BOOST_TEST(test_delimited("ff ", lower[hex], 0xff, char_(' ')));
  97. BOOST_TEST(test_delimited("1234 ", lower[oct], 01234, char_(' ')));
  98. BOOST_TEST(test_delimited("11110000 ", lower[bin], 0xf0, char_(' ')));
  99. BOOST_TEST(test("1234", upper[uint_], 1234));
  100. BOOST_TEST(test("FF", upper[hex], 0xff));
  101. BOOST_TEST(test("1234", upper[oct], 01234));
  102. BOOST_TEST(test("11110000", upper[bin], 0xf0));
  103. BOOST_TEST(test_delimited("1234 ", upper[uint_], 1234, char_(' ')));
  104. BOOST_TEST(test_delimited("FF ", upper[hex], 0xff, char_(' ')));
  105. BOOST_TEST(test_delimited("1234 ", upper[oct], 01234, char_(' ')));
  106. BOOST_TEST(test_delimited("11110000 ", upper[bin], 0xf0, char_(' ')));
  107. // no generator transformation should occur for uint_'s
  108. BOOST_TEST(test("1234", upper[upper[uint_]], 1234));
  109. BOOST_TEST(test("1234", upper[lower[uint_]], 1234));
  110. BOOST_TEST(test("1234", lower[upper[uint_]], 1234));
  111. BOOST_TEST(test("1234", lower[lower[uint_]], 1234));
  112. BOOST_TEST(test_delimited("1234 ", upper[upper[uint_]], 1234, char_(' ')));
  113. BOOST_TEST(test_delimited("1234 ", upper[lower[uint_]], 1234, char_(' ')));
  114. BOOST_TEST(test_delimited("1234 ", lower[upper[uint_]], 1234, char_(' ')));
  115. BOOST_TEST(test_delimited("1234 ", lower[lower[uint_]], 1234, char_(' ')));
  116. BOOST_TEST(test("FF", upper[upper[hex]], 0xff));
  117. BOOST_TEST(test("FF", upper[lower[hex]], 0xff));
  118. BOOST_TEST(test("ff", lower[upper[hex]], 0xff));
  119. BOOST_TEST(test("ff", lower[lower[hex]], 0xff));
  120. BOOST_TEST(test_delimited("FF ", upper[upper[hex]], 0xff, char_(' ')));
  121. BOOST_TEST(test_delimited("FF ", upper[lower[hex]], 0xff, char_(' ')));
  122. BOOST_TEST(test_delimited("ff ", lower[upper[hex]], 0xff, char_(' ')));
  123. BOOST_TEST(test_delimited("ff ", lower[lower[hex]], 0xff, char_(' ')));
  124. }
  125. ///////////////////////////////////////////////////////////////////////////
  126. {
  127. using boost::spirit::karma::int_;
  128. using boost::spirit::karma::_1;
  129. using boost::spirit::karma::_val;
  130. using boost::spirit::karma::space;
  131. int i = 123;
  132. int j = 456;
  133. BOOST_TEST(test("123", int_[_1 = _val], i));
  134. BOOST_TEST(test_delimited("456 ", int_[_1 = _val], j, space));
  135. }
  136. return boost::report_errors();
  137. }