Skip to content

Commit cf9c3cb

Browse files
authored
[LAPACK] Allow tests to return Skipped status (#700)
1 parent e4f0b96 commit cf9c3cb

File tree

2 files changed

+56
-41
lines changed

2 files changed

+56
-41
lines changed

tests/unit_tests/lapack/include/lapack_gtest_suite.hpp

Lines changed: 39 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -80,49 +80,55 @@ using ComplexDoublePrecisionUsm = std::complex<double>;
8080
DEFINE_TEST_ACCURACY_USM_COMPLEX(SUITE); \
8181
INSTANTIATE_TEST_CLASS(SUITE, AccuracyUsm)
8282

83-
#define DEFINE_TEST_ACCURACY_USM_REAL(SUITE) \
84-
TEST_P(SUITE##AccuracyUsm, RealSinglePrecision) { \
85-
test_log::padding = "[ ] "; \
86-
EXPECT_TRUE(accuracy_controller.run(::accuracy<RealSinglePrecisionUsm>, *GetParam())); \
87-
} \
88-
TEST_P(SUITE##AccuracyUsm, RealDoublePrecision) { \
89-
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
90-
test_log::padding = "[ ] "; \
91-
EXPECT_TRUE(accuracy_controller.run(::accuracy<RealDoublePrecisionUsm>, *GetParam())); \
83+
#define DEFINE_TEST_ACCURACY_USM_REAL(SUITE) \
84+
TEST_P(SUITE##AccuracyUsm, RealSinglePrecision) { \
85+
test_log::padding = "[ ] "; \
86+
EXPECT_TRUEORSKIP( \
87+
accuracy_controller.run(::accuracy<RealSinglePrecisionUsm>, *GetParam())); \
88+
} \
89+
TEST_P(SUITE##AccuracyUsm, RealDoublePrecision) { \
90+
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
91+
test_log::padding = "[ ] "; \
92+
EXPECT_TRUEORSKIP( \
93+
accuracy_controller.run(::accuracy<RealDoublePrecisionUsm>, *GetParam())); \
9294
}
9395

94-
#define DEFINE_TEST_ACCURACY_USM_COMPLEX(SUITE) \
95-
TEST_P(SUITE##AccuracyUsm, ComplexSinglePrecision) { \
96-
test_log::padding = "[ ] "; \
97-
EXPECT_TRUE(accuracy_controller.run(::accuracy<ComplexSinglePrecisionUsm>, *GetParam())); \
98-
} \
99-
TEST_P(SUITE##AccuracyUsm, ComplexDoublePrecision) { \
100-
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
101-
test_log::padding = "[ ] "; \
102-
EXPECT_TRUE(accuracy_controller.run(::accuracy<ComplexDoublePrecisionUsm>, *GetParam())); \
96+
#define DEFINE_TEST_ACCURACY_USM_COMPLEX(SUITE) \
97+
TEST_P(SUITE##AccuracyUsm, ComplexSinglePrecision) { \
98+
test_log::padding = "[ ] "; \
99+
EXPECT_TRUEORSKIP( \
100+
accuracy_controller.run(::accuracy<ComplexSinglePrecisionUsm>, *GetParam())); \
101+
} \
102+
TEST_P(SUITE##AccuracyUsm, ComplexDoublePrecision) { \
103+
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
104+
test_log::padding = "[ ] "; \
105+
EXPECT_TRUEORSKIP( \
106+
accuracy_controller.run(::accuracy<ComplexDoublePrecisionUsm>, *GetParam())); \
103107
}
104108

105-
#define DEFINE_TEST_ACCURACY_BUFFER_REAL(SUITE) \
106-
TEST_P(SUITE##AccuracyBuffer, RealSinglePrecision) { \
107-
test_log::padding = "[ ] "; \
108-
EXPECT_TRUE(accuracy_controller.run(::accuracy<RealSinglePrecisionBuffer>, *GetParam())); \
109-
} \
110-
TEST_P(SUITE##AccuracyBuffer, RealDoublePrecision) { \
111-
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
112-
test_log::padding = "[ ] "; \
113-
EXPECT_TRUE(accuracy_controller.run(::accuracy<RealDoublePrecisionBuffer>, *GetParam())); \
109+
#define DEFINE_TEST_ACCURACY_BUFFER_REAL(SUITE) \
110+
TEST_P(SUITE##AccuracyBuffer, RealSinglePrecision) { \
111+
test_log::padding = "[ ] "; \
112+
EXPECT_TRUEORSKIP( \
113+
accuracy_controller.run(::accuracy<RealSinglePrecisionBuffer>, *GetParam())); \
114+
} \
115+
TEST_P(SUITE##AccuracyBuffer, RealDoublePrecision) { \
116+
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
117+
test_log::padding = "[ ] "; \
118+
EXPECT_TRUEORSKIP( \
119+
accuracy_controller.run(::accuracy<RealDoublePrecisionBuffer>, *GetParam())); \
114120
}
115121

116122
#define DEFINE_TEST_ACCURACY_BUFFER_COMPLEX(SUITE) \
117123
TEST_P(SUITE##AccuracyBuffer, ComplexSinglePrecision) { \
118124
test_log::padding = "[ ] "; \
119-
EXPECT_TRUE( \
125+
EXPECT_TRUEORSKIP( \
120126
accuracy_controller.run(::accuracy<ComplexSinglePrecisionBuffer>, *GetParam())); \
121127
} \
122128
TEST_P(SUITE##AccuracyBuffer, ComplexDoublePrecision) { \
123129
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
124130
test_log::padding = "[ ] "; \
125-
EXPECT_TRUE( \
131+
EXPECT_TRUEORSKIP( \
126132
accuracy_controller.run(::accuracy<ComplexDoublePrecisionBuffer>, *GetParam())); \
127133
}
128134

@@ -145,25 +151,25 @@ using ComplexDoublePrecisionUsm = std::complex<double>;
145151
#define DEFINE_TEST_DEPENDENCY_REAL(SUITE) \
146152
TEST_P(SUITE##DependencyUsm, RealSinglePrecision) { \
147153
test_log::padding = "[ ] "; \
148-
EXPECT_TRUE( \
154+
EXPECT_TRUEORSKIP( \
149155
dependency_controller.run(::usm_dependency<RealSinglePrecisionUsm>, *GetParam())); \
150156
} \
151157
TEST_P(SUITE##DependencyUsm, RealDoublePrecision) { \
152158
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
153159
test_log::padding = "[ ] "; \
154-
EXPECT_TRUE( \
160+
EXPECT_TRUEORSKIP( \
155161
dependency_controller.run(::usm_dependency<RealDoublePrecisionUsm>, *GetParam())); \
156162
}
157163

158164
#define DEFINE_TEST_DEPENDENCY_COMPLEX(SUITE) \
159165
TEST_P(SUITE##DependencyUsm, ComplexSinglePrecision) { \
160166
test_log::padding = "[ ] "; \
161-
EXPECT_TRUE( \
167+
EXPECT_TRUEORSKIP( \
162168
dependency_controller.run(::usm_dependency<ComplexSinglePrecisionUsm>, *GetParam())); \
163169
} \
164170
TEST_P(SUITE##DependencyUsm, ComplexDoublePrecision) { \
165171
CHECK_DOUBLE_ON_DEVICE(GetParam()); \
166172
test_log::padding = "[ ] "; \
167-
EXPECT_TRUE( \
173+
EXPECT_TRUEORSKIP( \
168174
dependency_controller.run(::usm_dependency<ComplexDoublePrecisionUsm>, *GetParam())); \
169175
}\

tests/unit_tests/lapack/include/lapack_test_controller.hpp

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
#include "lapack_common.hpp"
3434
#include "oneapi/math/exceptions.hpp"
3535

36+
#include "test_helper.hpp"
37+
3638
template <class T>
3739
std::istream& operator>>(std::istream& is, T& t) {
3840
int64_t i;
@@ -71,19 +73,23 @@ inline std::ostream& operator<<(std::ostream& os, const oneapi::math::generate&
7173

7274
class result_T {
7375
public:
74-
enum class result { fail, pass, exception };
76+
enum result { fail, pass, skipped, exception };
7577

7678
result_T() : result_{ result::pass } {}
7779
result_T(bool b) : result_{ b ? result::pass : result::fail } {}
7880
result_T(const std::exception& e, result t = result::exception)
7981
: result_{ t },
8082
what_{ e.what() } {}
8183

82-
operator bool() const& {
83-
return result_ == result::pass;
84+
inline operator int() {
85+
std::cout << result_ << std::endl;
86+
if (result_ == result::skipped)
87+
return test_skipped;
88+
else
89+
return result_ == result::pass;
8490
}
85-
8691
friend bool operator==(const result_T& lhs, const result_T& rhs);
92+
friend bool operator!=(const result_T& lhs, const int& rhs);
8793
friend std::ostream& operator<<(std::ostream& os, result_T result);
8894

8995
private:
@@ -97,10 +103,13 @@ inline bool operator==(const result_T& lhs, const result_T& rhs) {
97103
inline bool operator!=(const result_T& lhs, const result_T& rhs) {
98104
return !(lhs == rhs);
99105
}
100-
106+
inline bool operator!=(const result_T& lhs, const int& rhs) {
107+
return !(lhs.result_ == rhs);
108+
}
101109
inline std::ostream& operator<<(std::ostream& os, result_T result) {
102110
switch (result.result_) {
103111
case result_T::result::pass: os << "PASS"; break;
112+
case result_T::result::skipped: os << "SKIPPED"; break;
104113
case result_T::result::fail: os << "FAIL"; break;
105114
case result_T::result::exception: os << "EXCEPTION " << result.what_; break;
106115
}
@@ -174,10 +183,10 @@ struct InputTestController {
174183
result = std::apply(tp, tp_args);
175184
}
176185
catch (const oneapi::math::unsupported_device& e) {
177-
result = result_T{ e, result_T::result::pass };
186+
result = result_T{ e, result_T::result::skipped };
178187
}
179188
catch (const oneapi::math::unimplemented& e) {
180-
result = result_T{ e, result_T::result::pass };
189+
result = result_T{ e, result_T::result::skipped };
181190
}
182191
catch (const std::exception& e) {
183192
result = result_T{ e };
@@ -201,7 +210,7 @@ struct InputTestController {
201210
size_t input_file_line = 1;
202211
for (auto& args : vargs) {
203212
result_T result = call_test(tp, dev, args);
204-
if (!result) {
213+
if (result != result_T::result::pass) {
205214
aggregate_result = result;
206215
}
207216
print_result(input_file_line++, result, args,

0 commit comments

Comments
 (0)