mirror of
https://github.com/catchorg/Catch2.git
synced 2025-05-16 09:48:38 +00:00
Redo generator interface
This commit is contained in:
parent
64a9c02315
commit
e46a70f829
13 changed files with 1284 additions and 2014 deletions
|
@ -1,93 +1,46 @@
|
|||
#include "catch.hpp"
|
||||
|
||||
// Tests of generartor implementation details
|
||||
|
||||
TEST_CASE("Generators impl", "[impl]") {
|
||||
// Tests of generator implementation details
|
||||
TEST_CASE("Generators internals", "[generators][internals]") {
|
||||
using namespace Catch::Generators;
|
||||
|
||||
SECTION( "range" ) {
|
||||
auto gen = range(1,3);
|
||||
|
||||
CHECK( gen.size() == 2 );
|
||||
|
||||
CHECK( gen[0] == 1 );
|
||||
CHECK( gen[1] == 2 );
|
||||
SECTION("Single value") {
|
||||
auto gen = value(123);
|
||||
REQUIRE(gen.get() == 123);
|
||||
REQUIRE_FALSE(gen.next());
|
||||
}
|
||||
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("Preset values") {
|
||||
auto gen = values({ 1, 3, 5 });
|
||||
REQUIRE(gen.get() == 1);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 3);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 5);
|
||||
REQUIRE_FALSE(gen.next());
|
||||
}
|
||||
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("Generator combinator") {
|
||||
auto gen = makeGenerators(1, 5, values({ 2, 4 }), 0);
|
||||
REQUIRE(gen.get() == 1);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 5);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 2);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 4);
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == 0);
|
||||
REQUIRE_FALSE(gen.next());
|
||||
}
|
||||
|
||||
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] );
|
||||
}
|
||||
SECTION("Explicitly typed generator sequence") {
|
||||
auto gen = makeGenerators(as<std::string>{}, "aa", "bb", "cc");
|
||||
// This just checks that the type is std::string:
|
||||
REQUIRE(gen.get().size() == 2);
|
||||
// Iterate over the generator
|
||||
REQUIRE(gen.get() == "aa");
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == "bb");
|
||||
REQUIRE(gen.next());
|
||||
REQUIRE(gen.get() == "cc");
|
||||
REQUIRE_FALSE(gen.next());
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue