BornAgain  1.19.0
Simulate and fit neutron and x-ray scattering at grazing incidence
modelutils.test.cpp File Reference

Implements class CLASS? More...

Include dependency graph for modelutils.test.cpp:

Go to the source code of this file.

Classes

class  ModelUtilsTest
 

Functions

 TEST_F (ModelUtilsTest, CreateClone)
 
 TEST_F (ModelUtilsTest, CreateCopy)
 
 TEST_F (ModelUtilsTest, DeleteItemFromModel)
 
 TEST_F (ModelUtilsTest, findItems)
 
 TEST_F (ModelUtilsTest, MoveItemDown)
 
 TEST_F (ModelUtilsTest, MoveItemUp)
 
 TEST_F (ModelUtilsTest, topItem)
 
 TEST_F (ModelUtilsTest, topItems)
 

Detailed Description

Implements class CLASS?

Homepage:\n http://www.bornagainproject.org
License:\n GNU General Public License v3 or higher (see COPYING)
Authors
Gennady Pospelov et al, Scientific Computing Group at MLZ (see CITATION, AUTHORS)

Definition in file modelutils.test.cpp.

Function Documentation

◆ TEST_F() [1/8]

TEST_F ( ModelUtilsTest  ,
CreateClone   
)

Definition at line 98 of file modelutils.test.cpp.

99 {
100  ToyItems::SampleModel model;
101  auto layer = model.insertItem<ToyItems::LayerItem>();
103 
104  auto modelCopy = Utils::CreateClone<ToyItems::SampleModel>(model);
105  auto layerCopy = modelCopy->topItem<ToyItems::LayerItem>();
106  EXPECT_EQ(layerCopy->property<double>(ToyItems::LayerItem::P_THICKNESS), 42.0);
107 
108  // Copied model has unique identifiers
109  EXPECT_TRUE(layerCopy->identifier() == layer->identifier());
110 
111  // root item by current conveniton still has unique identifier event for cloned model
112  // probably for the uniformity this has to be changed, and test below changed to EXPECT_TRUE
113  // This will require change in JsonModelConverter
114  EXPECT_FALSE(model.rootItem()->identifier() == modelCopy->rootItem()->identifier());
115 }
std::string identifier() const
Returns unique identifier.
Definition: sessionitem.cpp:87
void setProperty(const std::string &tag, const T &value)
Sets value to property item.
Definition: sessionitem.h:190
SessionItem * rootItem() const
Returns root item of the model.
T * insertItem(SessionItem *parent=nullptr, const TagRow &tagrow={})
Inserts item into given parent under given tagrow.
Definition: sessionmodel.h:104
Represents a layer, with thickness and color, and possibly populated with particles.
Definition: toyitems.h:52
static const std::string P_THICKNESS
Definition: toyitems.h:54

References ModelView::SessionItem::identifier(), ModelView::SessionModel::insertItem(), ToyItems::LayerItem::P_THICKNESS, ModelView::SessionModel::rootItem(), and ModelView::SessionItem::setProperty().

Here is the call graph for this function:

◆ TEST_F() [2/8]

TEST_F ( ModelUtilsTest  ,
CreateCopy   
)

Definition at line 83 of file modelutils.test.cpp.

84 {
86  auto layer = model.insertItem<ToyItems::LayerItem>();
88 
89  auto modelCopy = Utils::CreateCopy<ToyItems::SampleModel>(model);
90  auto layerCopy = modelCopy->topItem<ToyItems::LayerItem>();
91  EXPECT_EQ(layerCopy->property<double>(ToyItems::LayerItem::P_THICKNESS), 42.0);
92 
93  // Copied model has unique identifiers
94  EXPECT_FALSE(model.rootItem()->identifier() == modelCopy->rootItem()->identifier());
95  EXPECT_FALSE(layerCopy->identifier() == layer->identifier());
96 }

