// DatasetId_t.cxx #include "dataset_id/DatasetId.h" #include #include #include #include #include "dataset_util/XmlElement.h" #include "dataset_util/DtdRegistry.h" using std::string; using std::cout; using std::endl; void msg(const char* msg) { cout << "----- "; cout << msg; cout << " -----" << endl; } int DatasetId_t() { msg("Check index size"); assert( sizeof(DatasetId::Index) == 4 ); msg("convert index"); { DatasetId::Index idx(12345678); { string sidx = index_to_string(idx); cout << "(" << sidx << ")" << endl; assert( sidx.size() == 8 ); } { string sidx = index_to_string(idx, '0'); cout << "(" << sidx << ")" << endl; assert( sidx.size() == 10 ); } { string sidx = index_to_string(idx, '-'); cout << "(" << sidx << ")" << endl; assert( sidx.size() == 10 ); } } msg("Default constructor."); { DatasetId id; cout << id << endl; assert( ! id.is_valid() ); } msg("Create and destroy."); { DatasetId id(11,222); cout << id << endl; assert( id.is_valid() ); assert( id.collection() == 11 ); assert( id.entry() == 222 ); } msg("Convert to string and back"); { DatasetId id(123, 369); cout << id << endl; msg("... without pad"); string snopad = id.to_string(); cout << snopad << endl; cout << snopad.size() << endl; assert( snopad.size() == 7 ); { UniqueId id2(snopad); cout << id2 << endl; assert( id2 == id ); } msg("... with pad"); string spad = id.to_string(true); cout << spad << endl; cout << spad.size() << endl; assert( spad.size() == 21 ); { UniqueId id2(spad); cout << id2 << endl; assert( id2 == id ); } } msg("Ordering."); assert( DatasetId(10,10) < DatasetId(12,8) ); assert( DatasetId(10,10) < DatasetId(10,12) ); msg("Next."); { DatasetId bad = DatasetId(888,0).next(); assert( ! bad.is_valid() ); DatasetId good = DatasetId(888,123).next(); assert( good.is_valid() ); assert( good.entry() == 124 ); } msg("Standard comparison"); { DatasetId id0(1,2); DatasetId id1(1,2); DatasetId id2(2,1); assert( id0 == id1 ); assert( id1 < id2 ); assert( id0 == id1 ); assert( id1 != id2 ); } #if ( __GNUC__ != 2 ) using namespace std::rel_ops; #endif msg("Other relops"); { DatasetId id0(1,1); DatasetId id1(1,1); DatasetId id2(2,1); assert( id1 <= id0 ); assert( id1 <= id2 ); assert( id2 > id1 ); assert( id2 >= id1 ); assert( id0 >= id1 ); } msg("DTD"); cout << DatasetId::dtd() << endl; assert( DatasetId::dtd().size() > 0 ); assert( DtdRegistry::instance("dataset").has_type("DatasetId") ); msg("Write XML"); { DatasetId id(123,456); cout << id << endl; const XmlElement* pele = id.xml(); cout << *pele << endl; msg("Read XML"); DatasetId id2(*pele); cout << id2 << endl; assert( id2 == id ); delete pele; } msg("All tests passed."); return 0; } #ifdef CTEST_MAIN int main() { return DatasetId_t(); } #endif