1 // Copyright (c) 2014-2020 Dr. Colin Hirsch and Daniel Frey
2 // Please see LICENSE for license or visit https://github.com/taocpp/PEGTL/
3 
4 #ifndef TAO_PEGTL_SRC_TEST_PEGTL_TEST_HPP
5 #define TAO_PEGTL_SRC_TEST_PEGTL_TEST_HPP
6 
7 #include <cstddef>
8 #include <iostream>
9 
10 #include <tao/pegtl.hpp>
11 
12 namespace TAO_PEGTL_NAMESPACE
13 {
14    std::size_t failed = 0;
15 
16 }  // namespace TAO_PEGTL_NAMESPACE
17 
18 #define TAO_TEST_STRINGIZE_INTERNAL( ... ) #__VA_ARGS__
19 #define TAO_TEST_STRINGIZE( ... ) TAO_TEST_STRINGIZE_INTERNAL( __VA_ARGS__ )
20 
21 #define TAO_TEST_LINE TAO_TEST_STRINGIZE( __LINE__ )
22 
23 #define TAO_PEGTL_TEST_UNWRAP( ... ) __VA_ARGS__
24 
25 #define TAO_PEGTL_TEST_FAILED( MeSSaGe )            \
26    do {                                             \
27       std::cerr << "pegtl: unit test failed for [ " \
28                 << tao::demangle< Rule >()          \
29                 << " ] "                            \
30                 << TAO_PEGTL_TEST_UNWRAP( MeSSaGe ) \
31                 << " in line [ "                    \
32                 << line                             \
33                 << " ] file [ "                     \
34                 << file << " ]"                     \
35                 << std::endl;                       \
36       ++failed;                                     \
37    } while( false )
38 
39 #define TAO_PEGTL_TEST_ASSERT( ... )               \
40    do {                                            \
41       if( !( __VA_ARGS__ ) ) {                     \
42          std::cerr << "pegtl: unit test assert [ " \
43                    << ( #__VA_ARGS__ )             \
44                    << " ] failed in line [ "       \
45                    << __LINE__                     \
46                    << " ] file [ "                 \
47                    << __FILE__ << " ]"             \
48                    << std::endl;                   \
49          ++failed;                                 \
50       }                                            \
51    } while( false )
52 
53 #define TAO_PEGTL_TEST_THROWS( ... )                \
54    do {                                             \
55       try {                                         \
56          __VA_ARGS__;                               \
57          std::cerr << "pegtl: unit test [ "         \
58                    << ( #__VA_ARGS__ )              \
59                    << " ] did not throw in line [ " \
60                    << __LINE__                      \
61                    << " ] file [ "                  \
62                    << __FILE__ << " ]"              \
63                    << std::endl;                    \
64          ++failed;                                  \
65       }                                             \
66       catch( ... ) {                                \
67       }                                             \
68    } while( false )
69 
70 #define TAO_PEGTL_TEST_UNREACHABLE                                                                                              \
71    do {                                                                                                                         \
72       std::cerr << "Code should be unreachable in " << __FUNCTION__ << " (" << __FILE__ << ':' << __LINE__ << ')' << std::endl; \
73       std::abort();                                                                                                             \
74    } while( false )
75 
76 #endif
77