Files
ResInsight/ApplicationLibCode/UnitTests/RimMockSummaryCase.h
T
Magne Sjaastad 135ed69369 #14559 Summary Calculator: Update dependent data when the last calculation is deleted
deleteCalculation() removes the calculation before rebuildCaseMetaData() is called, and updateDataDependingOnCalculations() returned early for an empty collection. The addresses created by the last calculation were then left behind in the readers until the next refresh or a reload of the project.

Perform one more update after the last calculation is deleted, and keep the early return for the case where no calculations have been present.
2026-08-21 15:54:28 +02:00

86 lines
3.1 KiB
C++

#pragma once
#include "RifSummaryReaderInterface.h"
#include "RigCaseRealizationParameters.h"
#include "RimSummaryCase.h"
#include <map>
#include <memory>
#include <string>
#include <vector>
class RimMockSummaryCase : public RimSummaryCase, public RifSummaryReaderInterface
{
public:
void setName( const QString& name ) { m_name = name; }
void addVector( const RifEclipseSummaryAddress& address,
const std::vector<time_t>& timeSteps,
const std::vector<double>& values,
const std::string& unit = "" )
{
m_data[address] = { timeSteps, values, unit };
m_allResultAddresses.insert( address );
}
// RimSummaryCase overrides
void createSummaryReaderInterface() override {}
RifSummaryReaderInterface* summaryReader() override { return this; }
QString caseName() const override { return m_name; }
// RifSummaryReaderInterface overrides
std::vector<time_t> timeSteps( const RifEclipseSummaryAddress& resultAddress ) const override
{
auto it = m_data.find( resultAddress );
if ( it != m_data.end() ) return it->second.timeSteps;
return {};
}
std::pair<bool, std::vector<double>> values( const RifEclipseSummaryAddress& resultAddress ) const override
{
auto it = m_data.find( resultAddress );
if ( it != m_data.end() ) return { true, it->second.values };
return { false, {} };
}
std::string unitName( const RifEclipseSummaryAddress& resultAddress ) const override
{
auto it = m_data.find( resultAddress );
if ( it != m_data.end() ) return it->second.unit;
return {};
}
RiaDefines::EclipseUnitSystem unitSystem() const override { return RiaDefines::EclipseUnitSystem::UNITS_METRIC; }
size_t keywordCount() const override { return m_allResultAddresses.size(); }
void refreshCalculatedAddresses() override { m_refreshCalculatedAddressesCount++; }
int refreshCalculatedAddressesCount() const { return m_refreshCalculatedAddressesCount; }
private:
struct VectorData
{
std::vector<time_t> timeSteps;
std::vector<double> values;
std::string unit;
};
QString m_name = "MockCase";
std::map<RifEclipseSummaryAddress, VectorData> m_data;
int m_refreshCalculatedAddressesCount = 0;
};
//--------------------------------------------------------------------------------------------------
/// A mock case carrying the realization number a delta ensemble matches its source cases on.
//--------------------------------------------------------------------------------------------------
inline RimSummaryCase* createMockCase( int realizationNumber )
{
auto* summaryCase = new RimMockSummaryCase();
auto parameters = std::make_shared<RigCaseRealizationParameters>();
parameters->setRealizationNumber( realizationNumber );
summaryCase->setCaseRealizationParameters( parameters );
return summaryCase;
}