References ModelView::SessionItem::identifier(), ModelView::SessionModel::insertItem(), ToyItems::LayerItem::P_THICKNESS, ModelView::SessionModel::rootItem(), and ModelView::SessionItem::setProperty().

Here is the call graph for this function:

◆ TEST_F() [3/8]

TEST_F ( ModelUtilsTest  ,
DeleteItemFromModel   
)

Definition at line 117 of file modelutils.test.cpp.

118 {
119  ToyItems::SampleModel model;
120 
121  auto item = model.insertItem<SessionItem>();
122  EXPECT_EQ(model.rootItem()->childrenCount(), 1);
124  EXPECT_EQ(model.rootItem()->childrenCount(), 0);
125 }
The main object representing an editable/displayable/serializable entity.
Definition: sessionitem.h:38
int childrenCount() const
Returns total number of children in all tags.
MVVM_MODEL_EXPORT void DeleteItemFromModel(SessionItem *item)
Removes and deletes item from its model.
Definition: modelutils.cpp:54

References ModelView::SessionItem::childrenCount(), ModelView::Utils::DeleteItemFromModel(), ModelView::SessionModel::insertItem(), and ModelView::SessionModel::rootItem().

Here is the call graph for this function:

◆ TEST_F() [4/8]

TEST_F ( ModelUtilsTest  ,
findItems   
)

Definition at line 61 of file modelutils.test.cpp.

62 {
64  EXPECT_EQ(Utils::FindItems<>(&model).size(), 1); // because of rootItem
65  EXPECT_EQ(Utils::FindItems<SessionItem>(&model).size(), 1); // because of rootItem
66  EXPECT_EQ(Utils::FindItems<ToyItems::MultiLayerItem>(&model).size(), 0);
67 
68  auto multilayer1 = model.insertItem<ToyItems::MultiLayerItem>();
70  auto multilayer2 = model.insertItem<ToyItems::MultiLayerItem>();
71 
72  std::vector<ToyItems::MultiLayerItem*> expected2 = {multilayer1, multilayer2};
73  EXPECT_EQ(Utils::FindItems<ToyItems::MultiLayerItem>(&model), expected2);
74 
75  // adding layers to multilayer
76  auto layer1 = model.insertItem<ToyItems::LayerItem>(multilayer1);
77  auto layer2 = model.insertItem<ToyItems::LayerItem>(multilayer2);
78 
79  std::vector<ToyItems::LayerItem*> expected3 = {layer1, layer2};
80  EXPECT_EQ(Utils::FindItems<ToyItems::LayerItem>(&model), expected3);
81 }
Represents multilayer with collection of layers.
Definition: toyitems.h:44
Represents a particle, with a position, and a selection of possible shapes.
Definition: toyitems.h:62

References ModelView::SessionModel::insertItem().

Here is the call graph for this function:

◆ TEST_F() [5/8]

TEST_F ( ModelUtilsTest  ,
MoveItemDown   
)

Definition at line 151 of file modelutils.test.cpp.

152 {
153  ToyItems::SampleModel model;
154 
155  auto multilayer = model.insertItem<ToyItems::MultiLayerItem>();
156  auto layer0 = model.insertItem<ToyItems::LayerItem>(multilayer);
157  auto layer1 = model.insertItem<ToyItems::LayerItem>(multilayer);
158  auto layer2 = model.insertItem<ToyItems::LayerItem>(multilayer);
159 
160  std::vector<SessionItem*> expected = {layer0, layer1, layer2};
161 
162  // original layout
163  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
164 
165  // moving bottom layer down doesn't change the order
166  Utils::MoveDown(layer2);
167  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
168 
169  // moving top layer down doesn't change the order
170  Utils::MoveDown(layer0);
171  expected = {layer1, layer0, layer2};
172  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
173 }
static const std::string T_LAYERS
Definition: toyitems.h:46
MVVM_MODEL_EXPORT void MoveDown(SessionItem *item)
Moves item down (increments row of the item). Works on children belonging to single tag.
Definition: modelutils.cpp:71

