mirror of
https://github.com/catchorg/Catch2.git
synced 2025-04-29 12:03:53 +00: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
46 lines
1.2 KiB
C++
46 lines
1.2 KiB
C++
/*
|
|
* Created by Phil Nash on 15/6/2018.
|
|
*
|
|
* Distributed under the Boost Software License, Version 1.0. (See accompanying
|
|
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
*/
|
|
|
|
#include "catch_generators.hpp"
|
|
#include "catch_random_number_generator.h"
|
|
#include "catch_interfaces_capture.h"
|
|
|
|
#include <set>
|
|
|
|
namespace Catch {
|
|
|
|
IGeneratorTracker::~IGeneratorTracker() {}
|
|
|
|
namespace Generators {
|
|
|
|
GeneratorBase::~GeneratorBase() {}
|
|
|
|
std::vector<size_t> randomiseIndices( size_t selectionSize, size_t sourceSize ) {
|
|
|
|
assert( selectionSize <= sourceSize );
|
|
std::vector<size_t> indices;
|
|
indices.reserve( selectionSize );
|
|
std::uniform_int_distribution<size_t> uid( 0, sourceSize-1 );
|
|
|
|
std::set<size_t> seen;
|
|
// !TBD: improve this algorithm
|
|
while( indices.size() < selectionSize ) {
|
|
auto index = uid( rng() );
|
|
if( seen.insert( index ).second )
|
|
indices.push_back( index );
|
|
}
|
|
return indices;
|
|
}
|
|
|
|
auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
|
|
return getResultCapture().acquireGeneratorTracker( lineInfo );
|
|
}
|
|
|
|
|
|
} // namespace Generators
|
|
} // namespace Catch
|