RunTest.cpp 4.56 KB
Newer Older
Matthieu Dorier's avatar
Matthieu Dorier committed
1 2 3 4 5 6 7 8 9 10 11 12
#include "RunTest.hpp"
#include "CppUnitAdditionalMacros.hpp"

CPPUNIT_TEST_SUITE_REGISTRATION( RunTest );

using namespace hepnos;

void RunTest::setUp() {}

void RunTest::tearDown() {}

void RunTest::testFillDataStore() {
13 14
    auto root = datastore->root();
    auto mds = root.createDataSet("matthieu");
Matthieu Dorier's avatar
Matthieu Dorier committed
15 16 17 18 19 20
    CPPUNIT_ASSERT(mds.valid());
    Run r1 = mds.createRun(42);
    CPPUNIT_ASSERT(r1.valid());
}

void RunTest::testCreateSubRuns() {
21 22
    auto root = datastore->root();
    DataSet mds = root["matthieu"];
Matthieu Dorier's avatar
Matthieu Dorier committed
23
    CPPUNIT_ASSERT(mds.valid());
24
    Run r1 = mds[42];
Matthieu Dorier's avatar
Matthieu Dorier committed
25

26 27 28 29
    SubRun sr0 = r1.createSubRun(0);
    CPPUNIT_ASSERT(sr0.valid());
    CPPUNIT_ASSERT(0 == sr0.number());

Matthieu Dorier's avatar
Matthieu Dorier committed
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
    SubRun sr10 = r1.createSubRun(10);
    CPPUNIT_ASSERT(sr10.valid());
    CPPUNIT_ASSERT(10 == sr10.number());

    SubRun sr23 = r1.createSubRun(23);
    CPPUNIT_ASSERT(sr23.valid());
    CPPUNIT_ASSERT(23 == sr23.number());

    SubRun sr13 = r1.createSubRun(13);
    CPPUNIT_ASSERT(sr13.valid());
    CPPUNIT_ASSERT(13 == sr13.number());

    SubRun sr38 = r1.createSubRun(38);
    CPPUNIT_ASSERT(sr38.valid());
    CPPUNIT_ASSERT(38 == sr38.number());
}

47
void RunTest::testBraketOperator() {
48 49
    auto root = datastore->root();
    DataSet mds = root["matthieu"];
Matthieu Dorier's avatar
Matthieu Dorier committed
50 51
    CPPUNIT_ASSERT(mds.valid());

52
    Run r1 = mds[42];
Matthieu Dorier's avatar
Matthieu Dorier committed
53 54 55
    CPPUNIT_ASSERT(r1.valid());

    // check access to non-existing SubRun
56
    CPPUNIT_ASSERT_THROW(r1[12], hepnos::Exception);
Matthieu Dorier's avatar
Matthieu Dorier committed
57 58

    // check access to existing SubRun
59
    SubRun sr13 = r1[13];
Matthieu Dorier's avatar
Matthieu Dorier committed
60 61 62 63 64
    CPPUNIT_ASSERT(sr13.valid());
    CPPUNIT_ASSERT(13 == sr13.number());
}

void RunTest::testFind() {
65 66
    auto root = datastore->root();
    DataSet mds = root["matthieu"];
Matthieu Dorier's avatar
Matthieu Dorier committed
67
    CPPUNIT_ASSERT(mds.valid());
68
    Run r1 = mds[42];
Matthieu Dorier's avatar
Matthieu Dorier committed
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
    CPPUNIT_ASSERT(r1.valid());
    // test calling find for a SubRun that does not exist
    {
        auto it = r1.find(12);
        CPPUNIT_ASSERT(it == r1.end());
        CPPUNIT_ASSERT(!(it->valid()));
    }
    // test calling find for a SubRun that exists
    {
        auto it = r1.find(13);
        CPPUNIT_ASSERT(it != r1.end());
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(13 == it->number());
        // test iteration
        ++it;
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(23 == it->number());
    }
}

void RunTest::testBeginEnd() {
90 91
    auto root = datastore->root();
    DataSet mds = root["matthieu"];
Matthieu Dorier's avatar
Matthieu Dorier committed
92
    CPPUNIT_ASSERT(mds.valid());
93
    Run r1 = mds[42];
Matthieu Dorier's avatar
Matthieu Dorier committed
94 95
    CPPUNIT_ASSERT(r1.valid());

96
    std::vector<SubRunNumber> numbers = {0, 10, 13, 23, 38};
Matthieu Dorier's avatar
Matthieu Dorier committed
97 98 99 100 101 102 103 104
    auto it = r1.begin();
    for(int i=0; i < numbers.size(); i++, it++) {
        CPPUNIT_ASSERT_EQUAL(numbers[i], it->number());
    }
    CPPUNIT_ASSERT(it == r1.end());
}

void RunTest::testLowerUpperBounds() {
105 106
    auto root = datastore->root();
    DataSet mds = root["matthieu"];
Matthieu Dorier's avatar
Matthieu Dorier committed
107
    CPPUNIT_ASSERT(mds.valid());
108
    Run r1 = mds[42];
Matthieu Dorier's avatar
Matthieu Dorier committed
109 110
    CPPUNIT_ASSERT(r1.valid());

111 112 113 114 115
    {
        auto it = r1.lower_bound(0);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 0);
    }
Matthieu Dorier's avatar
Matthieu Dorier committed
116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
    {
        auto it = r1.lower_bound(13);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 13);
    }
    {
        auto it = r1.lower_bound(14);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 23);
    }
    {
        auto it = r1.lower_bound(12);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 13);
    }
    {
        auto it = r1.lower_bound(40);
        CPPUNIT_ASSERT(!(it->valid()));
        CPPUNIT_ASSERT(it == r1.end());
    }
136 137 138 139 140
    {
        auto it = r1.upper_bound(0);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 10);
    }
Matthieu Dorier's avatar
Matthieu Dorier committed
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
    {
        auto it = r1.upper_bound(13);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 23);
    }
    {
        auto it = r1.upper_bound(14);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 23);
    }
    {
        auto it = r1.upper_bound(12);
        CPPUNIT_ASSERT(it->valid());
        CPPUNIT_ASSERT(it->number() == 13);
    }
    {
        auto it = r1.upper_bound(38);
        CPPUNIT_ASSERT(!(it->valid()));
        CPPUNIT_ASSERT(it == r1.end());
    }
}

163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
void RunTest::testAsync() {
    auto root = datastore->root();
    DataSet mds = root.createDataSet("matthieu_async");
    Run r = mds.createRun(1);
    hepnos::AsyncEngine async(*datastore, 1);

    for(unsigned i=0; i < 10; i++) {
        SubRun sr = r.createSubRun(async, i);
        CPPUNIT_ASSERT(sr.valid());
    }

    async.wait();

    for(unsigned i=0; i < 10; i++) {
        SubRun sr = r[i];
        CPPUNIT_ASSERT(sr.valid());
    }
}