Combine test files, reduce number of targets

In an effort to reduce the numbers of targets built, and consequently
the repeated work and overhead of compiling boost test, a series of
test programs are combined to larger modules.

Every target typically has a constant cost of 3-6s, depending on the
computer, just for the make to set up dependencies and for the compiler
to parse and compile the testing framework and other dependencies. Each
set of tests typically add very little, so significant savings are
achieved by merging targets.

When tested on a 2015 i5m laptop, this reduced serial, single-core
compile time from ~14m45s to ~11m15s.
This commit is contained in:
Jørgen Kvalsvik
2017-05-24 14:48:27 +02:00
parent e884b0664c
commit 477fa5a988
65 changed files with 4292 additions and 6027 deletions

View File

@@ -26,13 +26,13 @@
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/Parser/ParserItem.hpp>
#include <opm/parser/eclipse/Parser/ParserRecord.hpp>
#include <opm/parser/eclipse/RawDeck/RawRecord.hpp>
using namespace Opm;
BOOST_AUTO_TEST_CASE(Initialize) {
BOOST_REQUIRE_NO_THROW(Deck deck);
}
BOOST_AUTO_TEST_CASE(Initializer_lists) {
DeckKeyword foo( "foo" );
DeckKeyword bar( "bar" );
@@ -169,3 +169,393 @@ BOOST_AUTO_TEST_CASE(set_and_get_data_file) {
BOOST_CHECK_EQUAL(file, deck.getDataFile());
}
BOOST_AUTO_TEST_CASE(DummyDefaultsString) {
DeckItem deckStringItem("TEST", std::string() );
BOOST_CHECK_EQUAL(deckStringItem.size(), 0);
deckStringItem.push_backDummyDefault();
BOOST_CHECK_EQUAL(deckStringItem.size(), 0);
BOOST_CHECK_EQUAL(true, deckStringItem.defaultApplied(0));
BOOST_CHECK_THROW(deckStringItem.get< std::string >(0), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(GetStringAtIndex_NoData_ExceptionThrown) {
DeckItem deckStringItem( "TEST", std::string() );
BOOST_CHECK_THROW(deckStringItem.get< std::string >(0), std::out_of_range);
deckStringItem.push_back("SA");
BOOST_CHECK_THROW(deckStringItem.get< std::string >(1), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(size_variouspushes_sizecorrect) {
DeckItem deckStringItem( "TEST", std::string() );
BOOST_CHECK_EQUAL(0U, deckStringItem.size());
deckStringItem.push_back("WELL-3");
BOOST_CHECK_EQUAL(1U, deckStringItem.size());
deckStringItem.push_back("WELL-4");
deckStringItem.push_back("WELL-5");
BOOST_CHECK_EQUAL(3U, deckStringItem.size());
}
BOOST_AUTO_TEST_CASE(DefaultNotAppliedString) {
DeckItem deckStringItem( "TEST", std::string() );
BOOST_CHECK( deckStringItem.size() == 0 );
deckStringItem.push_back( "FOO") ;
BOOST_CHECK( deckStringItem.size() == 1 );
BOOST_CHECK( deckStringItem.get< std::string >(0) == "FOO" );
BOOST_CHECK( !deckStringItem.defaultApplied(0) );
}
BOOST_AUTO_TEST_CASE(DefaultAppliedString) {
DeckItem deckStringItem( "TEST", std::string() );
BOOST_CHECK( deckStringItem.size() == 0 );
deckStringItem.push_backDefault( "FOO" );
BOOST_CHECK( deckStringItem.size() == 1 );
BOOST_CHECK( deckStringItem.get< std::string >(0) == "FOO" );
BOOST_CHECK( deckStringItem.defaultApplied(0) );
}
BOOST_AUTO_TEST_CASE(PushBackMultipleString) {
DeckItem stringItem( "TEST", std::string() );
stringItem.push_back("Heisann ", 100U );
BOOST_CHECK_EQUAL( 100U , stringItem.size() );
for (size_t i=0; i < 100; i++)
BOOST_CHECK_EQUAL("Heisann " , stringItem.get< std::string >(i));
}
BOOST_AUTO_TEST_CASE(GetDoubleAtIndex_NoData_ExceptionThrown) {
DeckItem deckDoubleItem( "TEST", double() );
BOOST_CHECK_THROW(deckDoubleItem.get< double >(0), std::out_of_range);
deckDoubleItem.push_back(1.89);
BOOST_CHECK_THROW(deckDoubleItem.get< double >(1), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(sizeDouble_correct) {
DeckItem deckDoubleItem( "TEST", double() );
BOOST_CHECK_EQUAL( 0U , deckDoubleItem.size());
deckDoubleItem.push_back( 100.0 );
BOOST_CHECK_EQUAL( 1U , deckDoubleItem.size());
deckDoubleItem.push_back( 100.0 );
deckDoubleItem.push_back( 100.0 );
BOOST_CHECK_EQUAL( 3U , deckDoubleItem.size());
}
BOOST_AUTO_TEST_CASE(SetInDeck) {
DeckItem deckDoubleItem( "TEST", double() );
BOOST_CHECK( deckDoubleItem.size() == 0 );
deckDoubleItem.push_backDefault( 1.0 );
BOOST_CHECK( deckDoubleItem.size() == 1 );
BOOST_CHECK_EQUAL( true , deckDoubleItem.defaultApplied(0) );
deckDoubleItem.push_back( 10.0 );
BOOST_CHECK( deckDoubleItem.size() == 2 );
BOOST_CHECK_EQUAL( false , deckDoubleItem.defaultApplied(1) );
deckDoubleItem.push_backDefault( 1.0 );
BOOST_CHECK( deckDoubleItem.size() == 3 );
BOOST_CHECK_EQUAL( true , deckDoubleItem.defaultApplied(2) );
}
BOOST_AUTO_TEST_CASE(DummyDefaultsDouble) {
DeckItem deckDoubleItem( "TEST", double() );
BOOST_CHECK_EQUAL(deckDoubleItem.size(), 0);
deckDoubleItem.push_backDummyDefault();
BOOST_CHECK_EQUAL(deckDoubleItem.size(), 0);
BOOST_CHECK_EQUAL(true, deckDoubleItem.defaultApplied(0));
BOOST_CHECK_THROW(deckDoubleItem.get< double >(0), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(PushBackMultipleDouble) {
DeckItem item( "HEI", double() );
item.push_back(10.22 , 100 );
BOOST_CHECK_EQUAL( 100U , item.size() );
for (size_t i=0; i < 100; i++)
BOOST_CHECK_EQUAL(10.22 , item.get< double >(i));
}
BOOST_AUTO_TEST_CASE(PushBackDimension) {
DeckItem item( "HEI", double() );
Dimension activeDimension{ "Length" , 100 };
Dimension defaultDimension{ "Length" , 10 };
item.push_back(1.234);
item.push_backDimension( activeDimension , defaultDimension);
item.push_backDefault(5.678);
item.push_backDimension( activeDimension , defaultDimension);
}
BOOST_AUTO_TEST_CASE(PushBackDimensionInvalidType) {
DeckItem item( "HEI", int() );
Dimension dim{ "Length" , 100 };
BOOST_CHECK_THROW( item.push_backDimension( dim , dim ) , std::logic_error );
}
BOOST_AUTO_TEST_CASE(GetSIWithoutDimensionThrows) {
DeckItem item( "HEI", double() );
item.push_back(10.22 , 100 );
BOOST_CHECK_THROW( item.getSIDouble(0) , std::invalid_argument );
BOOST_CHECK_THROW( item.getSIDoubleData() , std::invalid_argument );
}
BOOST_AUTO_TEST_CASE(GetSISingleDimensionCorrect) {
DeckItem item( "HEI", double() );
Dimension dim{ "Length" , 100 };
item.push_back(1.0 , 100 );
item.push_backDimension( dim , dim );
BOOST_CHECK_EQUAL( 1.0 , item.get< double >(0) );
BOOST_CHECK_EQUAL( 100 , item.getSIDouble(0) );
}
BOOST_AUTO_TEST_CASE(GetSISingleDefault) {
DeckItem item( "HEI", double() );
Dimension dim{ "Length" , 1 };
Dimension defaultDim{ "Length" , 100 };
item.push_backDefault( 1.0 );
item.push_backDimension( dim , defaultDim );
BOOST_CHECK_EQUAL( 1 , item.get< double >(0) );
BOOST_CHECK_EQUAL( 100 , item.getSIDouble(0) );
}
BOOST_AUTO_TEST_CASE(GetSIMultipleDim) {
DeckItem item( "HEI", double() );
Dimension dim1{ "Length" , 2 };
Dimension dim2{ "Length" , 4 };
Dimension dim3{ "Length" , 8 };
Dimension dim4{ "Length" ,16 };
Dimension defaultDim{ "Length" , 100 };
item.push_back( 1.0, 16 );
item.push_backDimension( dim1 , defaultDim );
item.push_backDimension( dim2 , defaultDim );
item.push_backDimension( dim3 , defaultDim );
item.push_backDimension( dim4 , defaultDim );
for (size_t i=0; i < 16; i+= 4) {
BOOST_CHECK_EQUAL( 2 , item.getSIDouble(i) );
BOOST_CHECK_EQUAL( 4 , item.getSIDouble(i+ 1) );
BOOST_CHECK_EQUAL( 8 , item.getSIDouble(i+2) );
BOOST_CHECK_EQUAL(16 , item.getSIDouble(i+3) );
}
}
BOOST_AUTO_TEST_CASE(HasValue) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(0) );
deckIntItem.push_back(1);
BOOST_CHECK_EQUAL( true , deckIntItem.hasValue(0) );
BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(1) );
}
BOOST_AUTO_TEST_CASE(DummyDefaultsInt) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK_EQUAL(deckIntItem.size(), 0);
deckIntItem.push_backDummyDefault();
BOOST_CHECK_EQUAL(deckIntItem.size(), 0);
BOOST_CHECK_EQUAL(true, deckIntItem.defaultApplied(0));
BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(0));
BOOST_CHECK_EQUAL( false , deckIntItem.hasValue(1));
BOOST_CHECK_THROW(deckIntItem.get< int >(0), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(GetIntAtIndex_NoData_ExceptionThrown) {
DeckItem deckIntItem( "TEST", int() );
deckIntItem.push_back(100);
BOOST_CHECK(deckIntItem.get< int >(0) == 100);
BOOST_CHECK_THROW(deckIntItem.get< int >(1), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(InitializeDefaultApplied) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK( deckIntItem.size() == 0 );
}
BOOST_AUTO_TEST_CASE(size_correct) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK_EQUAL( 0U , deckIntItem.size());
deckIntItem.push_back( 100 );
BOOST_CHECK_EQUAL( 1U , deckIntItem.size());
deckIntItem.push_back( 100 );
deckIntItem.push_back( 100 );
BOOST_CHECK_EQUAL( 3U , deckIntItem.size());
}
BOOST_AUTO_TEST_CASE(DefaultNotAppliedInt) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK( deckIntItem.size() == 0 );
deckIntItem.push_back( 100 );
BOOST_CHECK( deckIntItem.size() == 1 );
BOOST_CHECK( deckIntItem.get< int >(0) == 100 );
BOOST_CHECK( !deckIntItem.defaultApplied(0) );
BOOST_CHECK_THROW( deckIntItem.defaultApplied(1), std::out_of_range );
BOOST_CHECK_THROW( deckIntItem.get< int >(1), std::out_of_range );
}
BOOST_AUTO_TEST_CASE(UseDefault) {
DeckItem deckIntItem( "TEST", int() );
deckIntItem.push_backDefault( 100 );
BOOST_CHECK( deckIntItem.defaultApplied(0) );
BOOST_CHECK( deckIntItem.get< int >(0) == 100 );
BOOST_CHECK_THROW( deckIntItem.defaultApplied(1), std::out_of_range );
BOOST_CHECK_THROW( deckIntItem.get< int >(1), std::out_of_range );
}
BOOST_AUTO_TEST_CASE(DefaultAppliedInt) {
DeckItem deckIntItem( "TEST", int() );
BOOST_CHECK( deckIntItem.size() == 0 );
deckIntItem.push_backDefault( 100 );
BOOST_CHECK( deckIntItem.size() == 1 );
BOOST_CHECK( deckIntItem.get< int >(0) == 100 );
BOOST_CHECK( deckIntItem.defaultApplied(0) );
deckIntItem.push_back( 10 );
BOOST_CHECK_EQUAL( false, deckIntItem.defaultApplied(1) );
deckIntItem.push_backDefault( 1 );
BOOST_CHECK_EQUAL( true , deckIntItem.defaultApplied(2) );
BOOST_CHECK_EQUAL( 3 , deckIntItem.size() );
}
BOOST_AUTO_TEST_CASE(PushBackMultipleInt) {
DeckItem item( "HEI", int() );
item.push_back(10 , 100U );
BOOST_CHECK_EQUAL( 100U , item.size() );
for (size_t i=0; i < 100; i++)
BOOST_CHECK_EQUAL(10 , item.get< int >(i));
}
BOOST_AUTO_TEST_CASE(size_defaultConstructor_sizezero) {
DeckRecord deckRecord;
BOOST_CHECK_EQUAL(0U, deckRecord.size());
}
BOOST_AUTO_TEST_CASE(addItem_singleItem_sizeone) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
BOOST_CHECK_EQUAL(1U, deckRecord.size());
}
BOOST_AUTO_TEST_CASE(addItem_multipleItems_sizecorrect) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
deckRecord.addItem( DeckItem { "TEST2", int() } );
deckRecord.addItem( DeckItem { "TEST3", int() } );
BOOST_CHECK_EQUAL(3U, deckRecord.size());
}
BOOST_AUTO_TEST_CASE(addItem_differentItemsSameName_throws) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
BOOST_CHECK_THROW( deckRecord.addItem( DeckItem { "TEST", int() } ), std::invalid_argument );
std::vector< DeckItem > items = { DeckItem { "TEST", int() }, DeckItem { "TEST" , int() } };
BOOST_CHECK_THROW( DeckRecord( std::move( items ) ), std::invalid_argument );
}
BOOST_AUTO_TEST_CASE(get_byIndex_returnsItem) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
BOOST_CHECK_NO_THROW(deckRecord.getItem(0U));
}
BOOST_AUTO_TEST_CASE(get_indexoutofbounds_throws) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
BOOST_CHECK_THROW(deckRecord.getItem(1), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(get_byName_returnsItem) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
deckRecord.getItem("TEST");
}
BOOST_AUTO_TEST_CASE(get_byNameNonExisting_throws) {
DeckRecord deckRecord;
deckRecord.addItem( DeckItem { "TEST", int() } );
BOOST_CHECK_THROW(deckRecord.getItem("INVALID"), std::invalid_argument);
}
BOOST_AUTO_TEST_CASE(StringsWithSpaceOK) {
ParserItem itemString("STRINGITEM1", "" );
ParserRecord record1;
RawRecord rawRecord( " ' VALUE ' " );
ParseContext parseContext;
MessageContainer msgContainer;
record1.addItem( itemString );
const auto deckRecord = record1.parse( parseContext , msgContainer, rawRecord );
BOOST_CHECK_EQUAL(" VALUE " , deckRecord.getItem(0).get< std::string >(0));
}
BOOST_AUTO_TEST_CASE(DataKeyword) {
DeckKeyword kw("KW");
BOOST_CHECK_EQUAL( false , kw.isDataKeyword());
kw.setDataKeyword( );
BOOST_CHECK_EQUAL( true , kw.isDataKeyword());
kw.setDataKeyword( false );
BOOST_CHECK_EQUAL( false , kw.isDataKeyword());
kw.setDataKeyword( true );
BOOST_CHECK_EQUAL( true , kw.isDataKeyword());
}
BOOST_AUTO_TEST_CASE(name_nameSetInConstructor_nameReturned) {
DeckKeyword deckKeyword( "KW" );
BOOST_CHECK_EQUAL("KW", deckKeyword.name());
}
BOOST_AUTO_TEST_CASE(size_noRecords_returnszero) {
DeckKeyword deckKeyword( "KW" );
BOOST_CHECK_EQUAL(0U, deckKeyword.size());
}
BOOST_AUTO_TEST_CASE(addRecord_onerecord_recordadded) {
DeckKeyword deckKeyword( "KW" );
deckKeyword.addRecord( DeckRecord() );
BOOST_CHECK_EQUAL(1U, deckKeyword.size());
for (auto iter = deckKeyword.begin(); iter != deckKeyword.end(); ++iter) {
//
}
}
BOOST_AUTO_TEST_CASE(getRecord_outofrange_exceptionthrown) {
DeckKeyword deckKeyword( "KW" );
deckKeyword.addRecord(DeckRecord());
BOOST_CHECK_THROW(deckKeyword.getRecord(1), std::out_of_range);
}
BOOST_AUTO_TEST_CASE(setUnknown_wasknown_nowunknown) {
DeckKeyword deckKeyword( "KW", false );
BOOST_CHECK(!deckKeyword.isKnown());
}