mirror of
https://github.com/OPM/ResInsight.git
synced 2026-11-02 20:30:46 -06:00
Add unit tests for RiuQwtLinearScaleEngine scale division methods
This commit is contained in:
1 parent
2f63230c61
commit
20c8888cba
3 files changed
+126
-4
No files matched your search
@@ -40,6 +40,7 @@ set(SOURCE_UNITTEST_FILES
|
|||||||
${CMAKE_CURRENT_LIST_DIR}/ObservedDataParser-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/ObservedDataParser-Test.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/EclipseRftReader-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/EclipseRftReader-Test.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RicExpressionParser-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RicExpressionParser-Test.cpp
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/RiuQwtLinearScaleEngine-Test.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RiuSummaryVectorDescriptionMap-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RiuSummaryVectorDescriptionMap-Test.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/FixedWidthDataParser-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/FixedWidthDataParser-Test.cpp
|
||||||
${CMAKE_CURRENT_LIST_DIR}/RigTimeCurveHistoryMerger-Test.cpp
|
${CMAKE_CURRENT_LIST_DIR}/RigTimeCurveHistoryMerger-Test.cpp
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
#include "gtest/gtest.h"
|
||||||
|
|
||||||
|
#include "RiuQwtLinearScaleEngine.h"
|
||||||
|
|
||||||
|
#include "qwt_scale_div.h"
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RiuQwtLinearScaleEngine, DivideScaleWithExplicitIntervals_NormalCase )
|
||||||
|
{
|
||||||
|
RiuQwtLinearScaleEngine engine;
|
||||||
|
|
||||||
|
// Range 0..10 with major step 2 and minor step 1
|
||||||
|
QwtScaleDiv scaleDiv = engine.divideScaleWithExplicitIntervals( 0.0, 10.0, 2.0, 1.0 );
|
||||||
|
|
||||||
|
EXPECT_DOUBLE_EQ( scaleDiv.lowerBound(), 0.0 );
|
||||||
|
EXPECT_DOUBLE_EQ( scaleDiv.upperBound(), 10.0 );
|
||||||
|
|
||||||
|
const QList<double>& majorTicks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
|
||||||
|
EXPECT_EQ( majorTicks.size(), 6 ); // 0, 2, 4, 6, 8, 10
|
||||||
|
|
||||||
|
const QList<double>& minorTicks = scaleDiv.ticks( QwtScaleDiv::MinorTick );
|
||||||
|
EXPECT_EQ( minorTicks.size(), 11 ); // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RiuQwtLinearScaleEngine, DivideScaleWithExplicitIntervals_ZeroMajorStep )
|
||||||
|
{
|
||||||
|
RiuQwtLinearScaleEngine engine;
|
||||||
|
|
||||||
|
// Zero major step should produce no major ticks (guard against division by zero)
|
||||||
|
QwtScaleDiv scaleDiv = engine.divideScaleWithExplicitIntervals( 0.0, 10.0, 0.0, 1.0 );
|
||||||
|
|
||||||
|
const QList<double>& majorTicks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
|
||||||
|
EXPECT_TRUE( majorTicks.isEmpty() );
|
||||||
|
|
||||||
|
// Minor ticks should still be built
|
||||||
|
const QList<double>& minorTicks = scaleDiv.ticks( QwtScaleDiv::MinorTick );
|
||||||
|
EXPECT_FALSE( minorTicks.isEmpty() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RiuQwtLinearScaleEngine, DivideScaleWithExplicitIntervals_ZeroMinorStep )
|
||||||
|
{
|
||||||
|
RiuQwtLinearScaleEngine engine;
|
||||||
|
|
||||||
|
// Zero minor step should produce no minor ticks (guard against division by zero)
|
||||||
|
QwtScaleDiv scaleDiv = engine.divideScaleWithExplicitIntervals( 0.0, 10.0, 2.0, 0.0 );
|
||||||
|
|
||||||
|
const QList<double>& minorTicks = scaleDiv.ticks( QwtScaleDiv::MinorTick );
|
||||||
|
EXPECT_TRUE( minorTicks.isEmpty() );
|
||||||
|
|
||||||
|
// Major ticks should still be built
|
||||||
|
const QList<double>& majorTicks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
|
||||||
|
EXPECT_FALSE( majorTicks.isEmpty() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RiuQwtLinearScaleEngine, DivideScaleWithExplicitIntervalsAndRange_RangeDiffersFromTickInterval )
|
||||||
|
{
|
||||||
|
RiuQwtLinearScaleEngine engine;
|
||||||
|
|
||||||
|
// Ticks cover 0..10, but the displayed range is -2..12
|
||||||
|
QwtScaleDiv scaleDiv = engine.divideScaleWithExplicitIntervalsAndRange( 0.0, 10.0, 2.0, 1.0, -2.0, 12.0 );
|
||||||
|
|
||||||
|
EXPECT_DOUBLE_EQ( scaleDiv.lowerBound(), -2.0 );
|
||||||
|
EXPECT_DOUBLE_EQ( scaleDiv.upperBound(), 12.0 );
|
||||||
|
|
||||||
|
const QList<double>& majorTicks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
|
||||||
|
EXPECT_EQ( majorTicks.size(), 6 ); // 0, 2, 4, 6, 8, 10
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
TEST( RiuQwtLinearScaleEngine, DivideScaleWithExplicitIntervalsAndRange_ZeroStepIntervals )
|
||||||
|
{
|
||||||
|
RiuQwtLinearScaleEngine engine;
|
||||||
|
|
||||||
|
// Both step intervals zero — no ticks should be built
|
||||||
|
QwtScaleDiv scaleDiv = engine.divideScaleWithExplicitIntervalsAndRange( 0.0, 10.0, 0.0, 0.0, 0.0, 10.0 );
|
||||||
|
|
||||||
|
const QList<double>& majorTicks = scaleDiv.ticks( QwtScaleDiv::MajorTick );
|
||||||
|
EXPECT_TRUE( majorTicks.isEmpty() );
|
||||||
|
|
||||||
|
const QList<double>& minorTicks = scaleDiv.ticks( QwtScaleDiv::MinorTick );
|
||||||
|
EXPECT_TRUE( minorTicks.isEmpty() );
|
||||||
|
}
|
||||||
@@ -27,8 +27,21 @@ QwtScaleDiv RiuQwtLinearScaleEngine::divideScaleWithExplicitIntervals( double x1
|
|||||||
{
|
{
|
||||||
QwtInterval interval( x1, x2 );
|
QwtInterval interval( x1, x2 );
|
||||||
QwtInterval roundedInterval = align( interval, majorStepInterval );
|
QwtInterval roundedInterval = align( interval, majorStepInterval );
|
||||||
QList<double> majorTicks = buildMajorTicks( roundedInterval, majorStepInterval );
|
QList<double> majorTicks;
|
||||||
QList<double> minorTicks = buildMajorTicks( roundedInterval, minorStepInterval );
|
|
||||||
|
// Only build major ticks if the interval is non-zero to avoid division by zero
|
||||||
|
if ( majorStepInterval > 0.0 )
|
||||||
|
{
|
||||||
|
majorTicks = buildMajorTicks( roundedInterval, majorStepInterval );
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<double> minorTicks;
|
||||||
|
|
||||||
|
// Only build minor ticks if the interval is non-zero to avoid division by zero
|
||||||
|
if ( minorStepInterval > 0.0 )
|
||||||
|
{
|
||||||
|
minorTicks = buildMajorTicks( roundedInterval, minorStepInterval );
|
||||||
|
}
|
||||||
|
|
||||||
return QwtScaleDiv( x1, x2, minorTicks, minorTicks, majorTicks );
|
return QwtScaleDiv( x1, x2, minorTicks, minorTicks, majorTicks );
|
||||||
}
|
}
|
||||||
@@ -44,8 +57,21 @@ QwtScaleDiv RiuQwtLinearScaleEngine::divideScaleWithExplicitIntervalsAndRange( d
|
|||||||
double rangeEnd )
|
double rangeEnd )
|
||||||
{
|
{
|
||||||
QwtInterval tickInterval( tickStart, tickEnd );
|
QwtInterval tickInterval( tickStart, tickEnd );
|
||||||
QList<double> majorTicks = buildMajorTicks( tickInterval, majorStepInterval );
|
QList<double> majorTicks;
|
||||||
QList<double> minorTicks = buildMajorTicks( tickInterval, minorStepInterval );
|
|
||||||
|
// Only build major ticks if the interval is non-zero to avoid division by zero
|
||||||
|
if ( majorStepInterval > 0.0 )
|
||||||
|
{
|
||||||
|
majorTicks = buildMajorTicks( tickInterval, majorStepInterval );
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<double> minorTicks;
|
||||||
|
|
||||||
|
// Only build minor ticks if the interval is non-zero to avoid division by zero
|
||||||
|
if ( minorStepInterval > 0.0 )
|
||||||
|
{
|
||||||
|
minorTicks = buildMajorTicks( tickInterval, minorStepInterval );
|
||||||
|
}
|
||||||
|
|
||||||
return QwtScaleDiv( rangeStart, rangeEnd, minorTicks, minorTicks, majorTicks );
|
return QwtScaleDiv( rangeStart, rangeEnd, minorTicks, minorTicks, majorTicks );
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user