void testBadIntersect() { Feature a; a.setStart(10); a.setEnd(100); Feature b; b.setStart(200); b.setEnd(300); CPPUNIT_ASSERT_THROW(a.intersect(b), std::invalid_argument); }
void testIntersect() { Feature a; a.setStart(10); a.setEnd(100); a.setAttribute("attr1", "val1"); a.setAttribute("attr2", "val2a"); Feature b; b.setStart(90); b.setEnd(200); a.setAttribute("attr1", "val1"); a.setAttribute("attr2", "val2b"); b.setAttribute("attr3", "val3"); b.setAttribute("attr4", "val4"); Feature c = a.intersect(b); FeatureAttributeMap const& attrs = c.getAttributes(); CPPUNIT_ASSERT_EQUAL((size_t)4, attrs.size()); FeatureAttributeMap::const_iterator attrs_iter = attrs.begin(); FeatureAttributeMap::const_iterator attrs_end = attrs.end(); size_t totalValues = 0; while (attrs_iter != attrs_end) { std::string const& name = attrs_iter->first; FeatureAttributeValues const& values = attrs_iter->second; size_t nValues = values.size(); totalValues += nValues; if (name == "attr1") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); else if (name == "attr2") CPPUNIT_ASSERT_EQUAL((size_t)2, nValues); else if (name == "attr3") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); else if (name == "attr4") CPPUNIT_ASSERT_EQUAL((size_t)1, nValues); ++attrs_iter; } CPPUNIT_ASSERT_EQUAL((size_t)5, totalValues); }