Added check that dimensions are equal in ParserDoubleItem::equal()
This commit is contained in:
@@ -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");
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user