Skip to content

Commit d069c15

Browse files
committed
test-backend-ops: printed failed tests at the end
1 parent 8d88628 commit d069c15

File tree

1 file changed

+41
-12
lines changed

1 file changed

+41
-12
lines changed

tests/test-backend-ops.cpp

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -511,7 +511,7 @@ struct test_result {
511511
};
512512

513513
// Printer classes for different output formats
514-
enum class test_status_t { NOT_SUPPORTED, OK, FAIL };
514+
enum class test_status_t { NOT_SUPPORTED, OK, FAIL, SKIPPED };
515515

516516
struct test_operation_info {
517517
std::string op_name;
@@ -687,6 +687,10 @@ struct printer {
687687
virtual void print_backend_status(const backend_status_info & info) { (void) info; }
688688

689689
virtual void print_overall_summary(const overall_summary_info & info) { (void) info; }
690+
691+
virtual void print_failed_tests(const std::vector<std::string> & failed_tests) {
692+
(void) failed_tests;
693+
}
690694
};
691695

692696
struct console_printer : public printer {
@@ -804,6 +808,17 @@ struct console_printer : public printer {
804808
}
805809
}
806810

811+
void print_failed_tests(const std::vector<std::string> & failed_tests) override {
812+
if (failed_tests.empty()) {
813+
return;
814+
}
815+
816+
printf("\nFailing tests:\n");
817+
for (const auto & test_name : failed_tests) {
818+
printf(" %s\n", test_name.c_str());
819+
}
820+
}
821+
807822
private:
808823
void print_test_console(const test_result & result) {
809824
printf(" %s(%s): ", result.op_name.c_str(), result.op_params.c_str());
@@ -1056,6 +1071,8 @@ struct test_case {
10561071

10571072
std::vector<ggml_tensor *> sentinels;
10581073

1074+
std::string current_op_name;
1075+
10591076
void add_sentinel(ggml_context * ctx) {
10601077
if (mode == MODE_PERF || mode == MODE_GRAD || mode == MODE_SUPPORT) {
10611078
return;
@@ -1127,7 +1144,7 @@ struct test_case {
11271144
}
11281145
}
11291146

1130-
bool eval(ggml_backend_t backend1, ggml_backend_t backend2, const char * op_names_filter, printer * output_printer) {
1147+
test_status_t eval(ggml_backend_t backend1, ggml_backend_t backend2, const char * op_names_filter, printer * output_printer) {
11311148
mode = MODE_TEST;
11321149

11331150
ggml_init_params params = {
@@ -1144,11 +1161,12 @@ struct test_case {
11441161
add_sentinel(ctx);
11451162

11461163
ggml_tensor * out = build_graph(ctx);
1147-
std::string current_op_name = op_desc(out);
1164+
current_op_name = op_desc(out);
1165+
11481166
if (!matches_filter(out, op_names_filter)) {
11491167
//printf(" %s: skipping\n", op_desc(out).c_str());
11501168
ggml_free(ctx);
1151-
return true;
1169+
return test_status_t::SKIPPED;
11521170
}
11531171

11541172
// check if the backends support the ops
@@ -1172,7 +1190,7 @@ struct test_case {
11721190
}
11731191

11741192
ggml_free(ctx);
1175-
return true;
1193+
return test_status_t::NOT_SUPPORTED;
11761194
}
11771195

11781196
// post-graph sentinel
@@ -1184,7 +1202,7 @@ struct test_case {
11841202
if (buf == NULL) {
11851203
printf("failed to allocate tensors [%s] ", ggml_backend_name(backend1));
11861204
ggml_free(ctx);
1187-
return false;
1205+
return test_status_t::FAIL;
11881206
}
11891207

11901208
// build graph
@@ -1289,7 +1307,7 @@ struct test_case {
12891307
output_printer->print_test_result(result);
12901308
}
12911309

1292-
return test_passed;
1310+
return test_passed ? test_status_t::OK : test_status_t::FAIL;
12931311
}
12941312

12951313
bool eval_perf(ggml_backend_t backend, const char * op_names_filter, printer * output_printer) {
@@ -1306,7 +1324,7 @@ struct test_case {
13061324
GGML_ASSERT(ctx);
13071325

13081326
ggml_tensor * out = build_graph(ctx.get());
1309-
std::string current_op_name = op_desc(out);
1327+
current_op_name = op_desc(out);
13101328
if (!matches_filter(out, op_names_filter)) {
13111329
//printf(" %s: skipping\n", op_desc(out).c_str());
13121330
return true;
@@ -1436,7 +1454,8 @@ struct test_case {
14361454
GGML_ASSERT(ctx);
14371455

14381456
ggml_tensor * out = build_graph(ctx.get());
1439-
std::string current_op_name = op_desc(out);
1457+
current_op_name = op_desc(out);
1458+
14401459
if (!matches_filter(out, op_names_filter)) {
14411460
return true;
14421461
}
@@ -7356,16 +7375,26 @@ static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op
73567375
}
73577376

73587377
size_t n_ok = 0;
7378+
size_t tests_run = 0;
7379+
std::vector<std::string> failed_tests;
73597380
for (auto & test : test_cases) {
7360-
if (test->eval(backend, backend_cpu, op_names_filter, output_printer)) {
7381+
test_status_t status = test->eval(backend, backend_cpu, op_names_filter, output_printer);
7382+
if (status == test_status_t::SKIPPED || status == test_status_t::NOT_SUPPORTED) {
7383+
continue;
7384+
}
7385+
tests_run++;
7386+
if (status == test_status_t::OK) {
73617387
n_ok++;
7388+
} else if (status == test_status_t::FAIL) {
7389+
failed_tests.push_back(test->current_op_name + "(" + test->vars() + ")");
73627390
}
73637391
}
7364-
output_printer->print_summary(test_summary_info(n_ok, test_cases.size(), false));
7392+
output_printer->print_summary(test_summary_info(n_ok, tests_run, false));
7393+
output_printer->print_failed_tests(failed_tests);
73657394

73667395
ggml_backend_free(backend_cpu);
73677396

7368-
return n_ok == test_cases.size();
7397+
return n_ok == tests_run;
73697398
}
73707399

73717400
if (mode == MODE_GRAD) {

0 commit comments

Comments
 (0)