@@ -36,32 +36,55 @@ int main_readme3() {
3636 return EXIT_SUCCESS;
3737}
3838
39- int main ()
40- {
41- const std::vector<double > expected{ -0.2 , 0.02 , 0.002 , 1 ., 0 ., std::numeric_limits<double >::infinity () };
42- const std::vector<std::string> accept{ " -0.2" , " 0.02" , " 0.002" , " 1e+0000" , " 0e-2" , " inf" };
43- const std::vector<std::string> reject{" -.2" , " 00.02" , " 0.e+1" , " 00.e+1" ,
44- " 1e" , " 1e+" , " .25" , " +0.25" ,
45- " inf" , " nan(snan)" };
39+ struct ExpectedResult {
40+ double value;
41+ std::string junk_chars;
42+ };
43+ struct AcceptedValue {
44+ std::string input;
45+ ExpectedResult expected;
46+ };
47+
48+ int main () {
49+ const std::vector<AcceptedValue> accept{
50+ {" -0.2" , {-0.2 , " " }},
51+ {" 0.02" , {0.02 , " " }},
52+ {" 0.002" , {0.002 , " " }},
53+ {" 1e+0000" , {1 ., " " }},
54+ {" 0e-2" , {0 ., " " }},
55+ {" 1e" , {1 ., " e" }},
56+ {" 1e+" , {1 ., " e+" }},
57+ {" inf" , {std::numeric_limits<double >::infinity (), " " }}};
58+ const std::vector<std::string> reject{" -.2" , " 00.02" , " 0.e+1" , " 00.e+1" ,
59+ " .25" , " +0.25" , " inf" , " nan(snan)" };
4660
4761 for (std::size_t i = 0 ; i < accept.size (); ++i)
4862 {
49- const auto & f = accept[i];
63+ const auto & s = accept[i].input ;
64+ const auto & expected = accept[i].expected ;
5065 double result;
51- auto answer = fast_float::from_chars (f.data (), f.data () + f.size (), result, fast_float::chars_format::json_or_infnan);
52- if (answer.ec != std::errc () || result != expected[i]) {
53- std::cerr << " json fmt rejected valid json " << f << std::endl;
66+ auto answer = fast_float::from_chars (s.data (), s.data () + s.size (), result, fast_float::chars_format::json_or_infnan);
67+ if (answer.ec != std::errc ()) {
68+ std::cerr << " json fmt rejected valid json " << s << std::endl;
69+ return EXIT_FAILURE;
70+ }
71+ if (result != expected.value ) {
72+ std::cerr << " json fmt gave wrong result " << s << " (expected " << expected.value << " got " << result << " )" << std::endl;
73+ return EXIT_FAILURE;
74+ }
75+ if (std::string (answer.ptr ) != expected.junk_chars ) {
76+ std::cerr << " json fmt has wrong trailing characters " << s << " (expected " << expected.junk_chars << " got " << answer.ptr << " )" << std::endl;
5477 return EXIT_FAILURE;
5578 }
5679 }
5780
5881 for (std::size_t i = 0 ; i < reject.size (); ++i)
5982 {
60- const auto & f = reject[i];
83+ const auto & s = reject[i];
6184 double result;
62- auto answer = fast_float::from_chars (f .data (), f .data () + f .size (), result, fast_float::chars_format::json);
85+ auto answer = fast_float::from_chars (s .data (), s .data () + s .size (), result, fast_float::chars_format::json);
6386 if (answer.ec == std::errc ()) {
64- std::cerr << " json fmt accepted invalid json " << f << std::endl;
87+ std::cerr << " json fmt accepted invalid json " << s << std::endl;
6588 return EXIT_FAILURE;
6689 }
6790 }
0 commit comments