testing.h (3242B)
1 // Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 #ifndef LIB_JXL_TESTING_H_ 7 #define LIB_JXL_TESTING_H_ 8 9 // GTest specific macros / wrappers. 10 11 #include "gtest/gtest.h" 12 // JPEGXL_ENABLE_BOXES, JPEGXL_ENABLE_TRANSCODE_JPEG 13 #include "lib/jxl/common.h" 14 15 #ifdef JXL_DISABLE_SLOW_TESTS 16 #define JXL_SLOW_TEST(T, C) TEST(T, DISABLED_##C) 17 #else 18 #define JXL_SLOW_TEST(T, C) TEST(T, C) 19 #endif // JXL_DISABLE_SLOW_TESTS 20 21 #if JPEGXL_ENABLE_TRANSCODE_JPEG 22 #define JXL_TRANSCODE_JPEG_TEST(T, C) TEST(T, C) 23 #else 24 #define JXL_TRANSCODE_JPEG_TEST(T, C) TEST(T, DISABLED_##C) 25 #endif // JPEGXL_ENABLE_TRANSCODE_JPEG 26 27 #if JPEGXL_ENABLE_BOXES 28 #define JXL_BOXES_TEST(T, C) TEST(T, C) 29 #define JXL_BOXES_TEST_P(T, C) TEST_P(T, C) 30 #else 31 #define JXL_BOXES_TEST(T, C) TEST(T, DISABLED_##C) 32 #define JXL_BOXES_TEST_P(T, C) TEST_P(T, DISABLED_##C) 33 #endif // JPEGXL_ENABLE_BOXES 34 35 #ifdef THREAD_SANITIZER 36 #define JXL_TSAN_SLOW_TEST(T, C) TEST(T, DISABLED_##C) 37 #else 38 #define JXL_TSAN_SLOW_TEST(T, C) TEST(T, C) 39 #endif // THREAD_SANITIZER 40 41 #if defined(__x86_64__) 42 #define JXL_X86_64_TEST(T, C) TEST(T, C) 43 #define JXL_X86_64_TEST_P(T, C) TEST_P(T, C) 44 #else 45 #define JXL_X86_64_TEST(T, C) TEST(T, DISABLED_##C) 46 #define JXL_X86_64_TEST_P(T, C) TEST_P(T, C) 47 #endif // defined(__x86_64__) 48 49 // googletest before 1.10 didn't define INSTANTIATE_TEST_SUITE_P() but instead 50 // used INSTANTIATE_TEST_CASE_P which is now deprecated. 51 #ifdef INSTANTIATE_TEST_SUITE_P 52 #define JXL_GTEST_INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_SUITE_P 53 #else 54 #define JXL_GTEST_INSTANTIATE_TEST_SUITE_P INSTANTIATE_TEST_CASE_P 55 #endif 56 57 // Ensures that we don't make our test bounds too lax, effectively disabling the 58 // tests. 59 #define EXPECT_SLIGHTLY_BELOW(A, E) \ 60 { \ 61 double _actual = (A); \ 62 double _expected = (E); \ 63 EXPECT_LE(_actual, _expected); \ 64 EXPECT_GE(_actual, 0.75 * _expected); \ 65 } 66 67 #define EXPECT_ARRAY_NEAR(A, E, T) \ 68 { \ 69 const auto _actual = (A); \ 70 const auto _expected = (E); \ 71 const auto _tolerance = (T); \ 72 size_t _n = _expected.size(); \ 73 ASSERT_EQ(_actual.size(), _n); \ 74 for (size_t _i = 0; _i < _n; ++_i) { \ 75 EXPECT_NEAR(_actual[_i], _expected[_i], _tolerance) \ 76 << "@" << _i << ": " << _actual[_i] << " !~= " << _expected[_i]; \ 77 } \ 78 } 79 80 #define JXL_EXPECT_OK(F) \ 81 { \ 82 std::stringstream _; \ 83 EXPECT_TRUE(F) << _.str(); \ 84 } 85 86 #define JXL_TEST_ASSERT_OK(F) \ 87 { \ 88 std::stringstream _; \ 89 ASSERT_TRUE(F) << _.str(); \ 90 } 91 92 #define QUIT(M) FAIL() << M; 93 94 #endif // LIB_JXL_TESTING_H_