// ContentBlock_t.cxx #include "dataset_base/ContentBlock.h" #include #include "dataset_util/Text.h" #include "dataset_util/XmlElement.h" using std::cout; using std::endl; using dset::ContentBlock; void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } int ContentBlock_t() { msg("Create empty content"); ContentBlock cb0; cout << cb0 << endl; assert( cb0.is_valid() ); assert( cb0.error() == 0 ); assert( cb0.is_empty() ); msg("Create without events"); ContentIdList cids; cids.insert(ContentId("Test1", "key1")); cids.insert(ContentId("Test2", "key2")); cids.insert(ContentId("Test3", "key3")); ContentBlock cb1("NoEventDataset", "no-events", cids); cout << cb1 << endl; assert( cb1.is_valid() ); assert( cb1.dataset_type() == "NoEventDataset" ); assert( cb1.name() == "no-events" ); assert( cb1.content_ids() == cids ); assert( ! cb1.has_events() ); assert( ! cb1.is_empty() ); msg("Create with events"); EventIdList eids; eids.insert(EventIdRange(1001, 9500, 9549)); eids.insert(EventIdRange(1001, 9600, 9649)); ContentBlock cb2("EventDataset", "events", cids, eids); cout << cb2 << endl; assert( cb2.dataset_type() == "EventDataset" ); assert( cb2.name() == "events" ); assert( cb2.content_ids() == cids ); assert( cb2.has_events() ); assert( cb2.has_explicit_events() ); assert( cb2.event_ids() == eids ); assert( cb2.event_count() == eids.size() ); assert( ! cb2.is_empty() ); msg("Copy"); ContentBlock cb3 = cb2; cout << cb3 << endl; assert( cb3 == cb2 ); assert( cb3 != cb1 ); msg("Write XML"); const XmlElement* pele = cb2.xml(); assert( pele != 0 ); assert( pele->is_valid() ); cout << * pele << endl; msg("Create from XML"); ContentBlock cb4(*pele); cout << cb4 << endl; assert( cb4 == cb2 ); msg("Write DTD"); Text dtd = ContentBlock::dtd(); cout << dtd << endl; assert( dtd.size() ); msg("Create good merge content without events"); ContentIdList cids2; cids2.insert(ContentId("Test4", "key4")); cids2.insert(ContentId("Test5", "key5")); cids2.insert(ContentId("Test6", "key6")); ContentBlock cb5("NoEventDataset", "no-events", cids2); cout << cb5 << endl; msg("Check valid merge without events"); assert( cb1.check_merge(cb5) == 0 ); ContentBlock cb6 = cb1; assert( cb6.merge(cb5) == 0 ); cout << cb6 << endl; assert( cb6.is_valid() ); assert( cb6.error() == 0 ); assert( cb6.dataset_type() == "NoEventDataset" ); assert( cb6.name() == "no-events" ); assert( ! cb6.is_empty() ); assert( cb6.content_ids().size() == 6 ); assert( cb6 != cb1 ); msg("Create bad merge content without events"); ContentIdList cids3; cids3.insert(ContentId("Test4", "key4")); cids3.insert(ContentId("Test2", "key2")); cids3.insert(ContentId("Test6", "key6")); ContentBlock cb7("NoEventDataset", "no-events", cids3); cout << cb7 << endl; msg("Check invalid merge without events"); assert( cb1.check_merge(cb7) ); ContentBlock cb8 = cb1; assert( cb8.merge(cb7) ); cout << cb8 << endl; assert( ! cb8.is_valid() ); assert( cb8 == cb1 ); msg("Create good merge content with events"); ContentBlock cb9("EventDataset", "events", cids2, eids); cout << cb9 << endl; msg("Check valid content merge with events"); assert( cb2.check_merge(cb9) == 0 ); ContentBlock cb10 = cb2; assert( cb10.merge(cb9) == 0 ); cout << cb10 << endl; assert( cb10.dataset_type() == "EventDataset" ); assert( cb10.name() == "events" ); assert( ! cb10.is_empty() ); assert( cb10.content_ids().size() == 6 ); assert( cb10.event_ids() == eids ); msg("Check valid event merge with events"); EventIdList eids2; eids2.insert(EventIdRange(1001, 9800, 9899)); ContentBlock cb11("EventDataset", "events", cids, eids2); cout << cb11 << endl; assert( cb2.is_valid() ); assert( cb2.check_merge(cb11) == 0 ); ContentBlock cb12 = cb2; assert( cb12.merge(cb11) == 0 ); cout << cb12 << endl; assert( cb12.dataset_type() == "EventDataset" ); assert( cb12.name() == "events" ); assert( ! cb12.is_empty() ); assert( cb12.content_ids().size() == 3 ); assert( cb12.event_ids().size() == 200 ); msg("Check # XML ranges"); assert( ContentBlock::maximum_xml_ranges() == 10000 ); ContentBlock::set_maximum_xml_ranges(1); assert( ContentBlock::maximum_xml_ranges() == 1 ); msg("Write XML w/o events"); const XmlElement* pele2 = cb2.xml(); assert( pele2 != 0 ); assert( pele2->is_valid() ); cout << *pele2 << endl; msg("Create from XML"); ContentBlock cb13(*pele2); cout << cb13 << endl; assert( cb13.has_events() ); assert( ! cb13.has_explicit_events() ); assert( cb13.content_ids() == cb2.content_ids() ); assert( cb13.event_count() == cb2.event_count() ); return 0; } #ifdef CTEST_MAIN int main() { return ContentBlock_t(); } #endif