References ModelView::SessionModel::insertItem(), ModelView::Utils::MoveDown(), and ToyItems::MultiLayerItem::T_LAYERS.

Here is the call graph for this function:

◆ TEST_F() [6/8]

TEST_F ( ModelUtilsTest  ,
MoveItemUp   
)

Definition at line 127 of file modelutils.test.cpp.

128 {
129  ToyItems::SampleModel model;
130 
131  auto multilayer = model.insertItem<ToyItems::MultiLayerItem>();
132  auto layer0 = model.insertItem<ToyItems::LayerItem>(multilayer);
133  auto layer1 = model.insertItem<ToyItems::LayerItem>(multilayer);
134  auto layer2 = model.insertItem<ToyItems::LayerItem>(multilayer);
135 
136  std::vector<SessionItem*> expected = {layer0, layer1, layer2};
137 
138  // original layout
139  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
140 
141  // moving top layer up doesn't change the order
142  Utils::MoveUp(layer0);
143  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
144 
145  // moving bottom layer up does change the order
146  Utils::MoveUp(layer2);
147  expected = {layer0, layer2, layer1};
148  EXPECT_EQ(multilayer->getItems(ToyItems::MultiLayerItem::T_LAYERS), expected);
149 }
MVVM_MODEL_EXPORT void MoveUp(SessionItem *item)
Moves item up (decrements row of the item). Works on children belonging to single tag.
Definition: modelutils.cpp:63

References ModelView::SessionModel::insertItem(), ModelView::Utils::MoveUp(), and ToyItems::MultiLayerItem::T_LAYERS.

Here is the call graph for this function:

◆ TEST_F() [7/8]

TEST_F ( ModelUtilsTest  ,
topItem   
)

Definition at line 29 of file modelutils.test.cpp.

30 {
32  EXPECT_EQ(Utils::TopItem<>(&model), nullptr);
33  EXPECT_EQ(Utils::TopItem<SessionItem>(&model), nullptr);
34  EXPECT_EQ(Utils::TopItem<ToyItems::MultiLayerItem>(&model), nullptr);
35 
36  auto multilayer1 = model.insertItem<ToyItems::MultiLayerItem>();
38 
39  EXPECT_EQ(Utils::TopItem<>(&model), multilayer1);
40  EXPECT_EQ(Utils::TopItem<SessionItem>(&model), multilayer1);
41  EXPECT_EQ(Utils::TopItem<ToyItems::MultiLayerItem>(&model), multilayer1);
42 }

References ModelView::SessionModel::insertItem().

Here is the call graph for this function:

◆ TEST_F() [8/8]

TEST_F ( ModelUtilsTest  ,
topItems   
)

Definition at line 44 of file modelutils.test.cpp.

45 {
47  EXPECT_EQ(Utils::TopItems<>(&model).size(), 0);
48  EXPECT_EQ(Utils::TopItems<SessionItem>(&model).size(), 0);
49  EXPECT_EQ(Utils::TopItems<ToyItems::MultiLayerItem>(&model).size(), 0);
50 
51  auto multilayer1 = model.insertItem<ToyItems::MultiLayerItem>();
52  auto particle = model.insertItem<ToyItems::ParticleItem>();
53  auto multilayer2 = model.insertItem<ToyItems::MultiLayerItem>();
54 
55  std::vector<SessionItem*> expected1 = {multilayer1, particle, multilayer2};
56  EXPECT_EQ(Utils::TopItems<SessionItem>(&model), expected1);
57  std::vector<ToyItems::MultiLayerItem*> expected2 = {multilayer1, multilayer2};
58  EXPECT_EQ(Utils::TopItems<ToyItems::MultiLayerItem>(&model), expected2);
59 }

References ModelView::SessionModel::insertItem().

Here is the call graph for this function: