| 39 | } |
| 40 | |
| 41 | TEST(RegisterEqualityFunctionsHomogeneous, RegistersEqualOperators) { |
| 42 | FunctionRegistry registry; |
| 43 | RuntimeOptions options; |
| 44 | options.enable_heterogeneous_equality = false; |
| 45 | |
| 46 | ASSERT_THAT(RegisterEqualityFunctions(registry, options), IsOk()); |
| 47 | auto overloads = registry.ListFunctions(); |
| 48 | EXPECT_THAT( |
| 49 | overloads[builtin::kEqual], |
| 50 | UnorderedElementsAre( |
| 51 | MatchesDescriptor(builtin::kEqual, false, |
| 52 | std::vector<Kind>{Kind::kList, Kind::kList}), |
| 53 | MatchesDescriptor(builtin::kEqual, false, |
| 54 | std::vector<Kind>{Kind::kMap, Kind::kMap}), |
| 55 | MatchesDescriptor(builtin::kEqual, false, |
| 56 | std::vector<Kind>{Kind::kBool, Kind::kBool}), |
| 57 | MatchesDescriptor(builtin::kEqual, false, |
| 58 | std::vector<Kind>{Kind::kInt, Kind::kInt}), |
| 59 | MatchesDescriptor(builtin::kEqual, false, |
| 60 | std::vector<Kind>{Kind::kUint, Kind::kUint}), |
| 61 | MatchesDescriptor(builtin::kEqual, false, |
| 62 | std::vector<Kind>{Kind::kDouble, Kind::kDouble}), |
| 63 | MatchesDescriptor( |
| 64 | builtin::kEqual, false, |
| 65 | std::vector<Kind>{Kind::kDuration, Kind::kDuration}), |
| 66 | MatchesDescriptor( |
| 67 | builtin::kEqual, false, |
| 68 | std::vector<Kind>{Kind::kTimestamp, Kind::kTimestamp}), |
| 69 | MatchesDescriptor(builtin::kEqual, false, |
| 70 | std::vector<Kind>{Kind::kString, Kind::kString}), |
| 71 | MatchesDescriptor(builtin::kEqual, false, |
| 72 | std::vector<Kind>{Kind::kBytes, Kind::kBytes}), |
| 73 | MatchesDescriptor(builtin::kEqual, false, |
| 74 | std::vector<Kind>{Kind::kType, Kind::kType}), |
| 75 | // Structs comparable to null, but struct == struct undefined. |
| 76 | MatchesDescriptor(builtin::kEqual, false, |
| 77 | std::vector<Kind>{Kind::kStruct, Kind::kNullType}), |
| 78 | MatchesDescriptor(builtin::kEqual, false, |
| 79 | std::vector<Kind>{Kind::kNullType, Kind::kStruct}), |
| 80 | MatchesDescriptor( |
| 81 | builtin::kEqual, false, |
| 82 | std::vector<Kind>{Kind::kNullType, Kind::kNullType}))); |
| 83 | |
| 84 | EXPECT_THAT( |
| 85 | overloads[builtin::kInequal], |
| 86 | UnorderedElementsAre( |
| 87 | MatchesDescriptor(builtin::kInequal, false, |
| 88 | std::vector<Kind>{Kind::kList, Kind::kList}), |
| 89 | MatchesDescriptor(builtin::kInequal, false, |
| 90 | std::vector<Kind>{Kind::kMap, Kind::kMap}), |
| 91 | MatchesDescriptor(builtin::kInequal, false, |
| 92 | std::vector<Kind>{Kind::kBool, Kind::kBool}), |
| 93 | MatchesDescriptor(builtin::kInequal, false, |
| 94 | std::vector<Kind>{Kind::kInt, Kind::kInt}), |
| 95 | MatchesDescriptor(builtin::kInequal, false, |
| 96 | std::vector<Kind>{Kind::kUint, Kind::kUint}), |
| 97 | MatchesDescriptor(builtin::kInequal, false, |
| 98 | std::vector<Kind>{Kind::kDouble, Kind::kDouble}), |
nothing calls this directly
no test coverage detected