mirror of
https://github.com/OPM/ResInsight.git
synced 2026-08-27 05:37:21 -05:00
154 lines
6.1 KiB
C++
154 lines
6.1 KiB
C++
#include "gtest/gtest.h"
|
|
|
|
#include "RiaTestDataDirectory.h"
|
|
|
|
#include "RifElementPropertyReader.h"
|
|
#include "RifElementPropertyTableReader.h"
|
|
#include "RifFileParseTools.h"
|
|
|
|
#include <QString>
|
|
#include <numeric>
|
|
|
|
static const QString ELEM_PROP_TEST_DATA_DIRECTORY = QString( "%1/RifElementPropertyTableReader/" ).arg( TEST_DATA_DIR );
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RicElementPropertyTableReaderTest, BasicUsage )
|
|
{
|
|
RifElementPropertyMetadata metadata =
|
|
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE.inp" );
|
|
|
|
RifElementPropertyTable table;
|
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
|
|
|
EXPECT_TRUE( table.hasData );
|
|
|
|
EXPECT_EQ( 2u, metadata.dataColumns.size() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[0].toStdString().c_str() );
|
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[1].toStdString().c_str() );
|
|
|
|
EXPECT_EQ( 2u, table.data.size() );
|
|
EXPECT_EQ( 4320u, table.elementIds.size() );
|
|
EXPECT_EQ( 4320u, table.data[0].size() );
|
|
EXPECT_EQ( 4320u, table.data[1].size() );
|
|
|
|
EXPECT_FLOAT_EQ( 11198814808.2538f, table.data[0].front() );
|
|
EXPECT_FLOAT_EQ( 13250853676.3636f, table.data[0].back() );
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RicElementPropertyTableReaderTest, ParseFailedForTooManyColumns )
|
|
{
|
|
try
|
|
{
|
|
RifElementPropertyMetadata metadata =
|
|
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE_error_too_many_columns.inp" );
|
|
|
|
RifElementPropertyTable table;
|
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
|
|
|
EXPECT_TRUE( false );
|
|
}
|
|
catch ( FileParseException e )
|
|
{
|
|
EXPECT_TRUE( e.message.startsWith( "Number of columns mismatch" ) );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RicElementPropertyTableReaderTest, ParseFailedForTooFewColumns )
|
|
{
|
|
try
|
|
{
|
|
RifElementPropertyMetadata metadata =
|
|
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE_error_too_few_columns.inp" );
|
|
|
|
RifElementPropertyTable table;
|
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
|
|
|
EXPECT_TRUE( false );
|
|
}
|
|
catch ( FileParseException e )
|
|
{
|
|
EXPECT_TRUE( e.message.startsWith( "Number of columns mismatch" ) );
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RicElementPropertyTableReaderTest, MoreThanEightColumns )
|
|
{
|
|
RifElementPropertyMetadata metadata =
|
|
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE_morethan8columns.inp" );
|
|
|
|
RifElementPropertyTable table;
|
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
|
|
|
EXPECT_TRUE( table.hasData );
|
|
|
|
EXPECT_EQ( 9u, metadata.dataColumns.size() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[0].toStdString().c_str() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[1].toStdString().c_str() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[2].toStdString().c_str() );
|
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[3].toStdString().c_str() );
|
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[4].toStdString().c_str() );
|
|
EXPECT_STREQ( "RATIO", metadata.dataColumns[5].toStdString().c_str() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[6].toStdString().c_str() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[7].toStdString().c_str() );
|
|
EXPECT_STREQ( "MODULUS", metadata.dataColumns[8].toStdString().c_str() );
|
|
|
|
EXPECT_EQ( 9u, table.data.size() );
|
|
EXPECT_EQ( 8u, table.elementIds.size() );
|
|
EXPECT_EQ( 8u, table.data[0].size() );
|
|
EXPECT_EQ( 8u, table.data[1].size() );
|
|
EXPECT_EQ( 8u, table.data[2].size() );
|
|
EXPECT_EQ( 8u, table.data[3].size() );
|
|
EXPECT_EQ( 8u, table.data[4].size() );
|
|
EXPECT_EQ( 8u, table.data[5].size() );
|
|
EXPECT_EQ( 8u, table.data[6].size() );
|
|
EXPECT_EQ( 8u, table.data[7].size() );
|
|
EXPECT_EQ( 8u, table.data[8].size() );
|
|
|
|
EXPECT_FLOAT_EQ( 4998669605.36f, table.data[0].front() );
|
|
EXPECT_FLOAT_EQ( 4998444377.89f, table.data[0].back() );
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
///
|
|
//--------------------------------------------------------------------------------------------------
|
|
TEST( RicElementPropertyTableReaderTest, ReadAllElementPropertiesInFileContainingField )
|
|
{
|
|
RifElementPropertyMetadata metadata =
|
|
RifElementPropertyTableReader::readMetadata( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE.inp" );
|
|
|
|
RifElementPropertyTable table;
|
|
RifElementPropertyTableReader::readData( &metadata, &table );
|
|
|
|
RifElementPropertyReader reader( table.elementIds );
|
|
reader.addFile( ( ELEM_PROP_TEST_DATA_DIRECTORY + "ELASTIC_TABLE.inp" ).toStdString() );
|
|
|
|
auto result = reader.readAllElementPropertiesInFileContainingField( "MODULUS" );
|
|
|
|
EXPECT_EQ( 2u, result.size() );
|
|
EXPECT_EQ( 1u, result.count( "MODULUS" ) );
|
|
EXPECT_EQ( 1u, result.count( "RATIO" ) );
|
|
|
|
const auto& modulusData = result.at( "MODULUS" );
|
|
EXPECT_EQ( 4320u, modulusData.size() );
|
|
|
|
const float paToGPa = 0.000000001f;
|
|
EXPECT_FLOAT_EQ( 11198814808.2538f * paToGPa, modulusData.front() );
|
|
EXPECT_FLOAT_EQ( 13250853676.3636f * paToGPa, modulusData.back() );
|
|
|
|
const auto& ratioData = result.at( "RATIO" );
|
|
EXPECT_EQ( 4320u, ratioData.size() );
|
|
EXPECT_FLOAT_EQ( 0.19041f, ratioData.front() );
|
|
EXPECT_FLOAT_EQ( 0.25f, ratioData.back() );
|
|
}
|