FastLED 3.10.6
Loading...
Searching...
No Matches

◆ run()

Result autoresearch::ieee754_check::run ( )
inline

Definition at line 103 of file AutoResearchIeee754.h.

103 {
104 Result r{};
105 r.success = true;
106 r.first_failure = nullptr;
107
108 Ieee754CaseState& state = ieee754CaseState();
109
110 for (fl::size i = 0; i < sizeof(state.parse_cases) / sizeof(state.parse_cases[0]); ++i) {
111 const ParseCase& c = state.parse_cases[i];
112 fl::size consumed = 0;
113 const fl::u32 actual =
114 fl::ieee754_parse_decimal(c.text, fl::strlen(c.text), &consumed);
115 const bool value_ok = c.exact
116 ? actual == c.expected_bits
117 : withinOneUlp(actual, c.expected_bits);
118 recordCheck(r, c.text, value_ok && consumed == fl::strlen(c.text),
119 c.expected_bits, actual);
120 }
121
122 for (fl::size i = 0; i < sizeof(state.format_cases) / sizeof(state.format_cases[0]); ++i) {
123 const FormatCase& c = state.format_cases[i];
124 const fl::string actual = fl::ieee754_format_decimal(c.bits, c.precision);
125 recordCheck(r, c.expected_text, actual == c.expected_text,
126 c.bits, c.bits);
127 }
128
129 for (fl::size i = 0; i < sizeof(state.round_trip_bits) / sizeof(state.round_trip_bits[0]); ++i) {
130 const fl::u32 expected = state.round_trip_bits[i];
131 const fl::string text = fl::ieee754_format_decimal(expected, 9);
132 const fl::u32 actual =
133 fl::ieee754_parse_decimal(text.c_str(), text.size());
134 recordCheck(r, "roundtrip", withinOneUlp(actual, expected),
135 expected, actual);
136 }
137
138 fl::size consumed = 123u;
139 (void)fl::ieee754_parse_decimal("nan", 3, &consumed);
140 recordCheck(r, "nan-reject", consumed == 0u, 0u, static_cast<fl::u32>(consumed));
141
142 r.success = r.tests_failed == 0u;
143 return r;
144}
TestState state
const char * c_str() const FL_NO_EXCEPT
fl::size size() const FL_NO_EXCEPT
Ieee754CaseState & ieee754CaseState()
void recordCheck(Result &r, const char *name, bool passed, fl::u32 expected=0, fl::u32 actual=0) FL_NO_EXCEPT
bool withinOneUlp(fl::u32 actual, fl::u32 expected) FL_NO_EXCEPT
u32 ieee754_parse_decimal(const char *s, fl::size len, fl::size *consumed) FL_NO_EXCEPT
Parse a decimal floating-point number into IEEE 754 single-precision bits.
size_t strlen(const char *s) FL_NO_EXCEPT
fl::string ieee754_format_decimal(u32 bits, int precision) FL_NO_EXCEPT
Format IEEE 754 single-precision bits as decimal text.

References autoresearch::ieee754_check::FormatCase::bits, fl::basic_string::c_str(), autoresearch::ieee754_check::ParseCase::exact, autoresearch::ieee754_check::ParseCase::expected_bits, autoresearch::ieee754_check::FormatCase::expected_text, fl::ieee754_format_decimal(), fl::ieee754_parse_decimal(), ieee754CaseState(), autoresearch::ieee754_check::FormatCase::precision, recordCheck(), run(), fl::basic_string::size(), state, fl::strlen(), autoresearch::ieee754_check::Result::success, autoresearch::ieee754_check::ParseCase::text, and withinOneUlp().

Referenced by autoResearchLowMemorySetup(), and run().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: