ResInsight/ApplicationLibCode/UnitTests/RiaWeightedGeometricMeanCalculator-Test.cpp
Magne Sjaastad f8c5cf389f
clang-format: Set column width to 140
* Set column width to 140
* Use c++20
* Remove redundant virtual
2023-02-26 10:48:40 +01:00

58 lines
1.9 KiB
C++

#include "gtest/gtest.h"
#include "RiaWeightedGeometricMeanCalculator.h"
#include <cmath>
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RiaWeightedGeometricMeanCalculator, BasicUsage )
{
{
RiaWeightedGeometricMeanCalculator calc;
EXPECT_DOUBLE_EQ( 0.0, calc.aggregatedWeight() );
EXPECT_DOUBLE_EQ( 0.0, calc.weightedMean() );
}
{
RiaWeightedGeometricMeanCalculator calc;
std::vector<double> values{ 30.0, 60.0 };
std::vector<double> weights{ 1.5, 3.5 };
for ( size_t i = 0; i < values.size(); i++ )
{
calc.addValueAndWeight( values[i], weights[i] );
}
double expectedValue = std::pow( std::pow( 30.0, 1.5 ) * std::pow( 60.0, 3.5 ), 1 / ( 1.5 + 3.5 ) );
EXPECT_DOUBLE_EQ( 5.0, calc.aggregatedWeight() );
EXPECT_NEAR( expectedValue, calc.weightedMean(), 1e-10 );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST( RiaWeightedGeometricMeanCalculator, BigValues )
{
RiaWeightedGeometricMeanCalculator calc;
std::vector<double> values{ 3000000.0, 6000000.0, 1250000, 2200000 };
std::vector<double> weights{ 1.5, 3.5, 7, 5 };
for ( size_t i = 0; i < values.size(); i++ )
{
calc.addValueAndWeight( values[i], weights[i] );
}
double expectedValue =
std::pow( std::pow( 3000000.0, 1.5 ) * std::pow( 6000000.0, 3.5 ) * std::pow( 1250000.0, 7 ) * std::pow( 2200000.0, 5 ),
1 / ( 1.5 + 3.5 + 7 + 5 ) );
EXPECT_DOUBLE_EQ( 17.0, calc.aggregatedWeight() );
EXPECT_NEAR( expectedValue, calc.weightedMean(), 1e-8 );
}