mirror of
				https://github.com/catchorg/Catch2.git
				synced 2025-11-04 00:51:52 +01:00 
			
		
		
		
	The support is to be considered experimental, that is, the interfaces, the first party generators and helper functions can change or be removed at any point in time. Related to #850
		
			
				
	
	
		
			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] );
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |