real4.cpp 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /*=============================================================================
  2. Copyright (c) 2001-2015 Joel de Guzman
  3. Copyright (c) 2001-2011 Hartmut Kaiser
  4. Copyright (c) 2011 Bryce Lelbach
  5. Use, modification and distribution is subject to the Boost Software
  6. License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  7. http://www.boost.org/LICENSE_1_0.txt)
  8. =============================================================================*/
  9. #include "real.hpp"
  10. int
  11. main()
  12. {
  13. using spirit_test::test;
  14. using spirit_test::test_attr;
  15. ///////////////////////////////////////////////////////////////////////////
  16. // Custom data type
  17. ///////////////////////////////////////////////////////////////////////////
  18. {
  19. using boost::math::concepts::real_concept;
  20. using boost::spirit::x3::real_parser;
  21. using boost::spirit::x3::real_policies;
  22. using boost::spirit::x3::parse;
  23. real_parser<real_concept, real_policies<real_concept> > custom_real;
  24. real_concept d;
  25. BOOST_TEST(test("-1234", custom_real));
  26. BOOST_TEST(test_attr("-1234", custom_real, d) && compare(d, -1234));
  27. BOOST_TEST(test("-1.2e3", custom_real));
  28. BOOST_TEST(test_attr("-1.2e3", custom_real, d) && compare(d, -1.2e3));
  29. BOOST_TEST(test("+1.2e3", custom_real));
  30. BOOST_TEST(test_attr("+1.2e3", custom_real, d) && compare(d, 1.2e3));
  31. BOOST_TEST(test("-0.1", custom_real));
  32. BOOST_TEST(test_attr("-0.1", custom_real, d) && compare(d, -0.1));
  33. BOOST_TEST(test("-1.2e-3", custom_real));
  34. BOOST_TEST(test_attr("-1.2e-3", custom_real, d) && compare(d, -1.2e-3));
  35. BOOST_TEST(test("-1.e2", custom_real));
  36. BOOST_TEST(test_attr("-1.e2", custom_real, d) && compare(d, -1.e2));
  37. BOOST_TEST(test("-.2e3", custom_real));
  38. BOOST_TEST(test_attr("-.2e3", custom_real, d) && compare(d, -.2e3));
  39. BOOST_TEST(test("-2e3", custom_real));
  40. BOOST_TEST(test_attr("-2e3", custom_real, d) && compare(d, -2e3));
  41. BOOST_TEST(!test("-e3", custom_real));
  42. BOOST_TEST(!test_attr("-e3", custom_real, d));
  43. BOOST_TEST(!test("-1.2e", custom_real));
  44. BOOST_TEST(!test_attr("-1.2e", custom_real, d));
  45. }
  46. ///////////////////////////////////////////////////////////////////////////
  47. // custom real tests
  48. ///////////////////////////////////////////////////////////////////////////
  49. {
  50. using boost::spirit::x3::double_;
  51. custom_real n;
  52. BOOST_TEST(test_attr("-123456e6", double_, n));
  53. }
  54. return boost::report_errors();
  55. }