Skip to content

Commit 3030c94

Browse files
committed
Add death test matchers to verify assertion messages
Added message matchers to 55 death tests across 3 test files to verify tests fail with the expected error messages, not just that they fail.
1 parent 6d25df6 commit 3030c94

File tree

3 files changed

+81
-52
lines changed

3 files changed

+81
-52
lines changed

runtime/core/exec_aten/util/test/tensor_util_test.cpp

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,15 @@ TEST_F(TensorUtilTest, SameShapesDifferentDtypes) {
6565
ET_CHECK_SAME_SHAPE3(a, b, c);
6666

6767
// Not the same dtypes. Check both positions.
68-
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE2(a, b), "");
69-
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE2(b, a), "");
70-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(a, b), "");
71-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(b, a), "");
68+
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE2(a, b), "Tensors do not match");
69+
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE2(b, a), "Tensors do not match");
70+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(a, b), "Tensors do not match");
71+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(b, a), "Tensors do not match");
7272

7373
// Test with a mismatching tensor in all positions, where the other two agree.
74-
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(a, b, b), "");
75-
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(b, a, b), "");
76-
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(b, b, a), "");
74+
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(a, b, b), "Tensors do not match");
75+
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(b, a, b), "Tensors do not match");
76+
ET_EXPECT_DEATH(ET_CHECK_SAME_DTYPE3(b, b, a), "Tensors do not match");
7777
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(a, b, b), "");
7878
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, a, b), "");
7979
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, b, a), "");
@@ -88,13 +88,13 @@ TEST_F(TensorUtilTest, DifferentShapesSameDtypes) {
8888
Tensor b2 = tf_int_.ones({2, 2});
8989

9090
// The different tensors are not the same shape. Check both positions.
91-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE2(a, b), "");
92-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE2(b, a), "");
91+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE2(a, b), "Tensors do not match");
92+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE2(b, a), "Tensors do not match");
9393

9494
// Test with the different tensor in all positions.
95-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(a, b, b2), "");
96-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(b, a, b2), "");
97-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(b, b2, a), "");
95+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(a, b, b2), "Tensors do not match");
96+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(b, a, b2), "Tensors do not match");
97+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE3(b, b2, a), "Tensors do not match");
9898

9999
// They are the same dtypes.
100100
ET_CHECK_SAME_DTYPE2(a, b);
@@ -104,11 +104,14 @@ TEST_F(TensorUtilTest, DifferentShapesSameDtypes) {
104104
ET_CHECK_SAME_DTYPE3(b, b2, a);
105105

106106
// But not the same shape-and-dtype.
107-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(a, b), "");
108-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(b, a), "");
109-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(a, b, b2), "");
110-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, a, b2), "");
111-
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, b2, a), "");
107+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(a, b), "Tensors do not match");
108+
ET_EXPECT_DEATH(ET_CHECK_SAME_SHAPE_AND_DTYPE2(b, a), "Tensors do not match");
109+
ET_EXPECT_DEATH(
110+
ET_CHECK_SAME_SHAPE_AND_DTYPE3(a, b, b2), "Tensors do not match");
111+
ET_EXPECT_DEATH(
112+
ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, a, b2), "Tensors do not match");
113+
ET_EXPECT_DEATH(
114+
ET_CHECK_SAME_SHAPE_AND_DTYPE3(b, b2, a), "Tensors do not match");
112115
}
113116

114117
TEST_F(TensorUtilTest, ZeroDimensionalTensor) {
@@ -163,9 +166,15 @@ TEST_F(TensorUtilTest, GetLeadingDimsInputOutOfBoundDies) {
163166
Tensor t = tf_int_.ones({2, 3, 4});
164167

165168
// dim needs to be in the range [0, t.dim()]
166-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, -2), "");
167-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, -1), "");
168-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, 4), "");
169+
ET_EXPECT_DEATH(
170+
executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, -2),
171+
"Ending dimension.*should be in the range");
172+
ET_EXPECT_DEATH(
173+
executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, -1),
174+
"Ending dimension.*should be in the range");
175+
ET_EXPECT_DEATH(
176+
executorch::ET_RUNTIME_NAMESPACE::getLeadingDims(t, 4),
177+
"Ending dimension.*should be in the range");
169178
}
170179

