00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "IData/Dataset.h"
00018 #include "IData/Exceptions.h"
00019
00020 using namespace IData ;
00021
00022 #define BOOST_TEST_MODULE DatasetTest
00023 #include <boost/test/included/unit_test.hpp>
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 BOOST_AUTO_TEST_CASE( test_def_def )
00035 {
00036 Dataset ds;
00037 BOOST_CHECK(not ds.isFile());
00038 BOOST_CHECK_EQUAL(ds.expID(), 0U);
00039 BOOST_CHECK_EQUAL(ds.instrument(), "");
00040 BOOST_CHECK_EQUAL(ds.experiment(), "");
00041 BOOST_CHECK(ds.runs().empty());
00042 BOOST_CHECK(not ds.exists("exp"));
00043 BOOST_CHECK(not ds.exists("run"));
00044 BOOST_CHECK(not ds.exists("live"));
00045 BOOST_CHECK(not ds.exists("anything"));
00046 BOOST_CHECK_EQUAL(ds.value("exp"), "");
00047 BOOST_CHECK_EQUAL(ds.value("anything"), "");
00048 }
00049
00050
00051
00052
00053
00054 BOOST_AUTO_TEST_CASE( test_def_1 )
00055 {
00056 Dataset::setDefOption("a", "b");
00057 Dataset::setDefOption("live", "");
00058
00059 Dataset ds;
00060 BOOST_CHECK(not ds.isFile());
00061 BOOST_CHECK_EQUAL(ds.expID(), 0U);
00062 BOOST_CHECK_EQUAL(ds.instrument(), "");
00063 BOOST_CHECK_EQUAL(ds.experiment(), "");
00064 BOOST_CHECK(ds.runs().empty());
00065 BOOST_CHECK(not ds.exists("exp"));
00066 BOOST_CHECK(not ds.exists("run"));
00067 BOOST_CHECK(ds.exists("live"));
00068 BOOST_CHECK(ds.exists("a"));
00069 BOOST_CHECK_EQUAL(ds.value("live"), "");
00070 BOOST_CHECK_EQUAL(ds.value("a"), "b");
00071 }
00072
00073
00074
00075
00076
00077 BOOST_AUTO_TEST_CASE( test_def_exp_1 )
00078 {
00079 Dataset::setAppExpName("10");
00080
00081 Dataset ds;
00082 BOOST_CHECK(not ds.isFile());
00083 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00084 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00085 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00086 BOOST_CHECK(ds.exists("exp"));
00087 BOOST_CHECK_EQUAL(ds.value("exp"), "10");
00088 }
00089
00090
00091
00092
00093
00094 BOOST_AUTO_TEST_CASE( test_def_exp_2 )
00095 {
00096 Dataset::setAppExpName("amo00209");
00097
00098 Dataset ds;
00099 BOOST_CHECK(not ds.isFile());
00100 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00101 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00102 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00103 BOOST_CHECK(ds.exists("exp"));
00104 BOOST_CHECK_EQUAL(ds.value("exp"), "amo00209");
00105 }
00106
00107
00108
00109
00110
00111 BOOST_AUTO_TEST_CASE( test_def_exp_3 )
00112 {
00113 Dataset::setAppExpName("AMO/amo00209");
00114
00115 Dataset ds;
00116 BOOST_CHECK(not ds.isFile());
00117 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00118 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00119 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00120 BOOST_CHECK(ds.exists("exp"));
00121 BOOST_CHECK_EQUAL(ds.value("exp"), "AMO/amo00209");
00122 }
00123
00124
00125
00126
00127
00128 BOOST_AUTO_TEST_CASE( test_def_exp_fail )
00129 {
00130 BOOST_CHECK_THROW(Dataset::setAppExpName("10a"), ExpNameException);
00131 BOOST_CHECK_THROW(Dataset::setAppExpName("-10"), ExpNameException);
00132 BOOST_CHECK_THROW(Dataset::setAppExpName("AMO:amo00209"), ExpNameException);
00133 BOOST_CHECK_THROW(Dataset::setAppExpName("AMO/sxrdaq10"), ExpNameException);
00134 BOOST_CHECK_THROW(Dataset::setAppExpName("AMO/10"), ExpNameException);
00135 }
00136
00137
00138
00139
00140
00141 BOOST_AUTO_TEST_CASE( test_exp_1 )
00142 {
00143 Dataset ds("exp=10");
00144 BOOST_CHECK(not ds.isFile());
00145 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00146 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00147 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00148 BOOST_CHECK(ds.exists("exp"));
00149 BOOST_CHECK_EQUAL(ds.value("exp"), "10");
00150 }
00151
00152
00153
00154
00155
00156 BOOST_AUTO_TEST_CASE( test_exp_2 )
00157 {
00158 Dataset ds("exp=amo00209");
00159 BOOST_CHECK(not ds.isFile());
00160 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00161 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00162 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00163 BOOST_CHECK(ds.exists("exp"));
00164 BOOST_CHECK_EQUAL(ds.value("exp"), "amo00209");
00165 }
00166
00167
00168
00169
00170
00171 BOOST_AUTO_TEST_CASE( test_exp_3 )
00172 {
00173 Dataset ds("exp=AMO/amo00209");
00174 BOOST_CHECK(not ds.isFile());
00175 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00176 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00177 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00178 BOOST_CHECK(ds.exists("exp"));
00179 BOOST_CHECK_EQUAL(ds.value("exp"), "AMO/amo00209");
00180 }
00181
00182
00183
00184
00185
00186 BOOST_AUTO_TEST_CASE( test_exp_fail )
00187 {
00188 BOOST_CHECK_THROW(Dataset("exp=10a"), ExpNameException);
00189 BOOST_CHECK_THROW(Dataset("exp=-10"), ExpNameException);
00190 BOOST_CHECK_THROW(Dataset("exp=AMO:amo00209"), ExpNameException);
00191 BOOST_CHECK_THROW(Dataset("exp=AMO/sxrdaq10"), ExpNameException);
00192 BOOST_CHECK_THROW(Dataset("exp=AMO/10"), ExpNameException);
00193 }
00194
00195
00196
00197
00198
00199 BOOST_AUTO_TEST_CASE( test_run_exceptions )
00200 {
00201 BOOST_CHECK_NO_THROW(Dataset("run=1"));
00202 BOOST_CHECK_NO_THROW(Dataset("run=1,10"));
00203 BOOST_CHECK_NO_THROW(Dataset("run=1-100"));
00204 BOOST_CHECK_NO_THROW(Dataset("run=1,10-100,200,220-300"));
00205 BOOST_CHECK_THROW(Dataset("run=-1"), RunNumberSpecException);
00206 BOOST_CHECK_THROW(Dataset("run=x"), RunNumberSpecException);
00207 BOOST_CHECK_THROW(Dataset("run=2,x"), RunNumberSpecException);
00208 BOOST_CHECK_THROW(Dataset("run=2-x"), RunNumberSpecException);
00209 BOOST_CHECK_THROW(Dataset("run=1..5"), RunNumberSpecException);
00210 BOOST_CHECK_THROW(Dataset("run=1,10-x50"), RunNumberSpecException);
00211 }
00212
00213
00214
00215
00216
00217 BOOST_AUTO_TEST_CASE( test_run_1 )
00218 {
00219 Dataset ds("run=1");
00220 const Dataset::Runs& runs = ds.runs();
00221 Dataset::Runs::const_iterator it = runs.begin();
00222
00223 BOOST_REQUIRE(it != runs.end());
00224 BOOST_CHECK_EQUAL(it->first, 1U);
00225 BOOST_CHECK_EQUAL(it->second, 1U);
00226 ++ it;
00227 BOOST_CHECK(it == runs.end());
00228 }
00229
00230
00231
00232
00233
00234 BOOST_AUTO_TEST_CASE( test_run_2 )
00235 {
00236 Dataset ds("run=1,10");
00237 const Dataset::Runs& runs = ds.runs();
00238 Dataset::Runs::const_iterator it = runs.begin();
00239
00240 BOOST_REQUIRE(it != runs.end());
00241 BOOST_CHECK_EQUAL(it->first, 1U);
00242 BOOST_CHECK_EQUAL(it->second, 1U);
00243 ++ it;
00244 BOOST_REQUIRE(it != runs.end());
00245 BOOST_CHECK_EQUAL(it->first, 10U);
00246 BOOST_CHECK_EQUAL(it->second, 10U);
00247 ++ it;
00248 BOOST_CHECK(it == runs.end());
00249 }
00250
00251
00252
00253
00254
00255 BOOST_AUTO_TEST_CASE( test_run_3 )
00256 {
00257 Dataset ds("run=1-100");
00258 const Dataset::Runs& runs = ds.runs();
00259 Dataset::Runs::const_iterator it = runs.begin();
00260
00261 BOOST_REQUIRE(it != runs.end());
00262 BOOST_CHECK_EQUAL(it->first, 1U);
00263 BOOST_CHECK_EQUAL(it->second, 100U);
00264 ++ it;
00265 BOOST_CHECK(it == runs.end());
00266 }
00267
00268
00269
00270
00271
00272 BOOST_AUTO_TEST_CASE( test_run_4 )
00273 {
00274 Dataset ds("run=1,10-100,200,220-300");
00275 const Dataset::Runs& runs = ds.runs();
00276 Dataset::Runs::const_iterator it = runs.begin();
00277
00278 BOOST_REQUIRE(it != runs.end());
00279 BOOST_CHECK_EQUAL(it->first, 1U);
00280 BOOST_CHECK_EQUAL(it->second, 1U);
00281 ++ it;
00282 BOOST_REQUIRE(it != runs.end());
00283 BOOST_CHECK_EQUAL(it->first, 10U);
00284 BOOST_CHECK_EQUAL(it->second, 100U);
00285 ++ it;
00286 BOOST_REQUIRE(it != runs.end());
00287 BOOST_CHECK_EQUAL(it->first, 200U);
00288 BOOST_CHECK_EQUAL(it->second, 200U);
00289 ++ it;
00290 BOOST_REQUIRE(it != runs.end());
00291 BOOST_CHECK_EQUAL(it->first, 220U);
00292 BOOST_CHECK_EQUAL(it->second, 300U);
00293 ++ it;
00294 BOOST_CHECK(it == runs.end());
00295 }
00296
00297
00298
00299
00300
00301 BOOST_AUTO_TEST_CASE( test_run_combo_1 )
00302 {
00303 BOOST_REQUIRE_NO_THROW(Dataset("exp=10:run=1"));
00304 Dataset ds("exp=10:run=1");
00305
00306 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00307 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00308 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00309
00310 const Dataset::Runs& runs = ds.runs();
00311 Dataset::Runs::const_iterator it = runs.begin();
00312
00313 BOOST_REQUIRE(it != runs.end());
00314 BOOST_CHECK_EQUAL(it->first, 1U);
00315 BOOST_CHECK_EQUAL(it->second, 1U);
00316 ++ it;
00317 BOOST_CHECK(it == runs.end());
00318 }
00319
00320
00321
00322
00323
00324 BOOST_AUTO_TEST_CASE( test_run_combo_2 )
00325 {
00326 BOOST_REQUIRE_NO_THROW(Dataset("exp=amo00209:run=1,10-100,200,220-300"));
00327 Dataset ds("exp=amo00209:run=1,10-100,200,220-300");
00328
00329 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00330 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00331 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00332
00333 const Dataset::Runs& runs = ds.runs();
00334 Dataset::Runs::const_iterator it = runs.begin();
00335
00336 BOOST_REQUIRE(it != runs.end());
00337 BOOST_CHECK_EQUAL(it->first, 1U);
00338 BOOST_CHECK_EQUAL(it->second, 1U);
00339 ++ it;
00340 BOOST_REQUIRE(it != runs.end());
00341 BOOST_CHECK_EQUAL(it->first, 10U);
00342 BOOST_CHECK_EQUAL(it->second, 100U);
00343 ++ it;
00344 BOOST_REQUIRE(it != runs.end());
00345 BOOST_CHECK_EQUAL(it->first, 200U);
00346 BOOST_CHECK_EQUAL(it->second, 200U);
00347 ++ it;
00348 BOOST_REQUIRE(it != runs.end());
00349 BOOST_CHECK_EQUAL(it->first, 220U);
00350 BOOST_CHECK_EQUAL(it->second, 300U);
00351 ++ it;
00352 BOOST_CHECK(it == runs.end());
00353 }
00354
00355
00356
00357
00358
00359 BOOST_AUTO_TEST_CASE( test_run_combo_3 )
00360 {
00361 BOOST_REQUIRE_NO_THROW(Dataset(":dir=/u2/data/path:h5:live:exp=amo00209:run=1:"));
00362 Dataset ds(":dir=/u2/data/path:h5:live:exp=amo00209:run=1:");
00363
00364 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00365 BOOST_CHECK_EQUAL(ds.instrument(), "AMO");
00366 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00367
00368 const Dataset::Runs& runs = ds.runs();
00369 Dataset::Runs::const_iterator it = runs.begin();
00370
00371 BOOST_REQUIRE(it != runs.end());
00372 BOOST_CHECK_EQUAL(it->first, 1U);
00373 BOOST_CHECK_EQUAL(it->second, 1U);
00374 ++ it;
00375 BOOST_CHECK(it == runs.end());
00376
00377 BOOST_CHECK(ds.exists("dir"));
00378 BOOST_CHECK_EQUAL(ds.value("dir"), "/u2/data/path");
00379 BOOST_CHECK(ds.exists("h5"));
00380 BOOST_CHECK_EQUAL(ds.value("h5"), "");
00381 BOOST_CHECK(ds.exists("live"));
00382 BOOST_CHECK_EQUAL(ds.value("live"), "");
00383
00384 }
00385
00386
00387
00388
00389
00390 BOOST_AUTO_TEST_CASE( test_filename_1 )
00391 {
00392 BOOST_REQUIRE_NO_THROW(Dataset("e100-r0200-s00-c00.xtc"));
00393 Dataset ds("e100-r0200-s00-c00.xtc");
00394
00395 BOOST_CHECK(ds.isFile());
00396 BOOST_CHECK(ds.exists("xtc"));
00397 BOOST_CHECK_EQUAL(ds.expID(), 100U);
00398 BOOST_CHECK_EQUAL(ds.experiment(), "sxr27211");
00399 BOOST_CHECK_EQUAL(ds.dirName(), "/reg/d/psdm/SXR/sxr27211/xtc");
00400
00401 const Dataset::Runs& runs = ds.runs();
00402 Dataset::Runs::const_iterator it = runs.begin();
00403
00404 BOOST_REQUIRE(it != runs.end());
00405 BOOST_CHECK_EQUAL(it->first, 200U);
00406 BOOST_CHECK_EQUAL(it->second, 200U);
00407 ++ it;
00408 BOOST_CHECK(it == runs.end());
00409
00410 const Dataset::NameList& files = ds.files();
00411 Dataset::NameList::const_iterator nit = files.begin();
00412
00413 BOOST_REQUIRE(nit != files.end());
00414 BOOST_CHECK_EQUAL(*nit, "e100-r0200-s00-c00.xtc");
00415 ++ nit;
00416 BOOST_CHECK(nit == files.end());
00417 }
00418
00419
00420
00421
00422
00423 BOOST_AUTO_TEST_CASE( test_filename_2 )
00424 {
00425 BOOST_REQUIRE_NO_THROW(Dataset("amo00209-r0123.h5"));
00426 Dataset ds("amo00209-r0123.h5");
00427
00428 BOOST_CHECK(ds.isFile());
00429 BOOST_CHECK(ds.exists("h5"));
00430 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00431 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00432 BOOST_CHECK_EQUAL(ds.dirName(), "/reg/d/psdm/AMO/amo00209/hdf5");
00433
00434 const Dataset::Runs& runs = ds.runs();
00435 Dataset::Runs::const_iterator it = runs.begin();
00436
00437 BOOST_REQUIRE(it != runs.end());
00438 BOOST_CHECK_EQUAL(it->first, 123U);
00439 BOOST_CHECK_EQUAL(it->second, 123U);
00440 ++ it;
00441 BOOST_CHECK(it == runs.end());
00442
00443 const Dataset::NameList& files = ds.files();
00444 Dataset::NameList::const_iterator nit = files.begin();
00445
00446 BOOST_REQUIRE(nit != files.end());
00447 BOOST_CHECK_EQUAL(*nit, "amo00209-r0123.h5");
00448 ++ nit;
00449 BOOST_CHECK(nit == files.end());
00450 }
00451
00452
00453
00454
00455
00456 BOOST_AUTO_TEST_CASE( test_filename_3 )
00457 {
00458 BOOST_REQUIRE_NO_THROW(Dataset("/reg/d/psdm/AMO/amo00209/hdf5/amo00209-r0123.h5"));
00459 Dataset ds("/reg/d/psdm/AMO/amo00209/hdf5/amo00209-r0123.h5");
00460
00461 BOOST_CHECK(ds.isFile());
00462 BOOST_CHECK(ds.exists("h5"));
00463 BOOST_CHECK_EQUAL(ds.experiment(), "amo00209");
00464 BOOST_CHECK_EQUAL(ds.expID(), 10U);
00465 BOOST_CHECK_EQUAL(ds.dirName(), "/reg/d/psdm/AMO/amo00209/hdf5");
00466
00467 const Dataset::Runs& runs = ds.runs();
00468 Dataset::Runs::const_iterator it = runs.begin();
00469
00470 BOOST_REQUIRE(it != runs.end());
00471 BOOST_CHECK_EQUAL(it->first, 123U);
00472 BOOST_CHECK_EQUAL(it->second, 123U);
00473 ++ it;
00474 BOOST_CHECK(it == runs.end());
00475
00476 const Dataset::NameList& files = ds.files();
00477 Dataset::NameList::const_iterator nit = files.begin();
00478
00479 BOOST_REQUIRE(nit != files.end());
00480 BOOST_CHECK_EQUAL(*nit, "/reg/d/psdm/AMO/amo00209/hdf5/amo00209-r0123.h5");
00481 ++ nit;
00482 BOOST_CHECK(nit == files.end());
00483 }
00484