| 148 | |
| 149 | template <typename Scalar> |
| 150 | void ComputeErrorStats(const std::vector<Scalar>& actual, |
| 151 | const std::vector<Scalar>& expected, |
| 152 | ErrorStats* error_stats) { |
| 153 | double max_abs_diff = 0; |
| 154 | double sum_abs_diff = 0; |
| 155 | double sum_diff = 0; |
| 156 | double max_abs_expected = 0; |
| 157 | EXPECT_EQ(actual.size(), expected.size()); |
| 158 | for (int i = 0; i < actual.size(); i++) { |
| 159 | double actual_val = static_cast<double>(actual[i]); |
| 160 | double expected_val = static_cast<double>(expected[i]); |
| 161 | double diff = actual_val - expected_val; |
| 162 | max_abs_expected = std::max(max_abs_expected, std::abs(expected_val)); |
| 163 | sum_diff += diff; |
| 164 | sum_abs_diff += std::abs(diff); |
| 165 | max_abs_diff = std::max(max_abs_diff, std::abs(diff)); |
| 166 | } |
| 167 | error_stats->scale_factor = max_abs_expected; |
| 168 | error_stats->max_abs_diff = max_abs_diff; |
| 169 | error_stats->mean_abs_diff = sum_abs_diff / actual.size(); |
| 170 | error_stats->abs_mean_diff = std::abs(sum_diff / actual.size()); |
| 171 | error_stats->size = actual.size(); |
| 172 | } |
| 173 | |
| 174 | template <typename AccumScalar, typename DstScalar> |
| 175 | bool CheckErrorStats(const ErrorStats& error_stats, int accumulation_depth) { |
no test coverage detected