171180
TEST_F(TensorUtilTest, GetTrailingDimsSmokeTest) {
@@ -187,9 +196,15 @@ TEST_F(TensorUtilTest, GetTrailingDimsInputOutOfBoundDies) {
187196
Tensor t = tf_int_.ones({2, 3, 4});
188197

189198
// dim needs to be in the range [-1, t.dim() - 1)
190-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, -2), "");
191-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, 3), "");
192-
ET_EXPECT_DEATH(executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, 4), "");
199+
ET_EXPECT_DEATH(
200+
executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, -2),
201+
"Starting dimension.*should be in the range");
202+
ET_EXPECT_DEATH(
203+
executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, 3),
204+
"Starting dimension.*should be in the range");
205+
ET_EXPECT_DEATH(
206+
executorch::ET_RUNTIME_NAMESPACE::getTrailingDims(t, 4),
207+
"Starting dimension.*should be in the range");
193208
}
194209

195210
TEST_F(TensorUtilTest, ContiguousCheckSupported) {
@@ -208,7 +223,8 @@ TEST_F(TensorUtilTest, ContiguousCheckSupported) {
208223
ET_CHECK_CONTIGUOUS(t_contiguous);
209224

210225
// Assert t_incontiguous is incontiguous.
211-
ET_EXPECT_DEATH(ET_CHECK_CONTIGUOUS(t_incontiguous), "");
226+
ET_EXPECT_DEATH(
227+
ET_CHECK_CONTIGUOUS(t_incontiguous), "stride.*(shall be 1|shall equal)");
212228
}
213229

214230
TEST_F(TensorUtilTest, CheckSameContiguousStrideSupported) {
@@ -241,7 +257,9 @@ TEST_F(TensorUtilTest, CheckSameContiguousStrideSupported) {
241257
// `different_stride`.
242258
for (const auto i : c10::irange(same_stride_tensor_list.size())) {
243259
auto ti = same_stride_tensor_list[i];
244-
ET_EXPECT_DEATH(ET_CHECK_SAME_STRIDES2(ti, different_stride), "");
260+
ET_EXPECT_DEATH(
261+
ET_CHECK_SAME_STRIDES2(ti, different_stride),
262+
"strides.*shall (equal|have same)");
245263
}
246264

247265
// Any three tensors in same_stride_tensor_list have same strides. The three
@@ -263,7 +281,9 @@ TEST_F(TensorUtilTest, CheckSameContiguousStrideSupported) {
263281
for (const auto j : c10::irange(i, same_stride_tensor_list.size())) {
264282
auto ti = same_stride_tensor_list[i];
265283
auto tj = same_stride_tensor_list[j];
266-
ET_EXPECT_DEATH(ET_CHECK_SAME_STRIDES3(ti, tj, different_stride), "");
284+
ET_EXPECT_DEATH(
285+
ET_CHECK_SAME_STRIDES3(ti, tj, different_stride),
286+
"strides.*shall (share same|have same)");
267287
}
268288
}
269289
}

runtime/core/test/evalue_test.cpp

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ TEST_F(EValueTest, TypeMismatchFatals) {
8989
auto e = EValue(true);
9090
e.toInt();
9191
},
92-
"");
92+
"EValue is not an int");
9393
}
9494

9595
TEST_F(EValueTest, NoneByDefault) {
@@ -279,38 +279,45 @@ TEST_F(EValueTest, ConstructFromTensorWrapper) {
279279
TEST_F(EValueTest, ConstructFromNullPtrAborts) {
280280
std::unique_ptr<executorch::aten::Tensor> null_ptr;
281281

282-
ET_EXPECT_DEATH({ EValue evalue(null_ptr); }, "");
282+
ET_EXPECT_DEATH({ EValue evalue(null_ptr); }, "Pointer is null");
283283
}
284284

285285
TEST_F(EValueTest, StringConstructorNullCheck) {
286286
executorch::aten::ArrayRef<char>* null_string_ptr = nullptr;
287-
ET_EXPECT_DEATH({ EValue evalue(null_string_ptr); }, "");
287+
ET_EXPECT_DEATH(
288+
{ EValue evalue(null_string_ptr); }, "pointer cannot be null");
288289
}
289290

290291
TEST_F(EValueTest, BoolListConstructorNullCheck) {
291292
executorch::aten::ArrayRef<bool>* null_bool_list_ptr = nullptr;
292-
ET_EXPECT_DEATH({ EValue evalue(null_bool_list_ptr); }, "");
293+
ET_EXPECT_DEATH(
294+
{ EValue evalue(null_bool_list_ptr); }, "pointer cannot be null");
293295
}
294296

295297
TEST_F(EValueTest, DoubleListConstructorNullCheck) {
296298
executorch::aten::ArrayRef<double>* null_double_list_ptr = nullptr;
297-
ET_EXPECT_DEATH({ EValue evalue(null_double_list_ptr); }, "");
299+
ET_EXPECT_DEATH(
300+
{ EValue evalue(null_double_list_ptr); }, "pointer cannot be null");
298301
}
299302

300303
TEST_F(EValueTest, IntListConstructorNullCheck) {
301304
BoxedEvalueList<int64_t>* null_int_list_ptr = nullptr;
302-
ET_EXPECT_DEATH({ EValue evalue(null_int_list_ptr); }, "");
305+
ET_EXPECT_DEATH(
306+
{ EValue evalue(null_int_list_ptr); }, "pointer cannot be null");
303307
}
304308

305309
TEST_F(EValueTest, TensorListConstructorNullCheck) {
306310
BoxedEvalueList<executorch::aten::Tensor>* null_tensor_list_ptr = nullptr;
307-
ET_EXPECT_DEATH({ EValue evalue(null_tensor_list_ptr); }, "");
311+
ET_EXPECT_DEATH(
312+
{ EValue evalue(null_tensor_list_ptr); }, "pointer cannot be null");
308313
}
309314

310315
TEST_F(EValueTest, OptionalTensorListConstructorNullCheck) {
311316
BoxedEvalueList<std::optional<executorch::aten::Tensor>>*
312317
null_optional_tensor_list_ptr = nullptr;
313-
ET_EXPECT_DEATH({ EValue evalue(null_optional_tensor_list_ptr); }, "");
318+
ET_EXPECT_DEATH(
319+
{ EValue evalue(null_optional_tensor_list_ptr); },
320+
"pointer cannot be null");
314321
}
315322

316323
TEST_F(EValueTest, BoxedEvalueListConstructorNullChecks) {
@@ -321,16 +328,18 @@ TEST_F(EValueTest, BoxedEvalueListConstructorNullChecks) {
321328

322329
// Test null wrapped_vals
323330
ET_EXPECT_DEATH(
324-
{ BoxedEvalueList<int64_t> list(nullptr, storage.data(), 3); }, "");
331+
{ BoxedEvalueList<int64_t> list(nullptr, storage.data(), 3); },
332+
"wrapped_vals cannot be null");
325333

326334
// Test null unwrapped_vals
327335
ET_EXPECT_DEATH(
328-
{ BoxedEvalueList<int64_t> list(values_p.data(), nullptr, 3); }, "");
336+
{ BoxedEvalueList<int64_t> list(values_p.data(), nullptr, 3); },
337+
"unwrapped_vals cannot be null");
329338

330339
// Test negative size
331340
ET_EXPECT_DEATH(
332341
{ BoxedEvalueList<int64_t> list(values_p.data(), storage.data(), -1); },
333-
"");
342+
"size cannot be negative");
334343
}
335344

336345
TEST_F(EValueTest, toListOptionalTensorTypeCheck) {
@@ -340,7 +349,7 @@ TEST_F(EValueTest, toListOptionalTensorTypeCheck) {
340349
EXPECT_FALSE(e.isListOptionalTensor());
341350

342351
// Should fail type check
343-
ET_EXPECT_DEATH({ e.toListOptionalTensor(); }, "");
352+
ET_EXPECT_DEATH({ e.toListOptionalTensor(); }, "EValue is not a");
344353
}
345354

346355
TEST_F(EValueTest, toStringNullPointerCheck) {
@@ -351,7 +360,7 @@ TEST_F(EValueTest, toStringNullPointerCheck) {
351360

352361
// Should pass isString() check but fail null pointer check
353362
EXPECT_TRUE(e.isString());
354-
ET_EXPECT_DEATH({ e.toString(); }, "");
363+
ET_EXPECT_DEATH({ e.toString(); }, "string pointer is null");
355364
}
356365

357366
TEST_F(EValueTest, toIntListNullPointerCheck) {
@@ -362,7 +371,7 @@ TEST_F(EValueTest, toIntListNullPointerCheck) {
362371

363372
// Should pass isIntList() check but fail null pointer check
364373
EXPECT_TRUE(e.isIntList());
365-
ET_EXPECT_DEATH({ e.toIntList(); }, "");
374+
ET_EXPECT_DEATH({ e.toIntList(); }, "int list pointer is null");
366375
}
367376

368377
TEST_F(EValueTest, toBoolListNullPointerCheck) {
@@ -373,7 +382,7 @@ TEST_F(EValueTest, toBoolListNullPointerCheck) {
373382

374383
// Should pass isBoolList() check but fail null pointer check
375384
EXPECT_TRUE(e.isBoolList());
376-
ET_EXPECT_DEATH({ e.toBoolList(); }, "");
385+
ET_EXPECT_DEATH({ e.toBoolList(); }, "bool list pointer is null");
377386
}
378387

379388
TEST_F(EValueTest, toDoubleListNullPointerCheck) {
@@ -384,7 +393,7 @@ TEST_F(EValueTest, toDoubleListNullPointerCheck) {
384393

385394
// Should pass isDoubleList() check but fail null pointer check
386395
EXPECT_TRUE(e.isDoubleList());
387-
ET_EXPECT_DEATH({ e.toDoubleList(); }, "");
396+
ET_EXPECT_DEATH({ e.toDoubleList(); }, "double list pointer is null");
388397
}
389398

390399
TEST_F(EValueTest, toTensorListNullPointerCheck) {
@@ -395,7 +404,7 @@ TEST_F(EValueTest, toTensorListNullPointerCheck) {
395404

396405
// Should pass isTensorList() check but fail null pointer check
397406
EXPECT_TRUE(e.isTensorList());
398-
ET_EXPECT_DEATH({ e.toTensorList(); }, "");
407+
ET_EXPECT_DEATH({ e.toTensorList(); }, "tensor list pointer is null");
399408
}
400409

401410
TEST_F(EValueTest, toListOptionalTensorNullPointerCheck) {
@@ -406,5 +415,5 @@ TEST_F(EValueTest, toListOptionalTensorNullPointerCheck) {
406415

407416
// Should pass isListOptionalTensor() check but fail null pointer check
408417
EXPECT_TRUE(e.isListOptionalTensor());
409-
ET_EXPECT_DEATH({ e.toListOptionalTensor(); }, "");
418+
ET_EXPECT_DEATH({ e.toListOptionalTensor(); }, "pointer is null");
410419
}

runtime/executor/test/method_test.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ TEST_F(MethodTest, GetInputTests) {
140140
method->get_input(num_inputs - 1);
141141

142142
// Out-of-range inputs should abort.
143-
ET_EXPECT_DEATH(method->get_input(num_inputs), "");
144-
ET_EXPECT_DEATH(method->get_input(num_inputs + 1), "");
143+
ET_EXPECT_DEATH(method->get_input(num_inputs), "[0-9]+ >= [0-9]+");
144+
ET_EXPECT_DEATH(method->get_input(num_inputs + 1), "[0-9]+ >= [0-9]+");
145145
}
146146

147147
TEST_F(MethodTest, MutableInputTests) {
@@ -157,8 +157,8 @@ TEST_F(MethodTest, MutableInputTests) {
157157
method->mutable_input(num_inputs - 1);
158158

159159
// Out-of-range inputs should abort.
160-
ET_EXPECT_DEATH(method->mutable_input(num_inputs), "");
161-
ET_EXPECT_DEATH(method->mutable_input(num_inputs + 1), "");
160+
ET_EXPECT_DEATH(method->mutable_input(num_inputs), "[0-9]+ >= [0-9]+");
161+
ET_EXPECT_DEATH(method->mutable_input(num_inputs + 1), "[0-9]+ >= [0-9]+");
162162
}
163163

164164
TEST_F(MethodTest, GetOutputTests) {
@@ -174,8 +174,8 @@ TEST_F(MethodTest, GetOutputTests) {
174174
method->get_output(num_outputs - 1);
175175

176176
// Out-of-range outputs should abort.
177-
ET_EXPECT_DEATH(method->get_output(num_outputs), "");
178-
ET_EXPECT_DEATH(method->get_output(num_outputs + 1), "");
177+
ET_EXPECT_DEATH(method->get_output(num_outputs), "[0-9]+ >= [0-9]+");
178+
ET_EXPECT_DEATH(method->get_output(num_outputs + 1), "[0-9]+ >= [0-9]+");
179179
}
180180

181181
TEST_F(MethodTest, MutableOutputTests) {
@@ -191,8 +191,8 @@ TEST_F(MethodTest, MutableOutputTests) {
191191
method->mutable_output(num_outputs - 1);
192192

193193
// Out-of-range outputs should abort.
194-
ET_EXPECT_DEATH(method->mutable_output(num_outputs), "");
195-
ET_EXPECT_DEATH(method->mutable_output(num_outputs + 1), "");
194+
ET_EXPECT_DEATH(method->mutable_output(num_outputs), "[0-9]+ >= [0-9]+");
195+
ET_EXPECT_DEATH(method->mutable_output(num_outputs + 1), "[0-9]+ >= [0-9]+");
196196
}
197197

198198
TEST_F(MethodTest, SetPrimInputTest) {

0 commit comments

Comments
 (0)