| 291 | } |
| 292 | |
| 293 | void CheckDispatchBest(std::string func_name, std::vector<TypeHolder> original_values, |
| 294 | std::vector<TypeHolder> expected_equivalent_values) { |
| 295 | ASSERT_OK_AND_ASSIGN(auto function, GetFunctionRegistry()->GetFunction(func_name)); |
| 296 | |
| 297 | auto values = original_values; |
| 298 | ASSERT_OK_AND_ASSIGN(auto actual_kernel, function->DispatchBest(&values)); |
| 299 | |
| 300 | ASSERT_OK_AND_ASSIGN(auto expected_kernel, |
| 301 | function->DispatchExact(expected_equivalent_values)); |
| 302 | |
| 303 | EXPECT_EQ(actual_kernel, expected_kernel) |
| 304 | << " DispatchBest" << TypeHolder::ToString(original_values) << " => " |
| 305 | << actual_kernel->signature->ToString() << "\n" |
| 306 | << " DispatchExact" << TypeHolder::ToString(expected_equivalent_values) << " => " |
| 307 | << expected_kernel->signature->ToString(); |
| 308 | EXPECT_EQ(values.size(), expected_equivalent_values.size()); |
| 309 | for (size_t i = 0; i < values.size(); i++) { |
| 310 | AssertTypeEqual(*values[i], *expected_equivalent_values[i]); |
| 311 | } |
| 312 | } |
| 313 | |
| 314 | void CheckDispatchBestWithCastedTypes(std::string func_name, |
| 315 | std::vector<TypeHolder> values, |