mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-26 15:10:22 -05:00
#12489 Improve robustness of mean calculators
Replace asserts with early-return guards so zero or negative weights are silently skipped instead of crashing. Add unit tests for zero-weight and zero-value edge cases in all three calculator classes. Fixes #12489.
This commit is contained in:
1 parent
ba1055fbc4
commit
394bc6c3df
6 files changed
+122
-13
No files matched your search
@@ -72,3 +72,57 @@ TEST( RiaWeightedHarmonicMeanCalculator, WeightedValues )
|
||||
EXPECT_NEAR( expectedValue, calc.weightedMean(), 1.0e-8 );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RiaWeightedHarmonicMeanCalculator, ZeroWeight )
|
||||
{
|
||||
{
|
||||
// Zero weight only - no valid data, no crash
|
||||
RiaWeightedHarmonicMeanCalculator calc;
|
||||
calc.addValueAndWeight( 5.0, 0.0 );
|
||||
EXPECT_FALSE( calc.validAggregatedWeight() );
|
||||
EXPECT_DOUBLE_EQ( 0.0, calc.weightedMean() );
|
||||
}
|
||||
|
||||
{
|
||||
// Zero weight mixed with valid data - zero weight is ignored
|
||||
RiaWeightedHarmonicMeanCalculator calc;
|
||||
calc.addValueAndWeight( 100.0, 0.0 );
|
||||
calc.addValueAndWeight( 1.0, 1.0 );
|
||||
calc.addValueAndWeight( 4.0, 1.0 );
|
||||
calc.addValueAndWeight( 4.0, 1.0 );
|
||||
calc.addValueAndWeight( 200.0, 0.0 );
|
||||
|
||||
EXPECT_DOUBLE_EQ( 3.0, calc.aggregatedWeight() );
|
||||
EXPECT_NEAR( 2.0, calc.weightedMean(), 1e-10 );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RiaWeightedHarmonicMeanCalculator, ZeroValue )
|
||||
{
|
||||
// Zero value is skipped (would cause division by zero)
|
||||
RiaWeightedHarmonicMeanCalculator calc;
|
||||
calc.addValueAndWeight( 0.0, 1.0 );
|
||||
calc.addValueAndWeight( 1.0, 1.0 );
|
||||
calc.addValueAndWeight( 4.0, 1.0 );
|
||||
calc.addValueAndWeight( 4.0, 1.0 );
|
||||
|
||||
EXPECT_DOUBLE_EQ( 3.0, calc.aggregatedWeight() );
|
||||
EXPECT_NEAR( 2.0, calc.weightedMean(), 1e-10 );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
TEST( RiaWeightedHarmonicMeanCalculator, NoValidData )
|
||||
{
|
||||
// No valid data added - weightedMean returns 0.0 without asserting
|
||||
RiaWeightedHarmonicMeanCalculator calc;
|
||||
EXPECT_FALSE( calc.validAggregatedWeight() );
|
||||
EXPECT_DOUBLE_EQ( 0.0, calc.weightedMean() );
|
||||
}
|
||||
Reference in new issue
Block a user