1 #ifndef TEST_COMMON_MACROS_HPP 2 #define TEST_COMMON_MACROS_HPP 3 4 #if defined(XTL_NO_EXCEPTIONS) 5 #define DOCTEST_CONFIG_NO_EXCEPTIONS 6 #endif 7 8 #ifdef __APPLE__ 9 #include <iostream> // https://github.com/onqtam/doctest/issues/126 10 #endif 11 12 #include <string> 13 14 #include "doctest/doctest.h" 15 16 #if defined(XTL_NO_EXCEPTIONS) 17 18 #define XT_EXPECT_THROW(x, y) #warning "XT_EXPECT_THROW IS DISABLED WHEN EXCEPTIONS ARE DISABLED" ; 19 #define XT_ASSERT_THROW(x, y) #warning "XT_ASSERT_THROW IS DISABLED WHEN EXCEPTIONS ARE DISABLED" ; 20 #define XT_EXPECT_ANY_THROW(x) #warning "XT_EXPECT_ANY_THROW IS DISABLED WHEN EXCEPTIONS ARE DISABLED" ; 21 #define XT_ASSERT_ANY_THROW(x) #warning "XT_ASSERT_ANY_THROW IS DISABLED WHEN EXCEPTIONS ARE DISABLED" ; 22 #define XT_EXPECT_NO_THROW(x) x; 23 #define XT_ASSERT_NO_THROW(x) x; 24 25 #else 26 27 #define XT_EXPECT_THROW(x, y) CHECK_THROWS_AS(x, y); 28 #define XT_ASSERT_THROW(x, y) REQUIRE_THROWS_AS(x, y); 29 #define XT_EXPECT_ANY_THROW(x) CHECK_THROWS_AS(x, std::exception); 30 #define XT_ASSERT_ANY_THROW(x) REQUIRE_THROWS_AS(x, std::exception); 31 #define XT_EXPECT_NO_THROW(x) x; 32 #define XT_ASSERT_NO_THROW(x) x; 33 34 #endif 35 36 #define EXPECT_NO_THROW(x) XT_EXPECT_NO_THROW(x) 37 #define EXPECT_THROW(x, y) XT_EXPECT_THROW(x,y) 38 39 #define TEST(A,B) TEST_CASE(#A"."#B ) 40 #define EXPECT_EQ(A,B) CHECK_EQ(A,B) 41 #define EXPECT_NE(A,B) CHECK_NE(A,B) 42 #define EXPECT_LE(A,B) CHECK_LE(A,B) 43 #define EXPECT_GE(A,B) CHECK_GE(A,B) 44 #define EXPECT_LT(A,B) CHECK_LT(A,B) 45 #define EXPECT_GT(A,B) CHECK_GT(A,B) 46 #define EXPECT_TRUE(A) CHECK_EQ(A, true) 47 #define EXPECT_FALSE(A) CHECK_FALSE(A) 48 #define EXPECT_DOUBLE_EQ(x,y) CHECK(x == doctest::Approx(y)); 49 #define EXPECT_APPROX_EQ(x,y) CHECK(x == doctest::Approx(y)); 50 #define EXPECT_STREQ(x,y) EXPECT_EQ(std::string(x),std::string(y)) 51 #define EXPECT_NEAR(x,y,t) CHECK(x == doctest::Approx(y).epsilon(t)) 52 53 54 #define EXPECT_COMPLEX_APPROX_EQ(x,y)\ 55 CHECK((x).real() == doctest::Approx((y).real()));\ 56 CHECK((x).imag() == doctest::Approx((y).imag())) 57 58 #define ASSERT_EQ(A,B) REQUIRE_EQ(A,B) 59 #define ASSERT_NE(A,B) REQUIRE_NE(A,B) 60 #define ASSERT_LE(A,B) REQUIRE_LE(A,B) 61 #define ASSERT_GE(A,B) REQUIRE_GE(A,B) 62 #define ASSERT_LT(A,B) REQUIRE_LT(A,B) 63 #define ASSERT_GT(A,B) REQUIRE_GT(A,B) 64 #define ASSERT_TRUE(A) REQUIRE_EQ(A, true) 65 #define ASSERT_FALSE(A) REQUIRE_FALSE(A) 66 #define ASSERT_DOUBLE_EQ(x,y) REQUIRE(x == doctest::Approx(y)); 67 #define ASSERT_STREQ(x,y) ASSERT_EQ(x,y) 68 #define ASSERT_NEAR(x,y,t) REQUIRE(x == doctest::Approx(y).epsilon(t)) 69 70 #endif