File: SimDataPairTest.cpp

package info (click to toggle)
bornagain 23.0-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 103,936 kB
  • sloc: cpp: 423,131; python: 40,997; javascript: 11,167; awk: 630; sh: 318; ruby: 173; xml: 130; makefile: 51; ansic: 24
file content (77 lines) | stat: -rw-r--r-- 2,327 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "Sim/Fitting/SimDataPair.h"
#include "Device/Data/Datafield.h"
#include "Tests/GTestWrapper/google_test.h"
#include "Tests/Unit/Sim/FittingTestHelper.h"
#include <numeric>

TEST(SimDataPair, standardPair)
{
    FittingTestHelper helper;

    simulation_builder_t builder = [&](const mumufit::Parameters& pars) {
        return helper.createSimulation(pars);
    };

    const double exp_value(10.0);
    const double dataset_weight(0.5);

    SimulationWrapper sim;
    sim.cSimulationFn = builder;
    SimDataPair obj(sim, *helper.createTestData(exp_value), dataset_weight);

    // default state, no simulation has been called yet
#ifndef BA_DEBUG
    EXPECT_THROW(obj.uncertainties_array(), std::runtime_error);
    EXPECT_THROW(obj.simulation_array(), std::runtime_error);
    EXPECT_THROW(obj.experimental_array(), std::runtime_error);
    EXPECT_THROW(obj.simulationResult(), std::runtime_error);
    EXPECT_THROW(obj.experimentalData(), std::runtime_error);
#endif

    // calling builder once
    mumufit::Parameters params;
    EXPECT_EQ(helper.m_builder_calls, 0u);
    obj.execSimulation(params);
    EXPECT_EQ(helper.m_builder_calls, 1u);

    // checking arrays
    auto array = obj.simulation_array();
    EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0.), 0.);
    array = obj.experimental_array();

    // calling builder second time
    obj.execSimulation(params);
    EXPECT_EQ(helper.m_builder_calls, 2u);

    // checking arrays
    array = obj.simulation_array();
    EXPECT_DOUBLE_EQ(std::accumulate(array.begin(), array.end(), 0.), 0.);
    array = obj.experimental_array();
}

TEST(SimDataPair, move)
{
    FittingTestHelper helper;

    simulation_builder_t builder = [&](const mumufit::Parameters& pars) {
        return helper.createSimulation(pars);
    };

    const double exp_value(10.0);

    SimulationWrapper sim;
    sim.cSimulationFn = builder;
    SimDataPair obj(sim, *helper.createTestData(exp_value), 0.5);
    // calling builder once
    mumufit::Parameters params;
    EXPECT_EQ(helper.m_builder_calls, 0u);
    obj.execSimulation(params);
    EXPECT_EQ(helper.m_builder_calls, 1u);

    // Making clone.
    SimDataPair moved = std::move(obj);

    // calling clone's builder once
    moved.execSimulation(params);
    EXPECT_EQ(helper.m_builder_calls, 2u);
}