@@ -36,32 +36,55 @@ int main_readme3() {
36
36
return EXIT_SUCCESS;
37
37
}
38
38
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)" };
46
60
47
61
for (std::size_t i = 0 ; i < accept.size (); ++i)
48
62
{
49
- const auto & f = accept[i];
63
+ const auto & s = accept[i].input ;
64
+ const auto & expected = accept[i].expected ;
50
65
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;
54
77
return EXIT_FAILURE;
55
78
}
56
79
}
57
80
58
81
for (std::size_t i = 0 ; i < reject.size (); ++i)
59
82
{
60
- const auto & f = reject[i];
83
+ const auto & s = reject[i];
61
84
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);
63
86
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;
65
88
return EXIT_FAILURE;
66
89
}
67
90
}
0 commit comments