IData/test/DatasetTest.cpp

Go to the documentation of this file.
00001 //--------------------------------------------------------------------------
00002 // File and Version Information:
00003 //      $Id: DatasetTest.cpp 5427 2013-02-13 00:52:29Z salnikov@SLAC.STANFORD.EDU $
00004 //
00005 // Description:
00006 //      Test suite case for the DatasetTest.
00007 //
00008 //------------------------------------------------------------------------
00009 
00010 //---------------
00011 // C++ Headers --
00012 //---------------
00013 
00014 //-------------------------------
00015 // Collaborating Class Headers --
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  * Simple test suite for module DatasetTest.
00027  * See http://www.boost.org/doc/libs/1_36_0/libs/test/doc/html/index.html
00028  */
00029 
00030 // ==============================================================
00031 
00032 // "default defaults", everything is empty
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 // test some global defaults
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 // test for default experiment name in the format "expnumber"
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 // test for default experiment name in the format "expname"
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 // test for default experiment name in the format "INSTR/expname"
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 // test few versions of experiment names that should fail
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 // test experiment name in the format "expnumber"
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 // test experiment name in the format "expname"
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 // test experiment name in the format "INSTR/expname"
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 // test few versions of experiment names that should fail
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 // test run number parsing
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 // test run number parsing
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 // test run number parsing
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 // test run number parsing
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 // test run number parsing
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 // test combined data
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 // test combined data
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 // test combined data
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 // test file name
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 // test file name
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 // test file name
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 

Generated on 19 Dec 2016 for PSANAclasses by  doxygen 1.4.7