preCICE v3.2.0
Loading...
Searching...
No Matches
StorageTest.cpp
Go to the documentation of this file.
1#include <Eigen/Core>
3#include "testing/Testing.hpp"
4#include "time/Storage.hpp"
5
6using namespace precice;
7using namespace precice::time;
8
10BOOST_AUTO_TEST_SUITE(StorageTests)
11
12// create storage and test for correct initial values.
14BOOST_AUTO_TEST_CASE(testInitialize)
15{
17 auto storage = Storage();
18 int nValues = 3;
19 BOOST_TEST(storage.nTimes() == 0);
20 storage.setSampleAtTime(0, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
21 BOOST_TEST(storage.nDofs() == nValues);
22 BOOST_TEST(storage.nTimes() == 1);
23 for (int i = 0; i < nValues; i++) {
24 BOOST_TEST(storage.getSampleAtOrAfter(0).values(i) == 1);
25 BOOST_TEST(storage.getSampleAtOrAfter(0.5).values(i) == 1);
26 BOOST_TEST(storage.getSampleAtOrAfter(1).values(i) == 1);
27 }
28}
29
30// create storage and trim it.
33{
35 auto storage = Storage();
36 int nValues = 3;
37 BOOST_TEST(storage.nTimes() == 0);
38 storage.setSampleAtTime(0, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
39 BOOST_TEST(storage.nDofs() == nValues);
40 BOOST_TEST(storage.nTimes() == 1);
41 BOOST_TEST(storage.maxStoredTime() == 0.0);
42 storage.setSampleAtTime(1, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
43 BOOST_TEST(storage.nDofs() == nValues);
44 BOOST_TEST(storage.nTimes() == 2);
45 BOOST_TEST(storage.maxStoredTime() == 1.0);
46 storage.trim();
47 BOOST_TEST(storage.nDofs() == nValues);
48 BOOST_TEST(storage.nTimes() == 1);
49 BOOST_TEST(storage.maxStoredTime() == 0.0);
50}
51
52// create storage, add some values and then move to next window.
55{
57 auto storage = Storage();
58 int nValues = 3;
59 BOOST_TEST(storage.nTimes() == 0);
60 storage.setSampleAtTime(0, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
61 BOOST_TEST(storage.nDofs() == nValues);
62 BOOST_TEST(storage.nTimes() == 1);
63 BOOST_TEST(storage.maxStoredTime() == 0.0);
64 storage.setSampleAtTime(0.5, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
65 BOOST_TEST(storage.nTimes() == 2);
66 BOOST_TEST(storage.maxStoredTime() == 0.5);
67 storage.setSampleAtTime(1.0, time::Sample{1, Eigen::VectorXd::Zero(nValues)});
68 BOOST_TEST(storage.nTimes() == 3);
69 BOOST_TEST(storage.maxStoredTime() == 1.0);
70 for (int i = 0; i < nValues; i++) {
71 BOOST_TEST(storage.getSampleAtOrAfter(0).values(i) == 1);
72 BOOST_TEST(storage.getSampleAtOrAfter(0.5).values(i) == 1);
73 BOOST_TEST(storage.getSampleAtOrAfter(1).values(i) == 0);
74 }
75 storage.move();
76 BOOST_TEST(storage.nDofs() == nValues);
77 BOOST_TEST(storage.nTimes() == 1);
78 BOOST_TEST(storage.maxStoredTime() == 1.0);
79 for (int i = 0; i < nValues; i++) {
80 BOOST_TEST(storage.getSampleAtOrAfter(0).values(i) == 0);
81 BOOST_TEST(storage.getSampleAtOrAfter(1).values(i) == 0);
82 }
83}
84
85// get times and values
87BOOST_AUTO_TEST_CASE(testGetTimesAndValues)
88{
90 auto storage = Storage();
91 int nValues = 3;
92 storage.setSampleAtTime(0, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
93 storage.setSampleAtTime(0.5, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
94 storage.setSampleAtTime(1.0, time::Sample{1, Eigen::VectorXd::Zero(nValues)});
95 auto times = storage.getTimes();
96 BOOST_TEST(times[0] == 0.0);
97 BOOST_TEST(times[1] == 0.5);
98 BOOST_TEST(times[2] == 1.00);
99 auto timesAndValues = storage.getTimesAndValues();
100 BOOST_TEST(timesAndValues.first[0] == 0.0);
101 BOOST_TEST(timesAndValues.first[1] == 0.5);
102 BOOST_TEST(timesAndValues.first[2] == 1.00);
103 for (int i = 0; i < nValues; i++) {
104 BOOST_TEST(timesAndValues.second.col(0)(i) == 1);
105 BOOST_TEST(timesAndValues.second.col(1)(i) == 1);
106 BOOST_TEST(timesAndValues.second.col(2)(i) == 0);
107 }
108}
109
110BOOST_AUTO_TEST_SUITE(ExtrapolationTests)
111PRECICE_TEST_SETUP(1_rank)
112BOOST_AUTO_TEST_CASE(testExtrapolateDataZerothOrder)
113{
114 PRECICE_TEST();
115
116 auto storage = Storage();
117 const int nValues = 1;
118
119 storage.setSampleAtTime(0.0, time::Sample{1, Eigen::VectorXd::Zero(nValues)});
120 auto times = storage.getTimes();
121 BOOST_TEST(times[0] == 0.0);
122 auto timesAndValues = storage.getTimesAndValues();
123 BOOST_TEST(timesAndValues.second.col(0)(0) == 0.0);
124
125 storage.setSampleAtTime(1.0, time::Sample{1, Eigen::VectorXd::Ones(nValues)});
126 times = storage.getTimes();
127 BOOST_TEST(times[0] == 0.0);
128 BOOST_TEST(times[1] == 1.0);
129 timesAndValues = storage.getTimesAndValues();
130 BOOST_TEST(timesAndValues.second.col(0)(0) == 0.0);
131 BOOST_TEST(timesAndValues.second.col(1)(0) == 1.0);
132
133 storage.move();
134
135 times = storage.getTimes();
136 BOOST_TEST(times[0] == 1.0);
137 timesAndValues = storage.getTimesAndValues();
138 BOOST_TEST(timesAndValues.second.col(0)(0) == 1.0);
139
140 // make sure that subcycling is ignored for extrapolation
141 storage.trim();
142 storage.setSampleAtTime(1.5, time::Sample{1, 2 * Eigen::VectorXd::Ones(nValues)});
143 storage.setSampleAtTime(2.0, time::Sample{1, 3 * Eigen::VectorXd::Ones(nValues)});
144
145 times = storage.getTimes();
146 BOOST_TEST(times[0] == 1.0);
147 BOOST_TEST(times[1] == 1.5);
148 BOOST_TEST(times[2] == 2.0);
149
150 storage.move();
151
152 times = storage.getTimes();
153 BOOST_TEST(times[0] == 2.0);
154 timesAndValues = storage.getTimesAndValues();
155 BOOST_TEST(timesAndValues.second.col(0)(0) == 3.0);
156}
157
BOOST_AUTO_TEST_CASE(testIQNIMVJPPWithSubsteps)
BOOST_AUTO_TEST_SUITE(PreProcess)
BOOST_AUTO_TEST_SUITE_END()
#define PRECICE_TEST()
Definition Testing.hpp:39
#define PRECICE_TEST_SETUP(...)
Creates and attaches a TestSetup to a Boost test case.
Definition Testing.hpp:29
contains the time interpolation logic.
Definition Sample.hpp:8
Main namespace of the precice library.