| 24 | } |
| 25 | |
| 26 | void require_allclose( |
| 27 | const std::vector<float> & actual, |
| 28 | const std::vector<float> & expected, |
| 29 | float atol, |
| 30 | const std::string & label) { |
| 31 | if (actual.size() != expected.size()) { |
| 32 | throw std::runtime_error(label + " size mismatch"); |
| 33 | } |
| 34 | for (size_t i = 0; i < actual.size(); ++i) { |
| 35 | const float diff = std::fabs(actual[i] - expected[i]); |
| 36 | if (diff > atol) { |
| 37 | std::ostringstream oss; |
| 38 | oss << label << " mismatch at " << i << ": expected " << expected[i] << ", got " << actual[i] |
| 39 | << ", diff=" << diff; |
| 40 | throw std::runtime_error(oss.str()); |
| 41 | } |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | void require_max_abs_diff_below( |
| 46 | const std::vector<float> & actual, |
no test coverage detected