Added check that dimensions are equal in ParserDoubleItem::equal()

This commit is contained in:
Joakim Hove
2013-12-11 13:25:42 +01:00
parent ac740276f0
commit 7f213e4e9f
3 changed files with 54 additions and 2 deletions

View File

@@ -81,12 +81,26 @@ namespace Opm
{
// cast to a pointer to avoid bad_cast exception
const ParserDoubleItem* rhs = dynamic_cast<const ParserDoubleItem*>(&other);
if (rhs && ParserItem::equal(other) && (getDefault() == rhs->getDefault()))
return true;
if (rhs && ParserItem::equal(other) && (getDefault() == rhs->getDefault())) {
return equalDimensions( other );
}
else
return false;
}
bool ParserDoubleItem::equalDimensions(const ParserItem& other) const {
bool equal=false;
if (other.numDimensions() == numDimensions()) {
equal = true;
for (size_t idim=0; idim < numDimensions(); idim++) {
if (other.getDimension(idim) != getDimension(idim))
equal = false;
}
}
return equal;
}
void ParserDoubleItem::push_backDimension(const std::string& dimension) {
if ((sizeType() == SINGLE) && (m_dimensions.size() > 0))
throw std::invalid_argument("Internal error - can not add more than one dimension to a Item os size 1");

View File

@@ -44,6 +44,7 @@ namespace Opm {
bool hasDimension() const;
void push_backDimension(const std::string& dimension);
const std::string& getDimension(size_t index) const;
bool equalDimensions(const ParserItem& other) const;
DeckItemConstPtr scan(RawRecordPtr rawRecord) const;
bool equal(const ParserItem& other) const;

View File

@@ -157,6 +157,43 @@ BOOST_AUTO_TEST_CASE(DoubleItem_Equal_ReturnsTrue) {
}
BOOST_AUTO_TEST_CASE(DoubleItem_DimEqual_ReturnsTrue) {
ParserItemSizeEnum sizeType = ALL;
ParserDoubleItem item1("ITEM1", sizeType);
ParserDoubleItem item2("ITEM1", sizeType);
item1.push_backDimension("L*L");
item2.push_backDimension("L*L");
BOOST_CHECK( item1.equal( item2 ));
}
BOOST_AUTO_TEST_CASE(DoubleItem_DimDifferent_ReturnsFalse) {
ParserItemSizeEnum sizeType = ALL;
ParserDoubleItem item1("ITEM1", sizeType); // Dim: []
ParserDoubleItem item2("ITEM1", sizeType); // Dim: [L]
ParserDoubleItem item3("ITEM1", sizeType); // Dim: [L ,L]
ParserDoubleItem item4("ITEM1", sizeType); // Dim: [t]
item2.push_backDimension("L");
item3.push_backDimension("L");
item3.push_backDimension("L");
item4.push_backDimension("t");
BOOST_CHECK_EQUAL(false , item1.equal( item2 ));
BOOST_CHECK_EQUAL(false , item2.equal( item3 ));
BOOST_CHECK_EQUAL(false , item2.equal( item1 ));
BOOST_CHECK_EQUAL(false , item2.equal( item4 ));
BOOST_CHECK_EQUAL(false , item1.equal( item3 ));
BOOST_CHECK_EQUAL(false , item3.equal( item1 ));
BOOST_CHECK_EQUAL(false , item4.equal( item2 ));
}
BOOST_AUTO_TEST_CASE(DoubleItem_Different_ReturnsFalse) {
ParserDoubleItem item1("ITEM1", ALL);
ParserDoubleItem item2("ITEM2", ALL);