BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
axisitems.test.cpp
Go to the documentation of this file.
1 // ************************************************************************************************
2 //
3 // qt-mvvm: Model-view-view-model framework for large GUI applications
4 //
5 //! @file mvvm/tests/testmodel/axisitems.test.cpp
6 //! @brief Implements class CLASS?
7 //!
8 //! @homepage http://www.bornagainproject.org
9 //! @license GNU General Public License v3 or higher (see COPYING)
10 //! @copyright Forschungszentrum Jülich GmbH 2020
11 //! @authors Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)
12 //
13 // ************************************************************************************************
14 
15 #include "google_test.h"
17 
18 using namespace ModelView;
19 
20 //! Testing AxisItems.
21 
22 class AxisItemsTest : public ::testing::Test {
23 public:
25 };
26 
28 
29 //! Initial state
30 
31 TEST_F(AxisItemsTest, viewportAxisInitialState)
32 {
33  ViewportAxisItem axis;
34  EXPECT_EQ(axis.property<double>(ViewportAxisItem::P_MIN), 0.0);
35  EXPECT_EQ(axis.property<double>(ViewportAxisItem::P_MAX), 1.0);
36  EXPECT_FALSE(axis.property<bool>(ViewportAxisItem::P_IS_LOG));
37 }
38 
39 //! ViewportAxisItem::setRange
40 
41 TEST_F(AxisItemsTest, viewportAxisSetRange)
42 {
43  ViewportAxisItem axis;
44 
45  // default range
46  auto [lower, upper] = axis.range();
47  EXPECT_EQ(lower, 0.0);
48  EXPECT_EQ(upper, 1.0);
49 
50  axis.set_range(1.0, 2.0);
51  EXPECT_EQ(axis.property<double>(ViewportAxisItem::P_MIN), 1.0);
52  EXPECT_EQ(axis.property<double>(ViewportAxisItem::P_MAX), 2.0);
53 }
54 
55 //! Factory method for FixedBinAxisItem.
56 
57 TEST_F(AxisItemsTest, fixedBinAxisInitialState)
58 {
59  FixedBinAxisItem axis;
60  EXPECT_EQ(axis.property<double>(FixedBinAxisItem::P_MIN), 0.0);
61  EXPECT_EQ(axis.property<double>(FixedBinAxisItem::P_MAX), 1.0);
62  EXPECT_EQ(axis.property<int>(FixedBinAxisItem::P_NBINS), 1);
63  EXPECT_EQ(axis.binCenters(), std::vector<double>{0.5});
64  EXPECT_EQ(axis.size(), 1);
65  auto [lower, upper] = axis.range();
66  EXPECT_EQ(lower, 0.0);
67  EXPECT_EQ(upper, 1.0);
68 }
69 
70 //! Factory method for FixedBinAxisItem.
71 
72 TEST_F(AxisItemsTest, fixedBinAxisSetParameters)
73 {
74  FixedBinAxisItem axis;
75  axis.setParameters(3, 1.0, 4.0);
76 
77  EXPECT_EQ(axis.property<int>(FixedBinAxisItem::P_NBINS), 3);
78  EXPECT_EQ(axis.property<double>(FixedBinAxisItem::P_MIN), 1.0);
79  EXPECT_EQ(axis.property<double>(FixedBinAxisItem::P_MAX), 4.0);
80 
81  std::vector<double> expected{1.5, 2.5, 3.5};
82  EXPECT_EQ(axis.binCenters(), expected);
83  EXPECT_EQ(axis.size(), 3);
84 }
85 
86 //! Factory method for FixedBinAxisItem.
87 
88 TEST_F(AxisItemsTest, fixedBinAxisFactory)
89 {
90  auto axis = FixedBinAxisItem::create(3, 1.0, 4.0);
91 
92  EXPECT_EQ(axis->property<int>(FixedBinAxisItem::P_NBINS), 3);
93  EXPECT_EQ(axis->property<double>(FixedBinAxisItem::P_MIN), 1.0);
94  EXPECT_EQ(axis->property<double>(FixedBinAxisItem::P_MAX), 4.0);
95 
96  std::vector<double> expected{1.5, 2.5, 3.5};
97  EXPECT_EQ(axis->binCenters(), expected);
98  EXPECT_EQ(axis->size(), 3);
99 }
100 
101 //! Range method.
102 
103 TEST_F(AxisItemsTest, fixedBinAxisRange)
104 {
105  auto axis = FixedBinAxisItem::create(3, 1.0, 4.0);
106 
107  auto [lower, upper] = axis->range();
108  EXPECT_EQ(lower, 1.0);
109  EXPECT_EQ(upper, 4.0);
110 }
111 
112 TEST_F(AxisItemsTest, PointwiseAxisInitialState)
113 {
114  PointwiseAxisItem axis;
115  std::vector<double> expected_centers = {0.0, 1.0};
116  EXPECT_EQ(axis.binCenters(), expected_centers);
117  EXPECT_EQ(axis.size(), 2);
118 }
119 
120 TEST_F(AxisItemsTest, PointwiseAxisSetParameters)
121 {
122  std::vector<double> expected_centers{1.0, 2.0, 3.0};
123  PointwiseAxisItem axis;
124  axis.setParameters(expected_centers);
125  EXPECT_EQ(axis.binCenters(), expected_centers);
126  EXPECT_EQ(axis.size(), 3);
127 }
128 
129 TEST_F(AxisItemsTest, PointwiseAxisCreate)
130 {
131  std::vector<double> expected_centers{1.0, 2.0, 3.0};
132  auto axis = PointwiseAxisItem::create(expected_centers);
133  EXPECT_EQ(axis->binCenters(), expected_centers);
134  EXPECT_EQ(axis->size(), 3);
135 }
Defines class CLASS?
TEST_F(AxisItemsTest, viewportAxisInitialState)
Initial state.
Testing AxisItems.
static const std::string P_MAX
Definition: axisitems.h:32
static const std::string P_MIN
Definition: axisitems.h:31
Item to represent fixed bin axis.
Definition: axisitems.h:75
std::pair< double, double > range() const override
Definition: axisitems.cpp:88
static const std::string P_NBINS
Definition: axisitems.h:77
std::vector< double > binCenters() const override
Definition: axisitems.cpp:98
int size() const override
Definition: axisitems.cpp:93
static std::unique_ptr< FixedBinAxisItem > create(int nbins, double xmin, double xmax)
Definition: axisitems.cpp:81
void setParameters(int nbins, double xmin, double xmax)
Definition: axisitems.cpp:74
Item to represent pointwise axis.
Definition: axisitems.h:94
std::vector< double > binCenters() const override
Definition: axisitems.cpp:146
void setParameters(const std::vector< double > &data)
Definition: axisitems.cpp:122
int size() const override
Definition: axisitems.cpp:141
static std::unique_ptr< PointwiseAxisItem > create(const std::vector< double > &data)
Definition: axisitems.cpp:127
T property(const std::string &tag) const
Returns data stored in property item.
Definition: sessionitem.h:181
Item to represent viewport axis.
Definition: axisitems.h:43
void set_range(double lower, double upper)
Sets lower, upper range of axis to given values.
Definition: axisitems.cpp:51
static const std::string P_IS_LOG
Definition: axisitems.h:46
std::pair< double, double > range() const
Returns pair of lower, upper axis range.
Definition: axisitems.cpp:44
Defines class CLASS?
materialitems.h Collection of materials to populate MaterialModel.