20 using Tag = GraphSearchEvaluationValue::Tag;
22 constexpr Tag kFirstTag = 10;
23 constexpr Tag kSecondTag = 1;
26 TEST_CASE(
"LeftIsBetterTest_WhenLeftIsBetter_ShouldReturnTrue")
28 SUBCASE(
"LowerValueIsBetter")
31 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
33 .is_lower_better =
true,
37 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
38 { kFirstTag, kSecondTag });
41 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
42 left.
value.at(kFirstTag) = -1.0f;
43 left.value.at(kSecondTag) = -1.0f;
44 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
45 right.value.at(kFirstTag) = 1.0f;
46 right.value.at(kSecondTag) = 1.0f;
48 const bool actual = evaluator.LeftIsBetter(left, right);
50 const bool expected =
true;
52 CHECK(actual == expected);
55 SUBCASE(
"HigherValueIsBetter")
58 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
60 .is_lower_better =
false,
64 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
65 { kFirstTag, kSecondTag });
67 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
68 left.value.at(kFirstTag) = 1.0f;
69 left.value.at(kSecondTag) = 1.0f;
70 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
71 right.value.at(kFirstTag) = -1.0f;
72 right.value.at(kSecondTag) = -1.0f;
74 const bool actual = evaluator.LeftIsBetter(left, right);
76 const bool expected =
true;
78 CHECK(actual == expected);
82 SUBCASE(
"WhenFirstTagIsBetter")
85 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
87 .is_lower_better =
false,
91 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
92 { kFirstTag, kSecondTag });
94 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
95 left.value.at(kFirstTag) = 1.0f;
96 left.value.at(kSecondTag) = 0.0f;
97 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
98 right.value.at(kFirstTag) = 0.0f;
99 right.value.at(kSecondTag) = -1.0f;
101 const bool actual = evaluator.LeftIsBetter(left, right);
103 const bool expected =
true;
105 CHECK(actual == expected);
109 TEST_CASE(
"LeftIsBetterTest_WhenRightIsBetter_ShouldReturnFalse")
111 SUBCASE(
"LowerValueIsBetter")
113 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
115 .is_lower_better =
true,
119 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
120 { kFirstTag, kSecondTag });
122 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
123 left.value.at(kFirstTag) = 1.0f;
124 left.value.at(kSecondTag) = 1.0f;
125 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
126 right.value.at(kFirstTag) = -1.0f;
127 right.value.at(kSecondTag) = -1.0f;
129 const bool actual = evaluator.LeftIsBetter(left, right);
131 const bool expected =
false;
133 CHECK(actual == expected);
136 SUBCASE(
"HigherValueIsBetter")
138 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
140 .is_lower_better =
false,
144 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
145 { kFirstTag, kSecondTag });
147 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
148 left.value.at(kFirstTag) = -1.0f;
149 left.value.at(kSecondTag) = -1.0f;
150 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
151 right.value.at(kFirstTag) = 1.0f;
152 right.value.at(kSecondTag) = 1.0f;
154 const bool actual = evaluator.LeftIsBetter(left, right);
156 const bool expected =
false;
158 CHECK(actual == expected);
162 TEST_CASE(
"LeftIsBetterTest_WhenValuesAreEqual_ShouldReturnTrueOrFalse")
164 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
166 .is_lower_better =
true,
170 const GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
171 { kFirstTag, kSecondTag });
173 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
174 left.value.at(kFirstTag) = 1.0f;
175 left.value.at(kSecondTag) = 1.0f;
176 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
177 right.value.at(kFirstTag) = 1.0f;
178 right.value.at(kSecondTag) = 1.0f;
182 SUBCASE(
"WhenReturnTrueCaseOfEqualIsTrue")
184 const bool actual = evaluator.LeftIsBetter(left, right,
true);
186 const bool expected =
true;
188 CHECK(actual == expected);
192 SUBCASE(
"WhenReturnTrueCaseOfEqualIsFalse")
194 const bool actual = evaluator.LeftIsBetter(left, right,
false);
196 const bool expected =
false;
198 CHECK(actual == expected);
202 TEST_CASE(
"LeftIsBetterTest_WhenValuesAreEqualInMargin_ShouldReturnTrueOrFalse")
204 const GraphSearchEvaluator::EvaluationMethod evaluation_method =
206 .is_lower_better =
true,
210 const GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method }, { kSecondTag, evaluation_method } },
211 { kFirstTag, kSecondTag });
213 GraphSearchEvaluationValue left = evaluator.InitializeEvaluationValue();
214 left.value.at(kFirstTag) = 1.0f;
215 left.value.at(kSecondTag) = 1.0f;
216 GraphSearchEvaluationValue right = evaluator.InitializeEvaluationValue();
217 right.value.at(kFirstTag) = 0.5f;
218 right.value.at(kSecondTag) = 1.5f;
221 SUBCASE(
"WhenLeftIsPreferred_ShouldReturnTrue")
223 const bool actual = evaluator.LeftIsBetter(left, right,
true);
225 const bool expected =
true;
227 CHECK(actual == expected);
231 SUBCASE(
"WhenRightIsPreferred_ShouldReturnFalse")
233 const bool actual = evaluator.LeftIsBetter(left, right,
false);
235 const bool expected =
false;
237 CHECK(actual == expected);
241 TEST_CASE(
"InitializeEvaluationValueTest_ShouldReturnMinEvaluationValue")
245 const GraphSearchEvaluator::EvaluationMethod evaluation_method_min =
247 .is_lower_better =
true,
251 const GraphSearchEvaluator::EvaluationMethod evaluation_method_max =
253 .is_lower_better =
false,
258 GraphSearchEvaluator evaluator({ { kFirstTag, evaluation_method_min }, { kSecondTag, evaluation_method_max } },
259 { kFirstTag, kSecondTag });
261 const GraphSearchEvaluationValue actual = evaluator.InitializeEvaluationValue();
263 const GraphSearchEvaluationValue expected =
265 .value = { { kFirstTag, GraphSearchEvaluationValue::kMaxEvaluationValue },
266 { kSecondTag, GraphSearchEvaluationValue::kMinEvaluationValue } },
269 CHECK(actual.value.at(kFirstTag) == expected.value.at(kFirstTag));
270 CHECK(actual.value.at(kSecondTag) == expected.value.at(kSecondTag));
272 CHECK(actual.value.size() == expected.value.size());