mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5706 Refactored EnsembleParameter usage.
Cache the list in SummaryCaseCollection Removed the name, EnsembleParameter pair usage Add operator< to be able to insert them in a set
This commit is contained in:
@@ -248,6 +248,31 @@ std::set<RifEclipseSummaryAddress> RimAnalysisPlot::unfilteredAddresses()
|
||||
return addresses;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::set<EnsembleParameter> RimAnalysisPlot::ensembleParameters()
|
||||
{
|
||||
std::set<EnsembleParameter> ensembleParms;
|
||||
|
||||
RimCurveDefinitionAnalyser* analyserOfSelectedCurveDefs = getOrCreateSelectedCurveDefAnalyser();
|
||||
|
||||
for ( RimSummaryCaseCollection* ensemble : analyserOfSelectedCurveDefs->m_ensembles )
|
||||
{
|
||||
std::vector<EnsembleParameter> parameters = ensemble->variationSortedEnsembleParameters();
|
||||
ensembleParms.insert( parameters.begin(), parameters.end() );
|
||||
}
|
||||
|
||||
return ensembleParms;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimAnalysisPlot::maxMinValueFromAddress( const RifEclipseSummaryAddress& address, double* min, double* max )
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "RiaSummaryCurveDefinition.h"
|
||||
|
||||
#include "RimPlot.h"
|
||||
#include "RimSummaryCaseCollection.h"
|
||||
|
||||
#include "cafPdmPtrField.h"
|
||||
|
||||
@@ -52,6 +53,9 @@ public:
|
||||
RimPlotDataFilterCollection* plotDataFilterCollection() const;
|
||||
|
||||
std::set<RifEclipseSummaryAddress> unfilteredAddresses();
|
||||
std::set<EnsembleParameter> ensembleParameters();
|
||||
|
||||
void maxMinValueFromAddress( const RifEclipseSummaryAddress& address, double* min, double* max );
|
||||
|
||||
public: // Internal. Public needed for AppEnum setup
|
||||
enum BarOrientation
|
||||
@@ -176,6 +180,6 @@ private:
|
||||
caf::PdmField<bool> m_useTimeStepInBarText;
|
||||
caf::PdmField<bool> m_useQuantityInBarText;
|
||||
|
||||
caf::PdmChildField<RimPlotAxisProperties*> m_valueAxisProperties;
|
||||
caf::PdmChildField<RimPlotAxisProperties*> m_valueAxisProperties;
|
||||
caf::PdmChildField<RimPlotDataFilterCollection*> m_plotDataFilterCollection;
|
||||
};
|
||||
|
||||
@@ -38,7 +38,6 @@ class RimWellRftEnsembleCurveSet : public caf::PdmObject
|
||||
public:
|
||||
typedef RimEnsembleCurveSetColorManager::ColorMode ColorMode;
|
||||
typedef RimEnsembleCurveSetColorManager::ColorModeEnum ColorModeEnum;
|
||||
using NameParameterPair = EnsembleParameter::NameParameterPair;
|
||||
|
||||
public:
|
||||
RimWellRftEnsembleCurveSet();
|
||||
|
||||
@@ -139,11 +139,10 @@ QList<caf::PdmOptionItemInfo>
|
||||
auto curveSet = parentCurveSet();
|
||||
if ( curveSet )
|
||||
{
|
||||
auto nameParameterPairs = curveSet->ensembleParameters();
|
||||
for ( auto& nameParamPair : nameParameterPairs )
|
||||
auto ensParms = curveSet->variationSortedEnsembleParameters();
|
||||
for ( auto& ensParm : ensParms )
|
||||
{
|
||||
options.push_back(
|
||||
caf::PdmOptionItemInfo( EnsembleParameter::uiName( nameParamPair ), nameParamPair.first ) );
|
||||
options.push_back( caf::PdmOptionItemInfo( ensParm.uiName(), ensParm.name ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -357,10 +356,10 @@ void RimEnsembleCurveFilter::setInitialValues( bool forceDefault )
|
||||
{
|
||||
if ( !selectedEnsembleParameter().isValid() )
|
||||
{
|
||||
auto parameterNames = parentCurveSet()->ensembleParameters();
|
||||
if ( !parameterNames.empty() )
|
||||
auto ensParams = parentCurveSet()->variationSortedEnsembleParameters();
|
||||
if ( !ensParams.empty() )
|
||||
{
|
||||
m_ensembleParameterName = parameterNames.front().first;
|
||||
m_ensembleParameterName = ensParams.front().name;
|
||||
updateConnectedEditors();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -538,8 +538,8 @@ void RimEnsembleCurveSet::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
|
||||
{
|
||||
if ( m_ensembleParameter().isEmpty() )
|
||||
{
|
||||
auto params = ensembleParameters();
|
||||
m_ensembleParameter = !params.empty() ? params.front().first : "";
|
||||
auto params = variationSortedEnsembleParameters();
|
||||
m_ensembleParameter = !params.empty() ? params.front().name : "";
|
||||
}
|
||||
updateCurveColors();
|
||||
|
||||
@@ -766,16 +766,16 @@ QList<caf::PdmOptionItemInfo> RimEnsembleCurveSet::calculateValueOptions( const
|
||||
auto byEnsParamOption = ColorModeEnum( ColorMode::BY_ENSEMBLE_PARAM );
|
||||
|
||||
options.push_back( caf::PdmOptionItemInfo( singleColorOption.uiText(), ColorMode::SINGLE_COLOR ) );
|
||||
if ( !ensembleParameters().empty() )
|
||||
if ( !variationSortedEnsembleParameters().empty() )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( byEnsParamOption.uiText(), ColorMode::BY_ENSEMBLE_PARAM ) );
|
||||
}
|
||||
}
|
||||
else if ( fieldNeedingOptions == &m_ensembleParameter )
|
||||
{
|
||||
for ( const auto& paramPair : ensembleParameters() )
|
||||
for ( const auto& param : variationSortedEnsembleParameters() )
|
||||
{
|
||||
options.push_back( caf::PdmOptionItemInfo( EnsembleParameter::uiName( paramPair ), paramPair.first ) );
|
||||
options.push_back( caf::PdmOptionItemInfo( param.uiName(), param.name ) );
|
||||
}
|
||||
}
|
||||
else if ( fieldNeedingOptions == &m_yValuesSummaryAddressUiField )
|
||||
@@ -1114,32 +1114,17 @@ void RimEnsembleCurveSet::updateAllTextInPlot()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
std::vector<RimEnsembleCurveSet::NameParameterPair> RimEnsembleCurveSet::ensembleParameters() const
|
||||
std::vector<EnsembleParameter> RimEnsembleCurveSet::variationSortedEnsembleParameters() const
|
||||
{
|
||||
RimSummaryCaseCollection* group = m_yValuesSummaryCaseCollection;
|
||||
|
||||
std::set<QString> paramSet;
|
||||
if ( group )
|
||||
RimSummaryCaseCollection* ensemble = m_yValuesSummaryCaseCollection;
|
||||
if ( ensemble )
|
||||
{
|
||||
for ( RimSummaryCase* rimCase : group->allSummaryCases() )
|
||||
{
|
||||
if ( rimCase->caseRealizationParameters() != nullptr )
|
||||
{
|
||||
auto ps = rimCase->caseRealizationParameters()->parameters();
|
||||
for ( auto p : ps )
|
||||
paramSet.insert( p.first );
|
||||
}
|
||||
}
|
||||
return ensemble->variationSortedEnsembleParameters();
|
||||
}
|
||||
|
||||
std::vector<NameParameterPair> parameterVector;
|
||||
parameterVector.reserve( paramSet.size() );
|
||||
for ( const QString& parameterName : paramSet )
|
||||
else
|
||||
{
|
||||
parameterVector.push_back( std::make_pair( parameterName, group->ensembleParameter( parameterName ) ) );
|
||||
return std::vector<EnsembleParameter>();
|
||||
}
|
||||
EnsembleParameter::sortByBinnedVariation( parameterVector );
|
||||
return parameterVector;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -70,8 +70,6 @@ public:
|
||||
using ColorMode = RimEnsembleCurveSetColorManager::ColorMode;
|
||||
using ColorModeEnum = RimEnsembleCurveSetColorManager::ColorModeEnum;
|
||||
|
||||
using NameParameterPair = EnsembleParameter::NameParameterPair;
|
||||
|
||||
public:
|
||||
RimEnsembleCurveSet();
|
||||
~RimEnsembleCurveSet() override;
|
||||
@@ -120,7 +118,7 @@ public:
|
||||
void markCachedDataForPurge();
|
||||
|
||||
void updateAllTextInPlot();
|
||||
std::vector<NameParameterPair> ensembleParameters() const;
|
||||
std::vector<EnsembleParameter> variationSortedEnsembleParameters() const;
|
||||
|
||||
std::vector<RimSummaryCase*> filterEnsembleCases( const std::vector<RimSummaryCase*>& sumCases );
|
||||
void disableStatisticCurves();
|
||||
|
||||
@@ -39,8 +39,7 @@ public:
|
||||
SINGLE_COLOR,
|
||||
BY_ENSEMBLE_PARAM
|
||||
};
|
||||
using ColorModeEnum = caf::AppEnum<ColorMode>;
|
||||
using NameParameterPair = EnsembleParameter::NameParameterPair;
|
||||
using ColorModeEnum = caf::AppEnum<ColorMode>;
|
||||
|
||||
public:
|
||||
static const std::map<RimRegularLegendConfig::ColorRangesType, cvf::Color3ubArray>& EnsembleColorRanges();
|
||||
|
||||
@@ -85,60 +85,73 @@ double EnsembleParameter::normalizedStdDeviation() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void EnsembleParameter::sortByBinnedVariation( std::vector<NameParameterPair>& parameterVector )
|
||||
bool EnsembleParameter::operator<( const EnsembleParameter& other ) const
|
||||
{
|
||||
if ( this->variationBin != other.variationBin )
|
||||
{
|
||||
return this->variationBin < other.variationBin;
|
||||
}
|
||||
|
||||
return this->name < other.name;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimSummaryCaseCollection::sortByBinnedVariation( std::vector<EnsembleParameter>& parameterVector )
|
||||
{
|
||||
double minStdDev = std::numeric_limits<double>::infinity();
|
||||
double maxStdDev = 0.0;
|
||||
for ( const auto& paramPair : parameterVector )
|
||||
{
|
||||
minStdDev = std::min( minStdDev, paramPair.second.normalizedStdDeviation() );
|
||||
maxStdDev = std::max( maxStdDev, paramPair.second.normalizedStdDeviation() );
|
||||
minStdDev = std::min( minStdDev, paramPair.normalizedStdDeviation() );
|
||||
maxStdDev = std::max( maxStdDev, paramPair.normalizedStdDeviation() );
|
||||
}
|
||||
if ( ( maxStdDev - minStdDev ) < 1.0e-8 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
double delta = ( maxStdDev - minStdDev ) / NR_OF_VARIATION_BINS;
|
||||
double delta = ( maxStdDev - minStdDev ) / EnsembleParameter::NR_OF_VARIATION_BINS;
|
||||
|
||||
std::vector<double> bins;
|
||||
for ( int i = 0; i < NR_OF_VARIATION_BINS - 1; ++i )
|
||||
for ( int i = 0; i < EnsembleParameter::NR_OF_VARIATION_BINS - 1; ++i )
|
||||
{
|
||||
bins.push_back( minStdDev + ( i + 1 ) * delta );
|
||||
}
|
||||
|
||||
for ( NameParameterPair& nameParamPair : parameterVector )
|
||||
for ( EnsembleParameter& nameParamPair : parameterVector )
|
||||
{
|
||||
int binNumber = 0;
|
||||
for ( double bin : bins )
|
||||
{
|
||||
if ( nameParamPair.second.normalizedStdDeviation() >= bin )
|
||||
if ( nameParamPair.normalizedStdDeviation() >= bin )
|
||||
{
|
||||
binNumber++;
|
||||
}
|
||||
}
|
||||
nameParamPair.second.variationBin = binNumber;
|
||||
nameParamPair.variationBin = binNumber;
|
||||
}
|
||||
|
||||
// Sort by variation bin (highest first) but keep name as sorting parameter when parameters have the same variation
|
||||
// index
|
||||
std::stable_sort( parameterVector.begin(),
|
||||
parameterVector.end(),
|
||||
[&bins]( const NameParameterPair& lhs, const NameParameterPair& rhs ) {
|
||||
return lhs.second.variationBin > rhs.second.variationBin;
|
||||
[&bins]( const EnsembleParameter& lhs, const EnsembleParameter& rhs ) {
|
||||
return lhs.variationBin > rhs.variationBin;
|
||||
} );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString EnsembleParameter::uiName( const NameParameterPair& paramPair )
|
||||
QString EnsembleParameter::uiName() const
|
||||
{
|
||||
QString stem = paramPair.first;
|
||||
QString stem = name;
|
||||
QString variationString;
|
||||
if ( paramPair.second.isNumeric() )
|
||||
if ( isNumeric() )
|
||||
{
|
||||
switch ( paramPair.second.variationBin )
|
||||
switch ( variationBin )
|
||||
{
|
||||
case LOW_VARIATION:
|
||||
variationString = QString( " (Low variation)" );
|
||||
@@ -149,6 +162,7 @@ QString EnsembleParameter::uiName( const NameParameterPair& paramPair )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return QString( "%1%2" ).arg( stem ).arg( variationString );
|
||||
}
|
||||
|
||||
@@ -192,6 +206,9 @@ void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
|
||||
{
|
||||
size_t caseCountBeforeRemove = m_cases.size();
|
||||
m_cases.removeChildObject( summaryCase );
|
||||
|
||||
m_cachedSortedEnsembleParameters.clear();
|
||||
|
||||
updateReferringCurveSets();
|
||||
|
||||
if ( m_isEnsemble && m_cases.size() != caseCountBeforeRemove )
|
||||
@@ -207,6 +224,7 @@ void RimSummaryCaseCollection::removeCase( RimSummaryCase* summaryCase )
|
||||
void RimSummaryCaseCollection::addCase( RimSummaryCase* summaryCase, bool updateCurveSets )
|
||||
{
|
||||
m_cases.push_back( summaryCase );
|
||||
m_cachedSortedEnsembleParameters.clear();
|
||||
|
||||
// Update derived ensemble cases (if any)
|
||||
std::vector<RimDerivedEnsembleCaseCollection*> referringObjects;
|
||||
@@ -355,6 +373,36 @@ RifReaderRftInterface* RimSummaryCaseCollection::rftStatisticsReader()
|
||||
return m_statisticsEclipseRftReader.p();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
const std::vector<EnsembleParameter>& RimSummaryCaseCollection::variationSortedEnsembleParameters() const
|
||||
{
|
||||
if ( m_cachedSortedEnsembleParameters.size() ) return m_cachedSortedEnsembleParameters;
|
||||
|
||||
std::set<QString> paramSet;
|
||||
for ( RimSummaryCase* rimCase : this->allSummaryCases() )
|
||||
{
|
||||
if ( rimCase->caseRealizationParameters() != nullptr )
|
||||
{
|
||||
auto ps = rimCase->caseRealizationParameters()->parameters();
|
||||
for ( auto p : ps )
|
||||
{
|
||||
paramSet.insert( p.first );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_cachedSortedEnsembleParameters.reserve( paramSet.size() );
|
||||
for ( const QString& parameterName : paramSet )
|
||||
{
|
||||
m_cachedSortedEnsembleParameters.push_back( this->createEnsembleParameter( parameterName ) );
|
||||
}
|
||||
RimSummaryCaseCollection::sortByBinnedVariation( m_cachedSortedEnsembleParameters );
|
||||
|
||||
return m_cachedSortedEnsembleParameters;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -362,6 +410,18 @@ EnsembleParameter RimSummaryCaseCollection::ensembleParameter( const QString& pa
|
||||
{
|
||||
if ( !isEnsemble() || paramName.isEmpty() ) return EnsembleParameter();
|
||||
|
||||
const std::vector<EnsembleParameter>& ensembleParams = variationSortedEnsembleParameters();
|
||||
|
||||
for ( const EnsembleParameter& ensParam : ensembleParams )
|
||||
{
|
||||
if ( ensParam.name == paramName ) return ensParam;
|
||||
}
|
||||
|
||||
return EnsembleParameter();
|
||||
}
|
||||
|
||||
EnsembleParameter RimSummaryCaseCollection::createEnsembleParameter( const QString& paramName ) const
|
||||
{
|
||||
EnsembleParameter eParam;
|
||||
eParam.name = paramName;
|
||||
|
||||
|
||||
@@ -43,8 +43,6 @@ class RimSummaryCase;
|
||||
class EnsembleParameter
|
||||
{
|
||||
public:
|
||||
typedef std::pair<QString, EnsembleParameter> NameParameterPair;
|
||||
|
||||
enum Type
|
||||
{
|
||||
TYPE_NONE,
|
||||
@@ -58,6 +56,7 @@ public:
|
||||
HIGH_VARIATION,
|
||||
NR_OF_VARIATION_BINS
|
||||
};
|
||||
QString uiName() const;
|
||||
QString name;
|
||||
Type type;
|
||||
std::vector<QVariant> values;
|
||||
@@ -78,9 +77,7 @@ public:
|
||||
bool isText() const { return type == TYPE_TEXT; }
|
||||
double normalizedStdDeviation() const;
|
||||
|
||||
static void sortByBinnedVariation( std::vector<NameParameterPair>& parameterVector );
|
||||
|
||||
static QString uiName( const NameParameterPair& paramPair );
|
||||
bool operator<( const EnsembleParameter& other ) const;
|
||||
|
||||
private:
|
||||
double stdDeviation() const;
|
||||
@@ -109,6 +106,8 @@ public:
|
||||
std::set<QDateTime> rftTimeStepsForWell( const QString& wellName ) const;
|
||||
RifReaderRftInterface* rftStatisticsReader();
|
||||
|
||||
const std::vector<EnsembleParameter>& variationSortedEnsembleParameters() const;
|
||||
|
||||
EnsembleParameter ensembleParameter( const QString& paramName ) const;
|
||||
void calculateEnsembleParametersIntersectionHash();
|
||||
void clearEnsembleParametersHashes();
|
||||
@@ -121,6 +120,10 @@ public:
|
||||
RiaEclipseUnitTools::UnitSystem unitSystem() const;
|
||||
|
||||
private:
|
||||
EnsembleParameter createEnsembleParameter( const QString& paramName ) const;
|
||||
static void sortByBinnedVariation( std::vector<EnsembleParameter>& parameterVector );
|
||||
friend class RimSummaryCaseCollection_TESTER;
|
||||
|
||||
caf::PdmFieldHandle* userDescriptionField() override;
|
||||
QString nameAndItemCount() const;
|
||||
void updateIcon();
|
||||
@@ -137,10 +140,13 @@ protected:
|
||||
caf::PdmChildArrayField<RimSummaryCase*> m_cases;
|
||||
|
||||
private:
|
||||
caf::PdmField<QString> m_name;
|
||||
caf::PdmProxyValueField<QString> m_nameAndItemCount;
|
||||
caf::PdmField<bool> m_isEnsemble;
|
||||
caf::PdmField<QString> m_name;
|
||||
caf::PdmProxyValueField<QString> m_nameAndItemCount;
|
||||
caf::PdmField<bool> m_isEnsemble;
|
||||
|
||||
cvf::ref<RifReaderEnsembleStatisticsRft> m_statisticsEclipseRftReader;
|
||||
|
||||
size_t m_commonAddressCount; // if different address count among cases, set to 0
|
||||
|
||||
mutable std::vector<EnsembleParameter> m_cachedSortedEnsembleParameters;
|
||||
};
|
||||
|
||||
@@ -6,7 +6,18 @@
|
||||
|
||||
#include <QDebug>
|
||||
|
||||
class RimSummaryCaseCollection_TESTER
|
||||
{
|
||||
public:
|
||||
static void test1();
|
||||
};
|
||||
|
||||
TEST( RimSummaryCaseCollection, EnsembleParameter )
|
||||
{
|
||||
RimSummaryCaseCollection_TESTER::test1();
|
||||
}
|
||||
|
||||
void RimSummaryCaseCollection_TESTER::test1()
|
||||
{
|
||||
std::random_device rd;
|
||||
std::mt19937 gen( rd() );
|
||||
@@ -15,7 +26,7 @@ TEST( RimSummaryCaseCollection, EnsembleParameter )
|
||||
std::uniform_int_distribution<size_t> countDistribution( 1u, 1000u );
|
||||
size_t N = 1000;
|
||||
|
||||
std::vector<EnsembleParameter::NameParameterPair> parameters;
|
||||
std::vector<EnsembleParameter> parameters;
|
||||
for ( size_t i = 0; i < N; ++i )
|
||||
{
|
||||
EnsembleParameter param;
|
||||
@@ -41,19 +52,20 @@ TEST( RimSummaryCaseCollection, EnsembleParameter )
|
||||
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 ) );
|
||||
param.name = QString( "%1" ).arg( i );
|
||||
parameters.push_back( param );
|
||||
}
|
||||
size_t previousSize = parameters.size();
|
||||
EnsembleParameter::sortByBinnedVariation( parameters );
|
||||
RimSummaryCaseCollection::sortByBinnedVariation( parameters );
|
||||
size_t currentSize = parameters.size();
|
||||
EXPECT_EQ( previousSize, currentSize );
|
||||
|
||||
int currentVariation = (int)EnsembleParameter::HIGH_VARIATION;
|
||||
for ( const EnsembleParameter::NameParameterPair& nameParamPair : parameters )
|
||||
for ( const EnsembleParameter& 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;
|
||||
EXPECT_GE( nameParamPair.variationBin, (int)EnsembleParameter::LOW_VARIATION );
|
||||
EXPECT_LE( nameParamPair.variationBin, (int)EnsembleParameter::HIGH_VARIATION );
|
||||
EXPECT_LE( nameParamPair.variationBin, currentVariation );
|
||||
currentVariation = nameParamPair.variationBin;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user