##// END OF EJS Templates
Added contains and intersect tests to DateTimeRange...
jeandet -
r7:368fd49a8e6b
parent child
Show More
@@ -1,106 +1,154
1 #include <QObject>
1 #include <QObject>
2 #include <QtTest>
2 #include <QtTest>
3 #include <QUuid>
3 #include <QUuid>
4 #include <limits>
4 #include <limits>
5
5
6
6
7 #include <Data/DateTimeRange.h>
7 #include <Data/DateTimeRange.h>
8 #include <Common/Numeric.h>
8 #include <Common/Numeric.h>
9
9
10 Q_DECLARE_METATYPE(Seconds<double>);
10 Q_DECLARE_METATYPE(Seconds<double>);
11
11
12 DateTimeRange computeZoom(QDateTime start, QDateTime stop, double zoom)
12 DateTimeRange computeZoom(QDateTime start, QDateTime stop, double zoom)
13 {
13 {
14 double start_epoch = start.toMSecsSinceEpoch();
14 double start_epoch = start.toMSecsSinceEpoch();
15 double stop_epoch = stop.toMSecsSinceEpoch();
15 double stop_epoch = stop.toMSecsSinceEpoch();
16 auto delta = stop_epoch - start_epoch;
16 auto delta = stop_epoch - start_epoch;
17 auto dt_ms = (zoom-1.)*(double(delta))/2.;
17 auto dt_ms = (zoom-1.)*(double(delta))/2.;
18 return DateTimeRange{(start_epoch - dt_ms)/1000., (stop_epoch + dt_ms)/1000.};
18 return DateTimeRange{(start_epoch - dt_ms)/1000., (stop_epoch + dt_ms)/1000.};
19 }
19 }
20
20
21 class TestDateTimeRange: public QObject {
21 class TestDateTimeRange: public QObject {
22 Q_OBJECT
22 Q_OBJECT
23
23
24 private slots:
24 private slots:
25 void testRangeDelta_data()
25 void testRangeDelta_data()
26 {
26 {
27 QTest::addColumn<QDateTime>("tstart");
27 QTest::addColumn<QDateTime>("tstart");
28 QTest::addColumn<QDateTime>("tend");
28 QTest::addColumn<QDateTime>("tend");
29 QTest::addColumn<double>("expected");
29 QTest::addColumn<double>("expected");
30 auto now = QDateTime::currentDateTime();
30 auto now = QDateTime::currentDateTime();
31 auto yesterday = QDateTime::currentDateTime().addDays(-1);
31 auto yesterday = QDateTime::currentDateTime().addDays(-1);
32 QTest::newRow("No delta") << now << now << 0.;
32 QTest::newRow("No delta") << now << now << 0.;
33 QTest::newRow("One day delta") << yesterday << now << 60.*60.*24.;
33 QTest::newRow("One day delta") << yesterday << now << 60.*60.*24.;
34 QTest::newRow("Minus one day delta") << now << yesterday << -60.*60.*24.;
34 QTest::newRow("Minus one day delta") << now << yesterday << -60.*60.*24.;
35 }
35 }
36
36
37 void testRangeDelta()
37 void testRangeDelta()
38 {
38 {
39 QFETCH(QDateTime,tstart);
39 QFETCH(QDateTime,tstart);
40 QFETCH(QDateTime,tend);
40 QFETCH(QDateTime,tend);
41 QFETCH(double,expected);
41 QFETCH(double,expected);
42 auto range = DateTimeRange::fromDateTime(tstart, tend);
42 auto range = DateTimeRange::fromDateTime(tstart, tend);
43 double delta = range.delta();
43 double delta = range.delta();
44 // Since it is built from QDateTime don't expect better resolution
44 // Since it is built from QDateTime don't expect better resolution
45 QVERIFY((delta-expected) <= 0.002);
45 QVERIFY((delta-expected) <= 0.002);
46 }
46 }
47
47
48 void testRangeShift_data()
48 void testRangeShift_data()
49 {
49 {
50 QTest::addColumn<DateTimeRange>("initial");
50 QTest::addColumn<DateTimeRange>("initial");
51 QTest::addColumn<Seconds<double>>("shift");
51 QTest::addColumn<Seconds<double>>("shift");
52 QTest::addColumn<DateTimeRange>("expected");
52 QTest::addColumn<DateTimeRange>("expected");
53 auto now = QDateTime::currentDateTime();
53 auto now = QDateTime::currentDateTime();
54 auto yestd = QDateTime::currentDateTime().addDays(-1);
54 auto yestd = QDateTime::currentDateTime().addDays(-1);
55 auto range = DateTimeRange::fromDateTime(yestd, now);
55 auto range = DateTimeRange::fromDateTime(yestd, now);
56 QTest::newRow("No shift") << range << Seconds<double>{0.} << range;
56 QTest::newRow("No shift") << range << Seconds<double>{0.} << range;
57
57
58 QTest::newRow("One milisecond left") << range << Seconds<double>{-.001} <<
58 QTest::newRow("One milisecond left") << range << Seconds<double>{-.001} <<
59 DateTimeRange::fromDateTime(yestd.addMSecs(-1.), now.addMSecs(-1.));
59 DateTimeRange::fromDateTime(yestd.addMSecs(-1.), now.addMSecs(-1.));
60 QTest::newRow("One milisecond right") << range << Seconds<double>{.001} <<
60 QTest::newRow("One milisecond right") << range << Seconds<double>{.001} <<
61 DateTimeRange::fromDateTime(yestd.addMSecs(1.), now.addMSecs(1.));
61 DateTimeRange::fromDateTime(yestd.addMSecs(1.), now.addMSecs(1.));
62 QTest::newRow("One second left") << range << Seconds<double>{-1.} <<
62 QTest::newRow("One second left") << range << Seconds<double>{-1.} <<
63 DateTimeRange::fromDateTime(yestd.addSecs(-1.), now.addSecs(-1.));
63 DateTimeRange::fromDateTime(yestd.addSecs(-1.), now.addSecs(-1.));
64 QTest::newRow("One second right") << range << Seconds<double>{1.} <<
64 QTest::newRow("One second right") << range << Seconds<double>{1.} <<
65 DateTimeRange::fromDateTime(yestd.addSecs(1.), now.addSecs(1.));
65 DateTimeRange::fromDateTime(yestd.addSecs(1.), now.addSecs(1.));
66 QTest::newRow("One year left") << range << Seconds<double>{-365.*24.*60.*60.} <<
66 QTest::newRow("One year left") << range << Seconds<double>{-365.*24.*60.*60.} <<
67 DateTimeRange::fromDateTime(yestd.addYears(-1.), now.addYears(-1.));
67 DateTimeRange::fromDateTime(yestd.addYears(-1.), now.addYears(-1.));
68 QTest::newRow("One year right") << range << Seconds<double>{365.*24.*60.*60.} <<
68 QTest::newRow("One year right") << range << Seconds<double>{365.*24.*60.*60.} <<
69 DateTimeRange::fromDateTime(yestd.addYears(1.), now.addYears(1.));
69 DateTimeRange::fromDateTime(yestd.addYears(1.), now.addYears(1.));
70 }
70 }
71 void testRangeShift()
71 void testRangeShift()
72 {
72 {
73 QFETCH(DateTimeRange,initial);
73 QFETCH(DateTimeRange,initial);
74 QFETCH(Seconds<double>,shift);
74 QFETCH(Seconds<double>,shift);
75 QFETCH(DateTimeRange,expected);
75 QFETCH(DateTimeRange,expected);
76 QCOMPARE(initial+shift, expected);
76 QCOMPARE(initial+shift, expected);
77 }
77 }
78
78
79 void testRangeZoom_data()
79 void testRangeZoom_data()
80 {
80 {
81 QTest::addColumn<DateTimeRange>("initial");
81 QTest::addColumn<DateTimeRange>("initial");
82 QTest::addColumn<double>("zoom");
82 QTest::addColumn<double>("zoom");
83 QTest::addColumn<DateTimeRange>("expected");
83 QTest::addColumn<DateTimeRange>("expected");
84 auto now = QDateTime::currentDateTime();
84 auto now = QDateTime::currentDateTime();
85 auto yestd = QDateTime::currentDateTime().addDays(-1);
85 auto yestd = QDateTime::currentDateTime().addDays(-1);
86 auto range = DateTimeRange::fromDateTime(yestd, now);
86 auto range = DateTimeRange::fromDateTime(yestd, now);
87 QTest::newRow("No zoom") << range << 1. << range;
87 QTest::newRow("No zoom") << range << 1. << range;
88
88
89 QTest::newRow("Zoom IN 0.001") << range << 1.001 <<
89 QTest::newRow("Zoom IN 0.001") << range << 1.001 <<
90 computeZoom(yestd, now, 1.001);
90 computeZoom(yestd, now, 1.001);
91 QTest::newRow("Zoom OUT 0.001") << range << 0.999 <<
91 QTest::newRow("Zoom OUT 0.001") << range << 0.999 <<
92 computeZoom(yestd, now, 0.999);
92 computeZoom(yestd, now, 0.999);
93 }
93 }
94 void testRangeZoom()
94 void testRangeZoom()
95 {
95 {
96 QFETCH(DateTimeRange,initial);
96 QFETCH(DateTimeRange,initial);
97 QFETCH(double,zoom);
97 QFETCH(double,zoom);
98 QFETCH(DateTimeRange,expected);
98 QFETCH(DateTimeRange,expected);
99 QCOMPARE(initial*zoom, expected);
99 QCOMPARE(initial*zoom, expected);
100 }
100 }
101
101
102 void testRangeContains_data()
103 {
104 QTest::addColumn<DateTimeRange>("range");
105 QTest::addColumn<DateTimeRange>("range2");
106 QTest::addColumn<bool>("contains");
107 auto now = QDateTime::currentDateTime();
108 auto yestd = QDateTime::currentDateTime().addDays(-1);
109 auto range = DateTimeRange::fromDateTime(yestd, now);
110 QTest::newRow("Same range") << range << range << true;
111 QTest::newRow("Smaller range") << range << range * 0.8 << true;
112 QTest::newRow("Bigger range") << range << range * 1.2 << false;
113 QTest::newRow("Shifted range with overlap") << range << range + Seconds<double>{1000.} << false;
114 QTest::newRow("Shifted range without overlap") << range << range + Seconds<double>{24.*60.*60.*10} << false;
115
116 }
117 void testRangeContains()
118 {
119 QFETCH(DateTimeRange,range);
120 QFETCH(DateTimeRange,range2);
121 QFETCH(bool,contains);
122 QCOMPARE(range.contains(range2), contains);
123 }
124
125 void testRangeIntersect_data()
126 {
127 QTest::addColumn<DateTimeRange>("range");
128 QTest::addColumn<DateTimeRange>("range2");
129 QTest::addColumn<bool>("contains");
130 auto now = QDateTime::currentDateTime();
131 auto yestd = QDateTime::currentDateTime().addDays(-1);
132 auto tomorrow = QDateTime::currentDateTime().addDays(1);
133 auto range = DateTimeRange::fromDateTime(yestd, now);
134 auto range2 = DateTimeRange::fromDateTime(now, tomorrow);
135 QTest::newRow("Same range") << range << range << true;
136 QTest::newRow("Smaller range") << range << range * 0.8 << true;
137 QTest::newRow("Bigger range") << range << range * 1.2 << true;
138 QTest::newRow("Shifted range with overlap") << range << range + Seconds<double>{1000.} << true;
139 QTest::newRow("Shifted range with overlaping boundary") << range << range2 << true;
140 QTest::newRow("Shifted range without overlap") << range << range + Seconds<double>{24.*60.*60.*10} << false;
141
142 }
143 void testRangeIntersect()
144 {
145 QFETCH(DateTimeRange,range);
146 QFETCH(DateTimeRange,range2);
147 QFETCH(bool,contains);
148 QCOMPARE(range.intersect(range2), contains);
149 }
102 };
150 };
103 QTEST_MAIN(TestDateTimeRange)
151 QTEST_MAIN(TestDateTimeRange)
104
152
105
153
106 #include "TestDateTimeRange.moc"
154 #include "TestDateTimeRange.moc"
General Comments 0
You need to be logged in to leave comments. Login now