attr.cpp 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*=============================================================================
  2. Copyright (c) 2001-2011 Hartmut Kaiser
  3. Copyright (c) 2001-2011 Joel de Guzman
  4. Distributed under the Boost Software License, Version 1.0. (See accompanying
  5. file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. =============================================================================*/
  7. #include <boost/detail/lightweight_test.hpp>
  8. #include <boost/spirit/include/qi_char.hpp>
  9. #include <boost/spirit/include/qi_auxiliary.hpp>
  10. #include <boost/spirit/include/qi_numeric.hpp>
  11. #include <boost/spirit/include/qi_operator.hpp>
  12. #include <boost/spirit/include/support_argument.hpp>
  13. #include <boost/spirit/include/phoenix_core.hpp>
  14. #include <boost/spirit/include/phoenix_operator.hpp>
  15. #include <boost/fusion/include/std_pair.hpp>
  16. #include <iostream>
  17. #include "test.hpp"
  18. int
  19. main()
  20. {
  21. using spirit_test::test_attr;
  22. namespace qi = boost::spirit::qi;
  23. using qi::attr;
  24. using qi::double_;
  25. {
  26. double d = 0.0;
  27. BOOST_TEST(test_attr("", attr(1.0), d) && d == 1.0);
  28. double d1 = 1.0;
  29. BOOST_TEST(test_attr("", attr(d1), d) && d == 1.0);
  30. std::pair<double, double> p;
  31. BOOST_TEST(test_attr("1.0", double_ >> attr(1.0), p) &&
  32. p.first == 1.0 && p.second == 1.0);
  33. char c = '\0';
  34. BOOST_TEST(test_attr("", attr('a'), c) && c == 'a');
  35. std::string str;
  36. BOOST_TEST(test_attr("", attr("test"), str) && str == "test");
  37. }
  38. { // testing lazy constructs
  39. using boost::phoenix::val;
  40. using boost::phoenix::ref;
  41. double d = 0.0;
  42. BOOST_TEST(test_attr("", attr(val(1.0)), d) && d == 1.0);
  43. double d1 = 2.0;
  44. BOOST_TEST(test_attr("", attr(ref(d1)), d) && d == 2.0);
  45. }
  46. {
  47. std::string s;
  48. BOOST_TEST(test_attr("s", "s" >> qi::attr(std::string("123")), s) &&
  49. s == "123");
  50. }
  51. return boost::report_errors();
  52. }