##// END OF EJS Templates
VariableController2 tests refactoring...
jeandet -
r3:7c9c9e90e0b8
parent child
Show More
@@ -44,7 +44,7 public:
44
44
45 /// @return the number of points hold by the variable. The number of points is updated each time
45 /// @return the number of points hold by the variable. The number of points is updated each time
46 /// the data series changes
46 /// the data series changes
47 int nbPoints() const noexcept;
47 unsigned int nbPoints() const noexcept;
48
48
49 /// Returns the real range of the variable, i.e. the min and max x-axis values of the data
49 /// Returns the real range of the variable, i.e. the min and max x-axis values of the data
50 /// series between the range of the variable. The real range is updated each time the variable
50 /// series between the range of the variable. The real range is updated each time the variable
@@ -100,7 +100,7 struct Variable::VariablePrivate {
100 QVariantHash m_Metadata;
100 QVariantHash m_Metadata;
101 std::shared_ptr<IDataSeries> m_DataSeries;
101 std::shared_ptr<IDataSeries> m_DataSeries;
102 DateTimeRange m_RealRange;
102 DateTimeRange m_RealRange;
103 int m_NbPoints;
103 unsigned int m_NbPoints;
104 DataSeriesType m_Type;
104 DataSeriesType m_Type;
105
105
106 QReadWriteLock m_Lock;
106 QReadWriteLock m_Lock;
@@ -171,7 +171,7 void Variable::setCacheRange(const DateTimeRange &cacheRange) noexcept
171 impl->unlock();
171 impl->unlock();
172 }
172 }
173
173
174 int Variable::nbPoints() const noexcept
174 unsigned int Variable::nbPoints() const noexcept
175 {
175 {
176 return impl->m_NbPoints;
176 return impl->m_NbPoints;
177 }
177 }
@@ -1,4 +1,6
1 #include <cmath>
1 #include <cmath>
2 #include <algorithm>
3 #include <numeric>
2 #include <QtTest>
4 #include <QtTest>
3 #include <QObject>
5 #include <QObject>
4 #include <Variable/VariableController2.h>
6 #include <Variable/VariableController2.h>
@@ -8,12 +10,13
8 #include <Data/DataProviderParameters.h>
10 #include <Data/DataProviderParameters.h>
9 #include <Common/containers.h>
11 #include <Common/containers.h>
10
12
11 class FakeProvider: public IDataProvider
13 template<int slope>
14 class SimpleRange: public IDataProvider
12 {
15 {
13 public:
16 public:
14 FakeProvider() = default;
17 SimpleRange() = default;
15
18
16 std::shared_ptr<IDataProvider> clone() const override{ return std::make_shared<FakeProvider>(); }
19 std::shared_ptr<IDataProvider> clone() const override{ return std::make_shared<SimpleRange>(); }
17
20
18 IDataSeries* getData(const DataProviderParameters &parameters) override
21 IDataSeries* getData(const DataProviderParameters &parameters) override
19 {
22 {
@@ -24,7 +27,7 public:
24 for(auto i = tstart;i<tend;i+=1.) //1 seconde data resolution
27 for(auto i = tstart;i<tend;i+=1.) //1 seconde data resolution
25 {
28 {
26 x.push_back(i);
29 x.push_back(i);
27 y.push_back(i);
30 y.push_back(i*slope);
28 }
31 }
29 auto serie = new ScalarSeries(std::move(x),std::move(y),Unit("Secondes",true),Unit("Volts",false));
32 auto serie = new ScalarSeries(std::move(x),std::move(y),Unit("Secondes",true),Unit("Volts",false));
30 return serie;
33 return serie;
@@ -45,6 +48,37 public:
45
48
46 };
49 };
47
50
51
52 template <class T>
53 auto sumdiff(T begin, T end)
54 {
55 std::vector<double> diff_vect(end-begin-1);
56 auto diff = [](auto next,auto item)
57 {
58 return next.value() - item.value();
59 };
60 std::transform (begin+1, end, begin, diff_vect.begin(),diff);
61 return std::accumulate(diff_vect.cbegin(), diff_vect.cend(), 0);
62 }
63
64 template <int slope=1>
65 struct RangeType
66 {
67 static void check_properties(std::shared_ptr<Variable> v, DateTimeRange r)
68 {
69 auto s = sumdiff(v->dataSeries()->cbegin(), v->dataSeries()->cend()) / slope;
70 QCOMPARE(v->nbPoints(), int(s)+1);
71 QCOMPARE(r.m_TStart, v->dataSeries()->begin()->value()/slope);
72 }
73 };
74
75 template <class T>
76 void check_variable_state(std::shared_ptr<Variable> v, DateTimeRange r)
77 {
78 QCOMPARE(v->nbPoints(), int(r.delta()));
79 T::check_properties(v,r);
80 }
81
48 class TestVariableController2 : public QObject
82 class TestVariableController2 : public QObject
49 {
83 {
50 Q_OBJECT
84 Q_OBJECT
@@ -61,7 +95,7 private slots:
61 VariableController2 vc;
95 VariableController2 vc;
62 bool callbackCalled = false;
96 bool callbackCalled = false;
63 connect(&vc,&VariableController2::variableAdded, [&callbackCalled](std::shared_ptr<Variable>){callbackCalled=true;});
97 connect(&vc,&VariableController2::variableAdded, [&callbackCalled](std::shared_ptr<Variable>){callbackCalled=true;});
64 auto provider = std::make_shared<FakeProvider>();
98 auto provider = std::make_shared<SimpleRange<1>>();
65 QVERIFY(!callbackCalled);
99 QVERIFY(!callbackCalled);
66 auto var1 = vc.createVariable("var1",{},provider,DateTimeRange());
100 auto var1 = vc.createVariable("var1",{},provider,DateTimeRange());
67 QVERIFY(SciQLop::containers::contains(vc.variables(), var1));
101 QVERIFY(SciQLop::containers::contains(vc.variables(), var1));
@@ -73,7 +107,7 private slots:
73 VariableController2 vc;
107 VariableController2 vc;
74 bool callbackCalled = false;
108 bool callbackCalled = false;
75 connect(&vc,&VariableController2::variableDeleted, [&callbackCalled](std::shared_ptr<Variable>){callbackCalled=true;});
109 connect(&vc,&VariableController2::variableDeleted, [&callbackCalled](std::shared_ptr<Variable>){callbackCalled=true;});
76 auto provider = std::make_shared<FakeProvider>();
110 auto provider = std::make_shared<SimpleRange<1>>();
77 auto var1 = vc.createVariable("var1",{},provider,DateTimeRange());
111 auto var1 = vc.createVariable("var1",{},provider,DateTimeRange());
78 QVERIFY(SciQLop::containers::contains(vc.variables(), var1));
112 QVERIFY(SciQLop::containers::contains(vc.variables(), var1));
79 QVERIFY(!callbackCalled);
113 QVERIFY(!callbackCalled);
@@ -85,20 +119,17 private slots:
85 void testGetData()
119 void testGetData()
86 {
120 {
87 VariableController2 vc;
121 VariableController2 vc;
88 auto provider = std::make_shared<FakeProvider>();
122 auto provider = std::make_shared<SimpleRange<10>>();
89 auto range1 = DateTimeRange::fromDateTime(QDate(2018,8,7),QTime(14,00),
123 auto range1 = DateTimeRange::fromDateTime(QDate(2018,8,7),QTime(14,00),
90 QDate(2018,8,7),QTime(16,00));
124 QDate(2018,8,7),QTime(16,00));
91 auto range2 = DateTimeRange::fromDateTime(QDate(2018,8,7),QTime(12,00),
125 auto range2 = DateTimeRange::fromDateTime(QDate(2018,8,7),QTime(12,00),
92 QDate(2018,8,7),QTime(18,00));
126 QDate(2018,8,7),QTime(18,00));
93 auto var1 = vc.createVariable("var1", {}, provider, range1);
127 auto var1 = vc.createVariable("var1", {}, provider, range1);
94 QCOMPARE(var1->nbPoints(), int(range1.delta()));
128 check_variable_state<RangeType<10>>(var1, range1);
95 vc.changeRange(var1, range2);
129 vc.changeRange(var1, range2);
96 QCOMPARE(var1->nbPoints(), int(range2.delta()));
130 check_variable_state<RangeType<10>>(var1, range2);
97
98 }
131 }
99
132
100 private:
101
102 };
133 };
103
134
104
135
General Comments 0
You need to be logged in to leave comments. Login now