mirror of
https://github.com/catchorg/Catch2.git
synced 2024-12-28 13:43:30 +01:00
94 lines
2.3 KiB
C++
94 lines
2.3 KiB
C++
|
#include "catch.hpp"
|
||
|
|
||
|
// Tests of generartor implementation details
|
||
|
|
||
|
TEST_CASE("Generators impl", "[impl]") {
|
||
|
using namespace Catch::Generators;
|
||
|
|
||
|
SECTION( "range" ) {
|
||
|
auto gen = range(1,3);
|
||
|
|
||
|
CHECK( gen.size() == 2 );
|
||
|
|
||
|
CHECK( gen[0] == 1 );
|
||
|
CHECK( gen[1] == 2 );
|
||
|
}
|
||
|
SECTION( "fixed values" ) {
|
||
|
auto gen = values( { 3, 1, 4, 1 } );
|
||
|
|
||
|
CHECK( gen.size() == 4 );
|
||
|
CHECK( gen[0] == 3 );
|
||
|
CHECK( gen[1] == 1 );
|
||
|
CHECK( gen[2] == 4 );
|
||
|
CHECK( gen[3] == 1 );
|
||
|
}
|
||
|
SECTION( "combined" ) {
|
||
|
auto gen = makeGenerators( range( 1, 3 ), values( { 9, 7 } ) );
|
||
|
|
||
|
CHECK( gen.size() == 4 );
|
||
|
CHECK( gen[0] == 1 );
|
||
|
CHECK( gen[1] == 2 );
|
||
|
CHECK( gen[2] == 9 );
|
||
|
CHECK( gen[3] == 7 );
|
||
|
}
|
||
|
|
||
|
SECTION( "values" ) {
|
||
|
auto gen = makeGenerators( 3, 1 );
|
||
|
|
||
|
CHECK( gen.size() == 2 );
|
||
|
CHECK( gen[0] == 3 );
|
||
|
CHECK( gen[1] == 1 );
|
||
|
}
|
||
|
SECTION( "values2" ) {
|
||
|
auto gen = makeGenerators( 3, 1 );
|
||
|
|
||
|
CHECK( gen.size() == 2 );
|
||
|
CHECK( gen[0] == 3 );
|
||
|
CHECK( gen[1] == 1 );
|
||
|
}
|
||
|
|
||
|
|
||
|
SECTION( "type erasure" ) {
|
||
|
auto gen = makeGenerators( range( 7, 10 ), 11 );
|
||
|
|
||
|
// Make type erased version
|
||
|
auto dynCopy = pf::make_unique<Generators<int>>( std::move( gen ) );
|
||
|
std::unique_ptr<GeneratorBase const> base = std::move( dynCopy );
|
||
|
|
||
|
// Only thing we can do is ask for the size
|
||
|
CHECK( base->size() == 4 );
|
||
|
|
||
|
// Restore typed version
|
||
|
auto typed = dynamic_cast<Generators<int> const*>( base.get() );
|
||
|
REQUIRE( typed );
|
||
|
CHECK( typed->size() == 4 );
|
||
|
CHECK( (*typed)[0] == 7 );
|
||
|
CHECK( (*typed)[3] == 11 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
TEST_CASE("Generators impl - random", "[approvals]") {
|
||
|
using namespace Catch::Generators;
|
||
|
|
||
|
SECTION( "random range" ) {
|
||
|
auto gen = random( 3, 9 );
|
||
|
|
||
|
CHECK( gen.size() == 6 );
|
||
|
for( size_t i = 0; i < 6; ++i ) {
|
||
|
CHECK( gen[i] >= 3 );
|
||
|
CHECK( gen[i] <= 8 );
|
||
|
if( i > 0 )
|
||
|
CHECK( gen[i] != gen[i-1] );
|
||
|
}
|
||
|
}
|
||
|
SECTION( "random selection" ) {
|
||
|
auto gen = random<int>( 10 );
|
||
|
|
||
|
CHECK( gen.size() == 10 );
|
||
|
for( size_t i = 0; i < 10; ++i ) {
|
||
|
if( i > 0 )
|
||
|
CHECK( gen[i] != gen[i-1] );
|
||
|
}
|
||
|
}
|
||
|
}
|