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