mirror of
https://github.com/catchorg/Catch2.git
synced 2024-11-22 21:36:11 +01:00
More macros are now variadic
Also added tests for them
This commit is contained in:
parent
c5c3d368a2
commit
a9128d0fac
@ -81,21 +81,21 @@
|
|||||||
// The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&.
|
// The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&.
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CATCH_IF( macroName, resultDisposition, expr ) \
|
#define INTERNAL_CATCH_IF( macroName, resultDisposition, ... ) \
|
||||||
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
|
INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
|
||||||
if( Catch::getResultCapture().getLastResult()->succeeded() )
|
if( Catch::getResultCapture().getLastResult()->succeeded() )
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, expr ) \
|
#define INTERNAL_CATCH_ELSE( macroName, resultDisposition, ... ) \
|
||||||
INTERNAL_CATCH_TEST( macroName, resultDisposition, expr ); \
|
INTERNAL_CATCH_TEST( macroName, resultDisposition, __VA_ARGS__ ); \
|
||||||
if( !Catch::getResultCapture().getLastResult()->succeeded() )
|
if( !Catch::getResultCapture().getLastResult()->succeeded() )
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, expr ) \
|
#define INTERNAL_CATCH_NO_THROW( macroName, resultDisposition, ... ) \
|
||||||
do { \
|
do { \
|
||||||
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \
|
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__, resultDisposition ); \
|
||||||
try { \
|
try { \
|
||||||
static_cast<void>(expr); \
|
static_cast<void>(__VA_ARGS__); \
|
||||||
__catchResult.captureResult( Catch::ResultWas::Ok ); \
|
__catchResult.captureResult( Catch::ResultWas::Ok ); \
|
||||||
} \
|
} \
|
||||||
catch( ... ) { \
|
catch( ... ) { \
|
||||||
@ -105,12 +105,12 @@
|
|||||||
} while( Catch::alwaysFalse() )
|
} while( Catch::alwaysFalse() )
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, matcher, expr ) \
|
#define INTERNAL_CATCH_THROWS( macroName, resultDisposition, matcher, ... ) \
|
||||||
do { \
|
do { \
|
||||||
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \
|
Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #__VA_ARGS__, resultDisposition, #matcher ); \
|
||||||
if( __catchResult.allowThrows() ) \
|
if( __catchResult.allowThrows() ) \
|
||||||
try { \
|
try { \
|
||||||
static_cast<void>(expr); \
|
static_cast<void>(__VA_ARGS__); \
|
||||||
__catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \
|
__catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \
|
||||||
} \
|
} \
|
||||||
catch( ... ) { \
|
catch( ... ) { \
|
||||||
|
@ -940,6 +940,6 @@ with expansion:
|
|||||||
"first" == "second"
|
"first" == "second"
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 169 | 121 passed | 44 failed | 4 failed as expected
|
test cases: 170 | 122 passed | 44 failed | 4 failed as expected
|
||||||
assertions: 969 | 861 passed | 87 failed | 21 failed as expected
|
assertions: 980 | 872 passed | 87 failed | 21 failed as expected
|
||||||
|
|
||||||
|
@ -823,6 +823,74 @@ PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
5 == 5
|
5 == 5
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
Commas in various macros are allowed
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
TrickyTests.cpp:<line number>
|
||||||
|
...............................................................................
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
REQUIRE_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} )
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECK_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} )
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
REQUIRE_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} )
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECK_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} )
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
REQUIRE( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
||||||
|
with expansion:
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECK( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
||||||
|
with expansion:
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
REQUIRE_FALSE( std::vector<int>{1, 2} == std::vector<int>{1, 2, 3} )
|
||||||
|
with expansion:
|
||||||
|
!({ 1, 2 } == { 1, 2, 3 })
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECK_FALSE( std::vector<int>{1, 2} == std::vector<int>{1, 2, 3} )
|
||||||
|
with expansion:
|
||||||
|
!({ 1, 2 } == { 1, 2, 3 })
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECK_NOFAIL( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
||||||
|
with expansion:
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECKED_IF( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
||||||
|
with expansion:
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
REQUIRE( true )
|
||||||
|
|
||||||
|
TrickyTests.cpp:<line number>:
|
||||||
|
PASSED:
|
||||||
|
CHECKED_ELSE( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
||||||
|
with expansion:
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
Comparing function pointers
|
Comparing function pointers
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -8461,18 +8529,6 @@ PASSED:
|
|||||||
with expansion:
|
with expansion:
|
||||||
"[\x7F]" == "[\x7F]"
|
"[\x7F]" == "[\x7F]"
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
assertions with commas are allowed
|
|
||||||
-------------------------------------------------------------------------------
|
|
||||||
TrickyTests.cpp:<line number>
|
|
||||||
...............................................................................
|
|
||||||
|
|
||||||
TrickyTests.cpp:<line number>:
|
|
||||||
PASSED:
|
|
||||||
REQUIRE( std::vector<int>{1, 2} == std::vector<int>{1, 2} )
|
|
||||||
with expansion:
|
|
||||||
{ 1, 2 } == { 1, 2 }
|
|
||||||
|
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
atomic if
|
atomic if
|
||||||
-------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------
|
||||||
@ -9492,6 +9548,6 @@ MiscTests.cpp:<line number>:
|
|||||||
PASSED:
|
PASSED:
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
test cases: 169 | 120 passed | 45 failed | 4 failed as expected
|
test cases: 170 | 121 passed | 45 failed | 4 failed as expected
|
||||||
assertions: 971 | 861 passed | 89 failed | 21 failed as expected
|
assertions: 982 | 872 passed | 89 failed | 21 failed as expected
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<testsuitesspanner>
|
<testsuitesspanner>
|
||||||
<testsuite name="<exe-name>" errors="13" failures="77" tests="972" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
<testsuite name="<exe-name>" errors="13" failures="77" tests="983" hostname="tbd" time="{duration}" timestamp="{iso8601-timestamp}">
|
||||||
<testcase classname="global" name="# A test name that starts with a #" time="{duration}"/>
|
<testcase classname="global" name="# A test name that starts with a #" time="{duration}"/>
|
||||||
<testcase classname="#748 - captures with unexpected exceptions" name="outside assertions" time="{duration}">
|
<testcase classname="#748 - captures with unexpected exceptions" name="outside assertions" time="{duration}">
|
||||||
<error type="TEST_CASE">
|
<error type="TEST_CASE">
|
||||||
@ -109,6 +109,7 @@ ExceptionTests.cpp:<line number>
|
|||||||
<testcase classname="Character pretty printing" name="Specifically escaped" time="{duration}"/>
|
<testcase classname="Character pretty printing" name="Specifically escaped" time="{duration}"/>
|
||||||
<testcase classname="Character pretty printing" name="General chars" time="{duration}"/>
|
<testcase classname="Character pretty printing" name="General chars" time="{duration}"/>
|
||||||
<testcase classname="Character pretty printing" name="Low ASCII" time="{duration}"/>
|
<testcase classname="Character pretty printing" name="Low ASCII" time="{duration}"/>
|
||||||
|
<testcase classname="global" name="Commas in various macros are allowed" time="{duration}"/>
|
||||||
<testcase classname="global" name="Comparing function pointers" time="{duration}"/>
|
<testcase classname="global" name="Comparing function pointers" time="{duration}"/>
|
||||||
<testcase classname="global" name="Comparing member function pointers" time="{duration}"/>
|
<testcase classname="global" name="Comparing member function pointers" time="{duration}"/>
|
||||||
<testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/>
|
<testcase classname="global" name="Comparisons between ints where one side is computed" time="{duration}"/>
|
||||||
@ -608,7 +609,6 @@ ExceptionTests.cpp:<line number>
|
|||||||
<testcase classname="XmlEncode" name="string with quotes" time="{duration}"/>
|
<testcase classname="XmlEncode" name="string with quotes" time="{duration}"/>
|
||||||
<testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/>
|
<testcase classname="XmlEncode" name="string with control char (1)" time="{duration}"/>
|
||||||
<testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/>
|
<testcase classname="XmlEncode" name="string with control char (x7F)" time="{duration}"/>
|
||||||
<testcase classname="global" name="assertions with commas are allowed" time="{duration}"/>
|
|
||||||
<testcase classname="global" name="atomic if" time="{duration}"/>
|
<testcase classname="global" name="atomic if" time="{duration}"/>
|
||||||
<testcase classname="global" name="boolean member" time="{duration}"/>
|
<testcase classname="global" name="boolean member" time="{duration}"/>
|
||||||
<testcase classname="global" name="checkedElse" time="{duration}"/>
|
<testcase classname="global" name="checkedElse" time="{duration}"/>
|
||||||
|
@ -898,6 +898,105 @@
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
|
<TestCase name="Commas in various macros are allowed" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Expression success="true" type="REQUIRE_THROWS" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}}
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECK_THROWS" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}}
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_NOTHROW" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3}
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECK_NOTHROW" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3}
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECK" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE_FALSE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
!std::vector<int>{1, 2} == std::vector<int>{1, 2, 3}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
!({ 1, 2 } == { 1, 2, 3 })
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECK_FALSE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
!std::vector<int>{1, 2} == std::vector<int>{1, 2, 3}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
!({ 1, 2 } == { 1, 2, 3 })
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECK_NOFAIL" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECKED_IF" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
true
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
true
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<Expression success="true" type="CHECKED_ELSE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
|
<Original>
|
||||||
|
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
||||||
|
</Original>
|
||||||
|
<Expanded>
|
||||||
|
{ 1, 2 } == { 1, 2 }
|
||||||
|
</Expanded>
|
||||||
|
</Expression>
|
||||||
|
<OverallResult success="true"/>
|
||||||
|
</TestCase>
|
||||||
<TestCase name="Comparing function pointers" tags="[Tricky][function pointer]" filename="projects/<exe-name>/TrickyTests.cpp" >
|
<TestCase name="Comparing function pointers" tags="[Tricky][function pointer]" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
<Original>
|
<Original>
|
||||||
@ -9086,14 +9185,6 @@ there"
|
|||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<TestCase name="assertions with commas are allowed" filename="projects/<exe-name>/TrickyTests.cpp" >
|
<TestCase name="assertions with commas are allowed" filename="projects/<exe-name>/TrickyTests.cpp" >
|
||||||
<Expression success="true" type="REQUIRE" filename="projects/<exe-name>/TrickyTests.cpp" >
|
|
||||||
<Original>
|
|
||||||
std::vector<int>{1, 2} == std::vector<int>{1, 2}
|
|
||||||
</Original>
|
|
||||||
<Expanded>
|
|
||||||
{ 1, 2 } == { 1, 2 }
|
|
||||||
</Expanded>
|
|
||||||
</Expression>
|
|
||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<TestCase name="atomic if" tags="[0][failing]" filename="projects/<exe-name>/MiscTests.cpp" >
|
<TestCase name="atomic if" tags="[0][failing]" filename="projects/<exe-name>/MiscTests.cpp" >
|
||||||
@ -10139,7 +10230,7 @@ spanner <OverallResult success="true"/>
|
|||||||
</Section>
|
</Section>
|
||||||
<OverallResult success="true"/>
|
<OverallResult success="true"/>
|
||||||
</TestCase>
|
</TestCase>
|
||||||
<OverallResults successes="861" failures="90" expectedFailures="21"/>
|
<OverallResults successes="872" failures="90" expectedFailures="21"/>
|
||||||
</Group>
|
</Group>
|
||||||
<OverallResults successes="861" failures="89" expectedFailures="21"/>
|
<OverallResults successes="872" failures="89" expectedFailures="21"/>
|
||||||
</Catch>
|
</Catch>
|
||||||
|
@ -396,6 +396,31 @@ TEST_CASE( "has printf", "" ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE( "assertions with commas are allowed" ) {
|
TEST_CASE( "assertions with commas are allowed" ) {
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
struct constructor_throws {
|
||||||
|
constructor_throws() {
|
||||||
|
throw 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Commas in various macros are allowed") {
|
||||||
|
REQUIRE_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} );
|
||||||
|
CHECK_THROWS( std::vector<constructor_throws>{constructor_throws{}, constructor_throws{}} );
|
||||||
|
REQUIRE_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} );
|
||||||
|
CHECK_NOTHROW( std::vector<int>{1, 2, 3} == std::vector<int>{1, 2, 3} );
|
||||||
|
|
||||||
REQUIRE(std::vector<int>{1, 2} == std::vector<int>{1, 2});
|
REQUIRE(std::vector<int>{1, 2} == std::vector<int>{1, 2});
|
||||||
|
CHECK( std::vector<int>{1, 2} == std::vector<int>{1, 2} );
|
||||||
|
REQUIRE_FALSE(std::vector<int>{1, 2} == std::vector<int>{1, 2, 3});
|
||||||
|
CHECK_FALSE( std::vector<int>{1, 2} == std::vector<int>{1, 2, 3} );
|
||||||
|
|
||||||
|
CHECK_NOFAIL( std::vector<int>{1, 2} == std::vector<int>{1, 2} );
|
||||||
|
CHECKED_IF( std::vector<int>{1, 2} == std::vector<int>{1, 2} ) {
|
||||||
|
REQUIRE(true);
|
||||||
|
} CHECKED_ELSE( std::vector<int>{1, 2} == std::vector<int>{1, 2} ) {
|
||||||
|
CHECK(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user