#include "gtest/gtest.h" #include "RimSummaryCaseCollection.h" #include #include TEST( RimSummaryCaseCollection, EnsembleParameter ) { std::random_device rd; std::mt19937 gen( rd() ); std::uniform_real_distribution meanDistribution( -10000.0, 10000.0 ); std::uniform_real_distribution variationDistribution( 0.0, 5000.0 ); std::uniform_int_distribution countDistribution( 1u, 1000u ); size_t N = 1000; std::vector parameters; for ( size_t i = 0; i < N; ++i ) { EnsembleParameter param; param.type = EnsembleParameter::TYPE_NUMERIC; size_t valueCount = countDistribution( gen ); double meanValue = meanDistribution( gen ); double range = variationDistribution( gen ); std::uniform_real_distribution valueDistribution( meanValue - range, meanValue + range ); double maxValue = -std::numeric_limits::max(); double minValue = std::numeric_limits::max(); for ( size_t j = 0; j < valueCount; ++j ) { double value = valueDistribution( gen ); maxValue = std::max( maxValue, value ); minValue = std::min( minValue, value ); param.values.push_back( QVariant( value ) ); } param.minValue = minValue; param.maxValue = maxValue; double normStdDev = param.normalizedStdDeviation(); EXPECT_GE( normStdDev, 0.0 ); EXPECT_LE( normStdDev, std::sqrt( 2.0 ) ); parameters.push_back( std::make_pair( QString( "%1" ).arg( i ), param ) ); } size_t previousSize = parameters.size(); EnsembleParameter::sortByBinnedVariation( parameters ); size_t currentSize = parameters.size(); EXPECT_EQ( previousSize, currentSize ); int currentVariation = (int)EnsembleParameter::HIGH_VARIATION; for ( const EnsembleParameter::NameParameterPair& nameParamPair : parameters ) { EXPECT_GE( nameParamPair.second.variationBin, (int)EnsembleParameter::LOW_VARIATION ); EXPECT_LE( nameParamPair.second.variationBin, (int)EnsembleParameter::HIGH_VARIATION ); EXPECT_LE( nameParamPair.second.variationBin, currentVariation ); currentVariation = nameParamPair.second.variationBin; } }