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