Ticket #8699: spirit.qi.real.patch
File spirit.qi.real.patch, 3.9 KB (added by , 9 years ago) |
---|
-
boost/spirit/home/qi/numeric/detail/real_impl.hpp
238 238 { 239 239 // No exponent found. Scale the number by -frac_digits. 240 240 traits::scale(-frac_digits, n); 241 } 242 else if (traits::is_equal_to_one(n)) 243 { 241 244 242 // There is a chance of having to parse one of the 1.0#... 245 243 // styles some implementations use for representing NaN or Inf. 244 if (frac_digits == 1 && traits::is_equal_to_one(n) && 245 (first != last && *first == '#')) 246 { 247 save = first; 246 248 247 // Check whether the number to parse is a NaN or Inf248 if (p.parse_nan(first, last, n) ||249 p.parse_inf(first, last, n))250 {251 // If we got a negative sign, negate the number252 traits::assign_to(traits::negate(neg, n), attr);253 return true; // got a NaN or Inf, return immediately249 ++first; 250 // Check whether the number to parse is a NaN or Inf 251 if (!p.parse_nan(first, last, n) && 252 !p.parse_inf(first, last, n)) 253 { 254 first = save; 255 } 254 256 } 255 257 } 256 258 -
libs/spirit/test/qi/real2.cpp
69 69 70 70 using boost::math::fpclassify; 71 71 using boost::spirit::detail::signbit; // Boost version is broken 72 72 73 73 BOOST_TEST(test("-inf", double_)); 74 74 BOOST_TEST(test("-infinity", double_)); 75 75 BOOST_TEST(test_attr("-inf", double_, d) && … … 83 83 BOOST_TEST(test_attr("-INFINITY", double_, d) && 84 84 FP_INFINITE == fpclassify(d) && signbit(d)); 85 85 86 BOOST_TEST(test("-1.0#inf", double_)); 87 BOOST_TEST(test("-1.0#infinity", double_)); 88 BOOST_TEST(test_attr("-1.0#inf", double_, d) && 89 FP_INFINITE == fpclassify(d) && signbit(d)); 90 BOOST_TEST(test_attr("-1.0#infinity", double_, d) && 91 FP_INFINITE == fpclassify(d) && signbit(d)); 92 BOOST_TEST(test("-1.0#INF", double_)); 93 BOOST_TEST(test("-1.0#INFINITY", double_)); 94 BOOST_TEST(test_attr("-1.0#INF", double_, d) && 95 FP_INFINITE == fpclassify(d) && signbit(d)); 96 BOOST_TEST(test_attr("-1.0#INFINITY", double_, d) && 97 FP_INFINITE == fpclassify(d) && signbit(d)); 98 86 99 BOOST_TEST(test("-nan", double_)); 87 100 BOOST_TEST(test_attr("-nan", double_, d) && 88 101 FP_NAN == fpclassify(d) && signbit(d)); … … 96 109 BOOST_TEST(test("-NAN(...)", double_)); 97 110 BOOST_TEST(test_attr("-NAN(...)", double_, d) && 98 111 FP_NAN == fpclassify(d) && signbit(d)); 112 113 BOOST_TEST(test("-1.0#nan", double_)); 114 BOOST_TEST(test_attr("-1.0#nan", double_, d) && 115 FP_NAN == fpclassify(d) && signbit(d)); 116 BOOST_TEST(test("-1.0#NAN", double_)); 117 BOOST_TEST(test_attr("-1.0#NAN", double_, d) && 118 FP_NAN == fpclassify(d) && signbit(d)); 119 120 BOOST_TEST(test("-1.0#nan(...)", double_)); 121 BOOST_TEST(test_attr("-1.0#nan(...)", double_, d) && 122 FP_NAN == fpclassify(d) && signbit(d)); 123 BOOST_TEST(test("-1.0#NAN(...)", double_)); 124 BOOST_TEST(test_attr("-1.0#NAN(...)", double_, d) && 125 FP_NAN == fpclassify(d) && signbit(d)); 99 126 } 100 127 101 128 return boost::report_errors();