| 4610 | } |
| 4611 | |
| 4612 | static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op_name, const char * params_filter) { |
| 4613 | auto filter_test_cases = [](std::vector<std::unique_ptr<test_case>> & test_cases, const char * params_filter) { |
| 4614 | if (params_filter == nullptr) { |
| 4615 | return; |
| 4616 | } |
| 4617 | |
| 4618 | std::regex params_filter_regex(params_filter); |
| 4619 | |
| 4620 | for (auto it = test_cases.begin(); it != test_cases.end();) { |
| 4621 | if (!std::regex_search((*it)->vars(), params_filter_regex)) { |
| 4622 | it = test_cases.erase(it); |
| 4623 | continue; |
| 4624 | } |
| 4625 | |
| 4626 | it++; |
| 4627 | } |
| 4628 | }; |
| 4629 | |
| 4630 | if (mode == MODE_TEST) { |
| 4631 | auto test_cases = make_test_cases_eval(); |
| 4632 | filter_test_cases(test_cases, params_filter); |
| 4633 | ggml_backend_t backend_cpu = ggml_backend_init_by_type(GGML_BACKEND_DEVICE_TYPE_CPU, NULL); |
| 4634 | if (backend_cpu == NULL) { |
| 4635 | printf(" Failed to initialize CPU backend\n"); |
| 4636 | return false; |
| 4637 | } |
| 4638 | |
| 4639 | size_t n_ok = 0; |
| 4640 | for (auto & test : test_cases) { |
| 4641 | if (test->eval(backend, backend_cpu, op_name)) { |
| 4642 | n_ok++; |
| 4643 | } |
| 4644 | } |
| 4645 | printf(" %zu/%zu tests passed\n", n_ok, test_cases.size()); |
| 4646 | |
| 4647 | ggml_backend_free(backend_cpu); |
| 4648 | |
| 4649 | return n_ok == test_cases.size(); |
| 4650 | } |
| 4651 | |
| 4652 | if (mode == MODE_GRAD) { |
| 4653 | auto test_cases = make_test_cases_eval(); |
| 4654 | filter_test_cases(test_cases, params_filter); |
| 4655 | size_t n_ok = 0; |
| 4656 | for (auto & test : test_cases) { |
| 4657 | if (test->eval_grad(backend, op_name)) { |
| 4658 | n_ok++; |
| 4659 | } |
| 4660 | } |
| 4661 | printf(" %zu/%zu tests passed\n", n_ok, test_cases.size()); |
| 4662 | |
| 4663 | return n_ok == test_cases.size(); |
| 4664 | } |
| 4665 | |
| 4666 | if (mode == MODE_PERF) { |
| 4667 | auto test_cases = make_test_cases_perf(); |
| 4668 | filter_test_cases(test_cases, params_filter); |
| 4669 | for (auto & test : test_cases) { |
no test coverage detected