##// END OF EJS Templates
Merge branch 'feature/PurgeDataSeries' into develop
Merge branch 'feature/PurgeDataSeries' into develop

File last commit:

r556:552e9eaf7536
r633:e899bacb01d9 merge
Show More
TestVariableCacheController.cpp
331 lines | 13.6 KiB | text/x-c | CppLexer
/ core / tests / Variable / TestVariableCacheController.cpp
#include <Variable/Variable.h>
#include <Variable/VariableCacheController.h>
#include <QObject>
#include <QtTest>
#include <memory>
class TestVariableCacheController : public QObject {
Q_OBJECT
private slots:
void testProvideNotInCacheDateTimeList();
void testAddDateTime();
};
void TestVariableCacheController::testProvideNotInCacheDateTimeList()
{
VariableCacheController variableCacheController{};
auto ts0 = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 0, 0}};
auto te0 = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}};
auto sqp0 = SqpRange{DateUtils::secondsSinceEpoch(ts0), DateUtils::secondsSinceEpoch(te0)};
auto ts1 = QDateTime{QDate{2017, 01, 01}, QTime{2, 6, 0, 0}};
auto te1 = QDateTime{QDate{2017, 01, 01}, QTime{2, 8, 0, 0}};
auto sqp1 = SqpRange{DateUtils::secondsSinceEpoch(ts1), DateUtils::secondsSinceEpoch(te1)};
auto ts2 = QDateTime{QDate{2017, 01, 01}, QTime{2, 18, 0, 0}};
auto te2 = QDateTime{QDate{2017, 01, 01}, QTime{2, 20, 0, 0}};
auto sqp2 = SqpRange{DateUtils::secondsSinceEpoch(ts2), DateUtils::secondsSinceEpoch(te2)};
auto var0 = std::make_shared<Variable>("", sqp0);
variableCacheController.addDateTime(var0, sqp0);
variableCacheController.addDateTime(var0, sqp1);
variableCacheController.addDateTime(var0, sqp2);
// first case [ts,te] < ts0
auto ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}};
auto te = QDateTime{QDate{2017, 01, 01}, QTime{2, 1, 0, 0}};
auto sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
auto notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
auto notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// second case ts < ts0 && ts0 < te <= te0
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts0));
// 3th case ts < ts0 && te0 < te <= ts1
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 2);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts0));
notInCacheSqp = notInCach.at(1);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 4th case ts < ts0 && ts1 < te <= te1
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 7, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 2);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts0));
notInCacheSqp = notInCach.at(1);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts1));
// 5th case ts < ts0 && te3 < te
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 22, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 4);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts0));
notInCacheSqp = notInCach.at(1);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts1));
notInCacheSqp = notInCach.at(2);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te1));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts2));
notInCacheSqp = notInCach.at(3);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te2));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 6th case ts2 < ts
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 45, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 47, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 7th case ts = te0 && te < ts1
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 8th case ts0 < ts < te0 && te < ts1
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 9th case ts0 < ts < te0 && ts1 < te < te1
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 7, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te0));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts1));
// 10th case te1 < ts < te < ts2
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 9, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 10, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 1);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 11th case te0 < ts < ts1 && te3 < te
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 47, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 3);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts1));
notInCacheSqp = notInCach.at(1);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te1));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts2));
notInCacheSqp = notInCach.at(2);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te2));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 12th case te0 < ts < ts1 && te3 < te
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 10, 0, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 2);
notInCacheSqp = notInCach.first();
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(ts));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(ts1));
notInCacheSqp = notInCach.at(1);
QCOMPARE(notInCacheSqp.m_TStart, DateUtils::secondsSinceEpoch(te1));
QCOMPARE(notInCacheSqp.m_TEnd, DateUtils::secondsSinceEpoch(te));
// 12th case ts0 < ts < te0
ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 10, 0}};
te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 50, 0}};
sqp = SqpRange{DateUtils::secondsSinceEpoch(ts), DateUtils::secondsSinceEpoch(te)};
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp);
QCOMPARE(notInCach.size(), 0);
}
void TestVariableCacheController::testAddDateTime()
{
VariableCacheController variableCacheController{};
auto ts0 = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 0, 0}};
auto te0 = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}};
auto sqp0 = SqpRange{DateUtils::secondsSinceEpoch(ts0), DateUtils::secondsSinceEpoch(te0)};
auto ts1 = QDateTime{QDate{2017, 01, 01}, QTime{2, 6, 0, 0}};
auto te1 = QDateTime{QDate{2017, 01, 01}, QTime{2, 8, 0, 0}};
auto sqp1 = SqpRange{DateUtils::secondsSinceEpoch(ts1), DateUtils::secondsSinceEpoch(te1)};
auto ts2 = QDateTime{QDate{2017, 01, 01}, QTime{2, 18, 0, 0}};
auto te2 = QDateTime{QDate{2017, 01, 01}, QTime{2, 20, 0, 0}};
auto sqp2 = SqpRange{DateUtils::secondsSinceEpoch(ts2), DateUtils::secondsSinceEpoch(te2)};
auto ts01 = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}};
auto te01 = QDateTime{QDate{2017, 01, 01}, QTime{2, 6, 0, 0}};
auto sqp01 = SqpRange{DateUtils::secondsSinceEpoch(ts01), DateUtils::secondsSinceEpoch(te01)};
auto ts3 = QDateTime{QDate{2017, 01, 01}, QTime{2, 14, 0, 0}};
auto te3 = QDateTime{QDate{2017, 01, 01}, QTime{2, 16, 0, 0}};
auto sqp3 = SqpRange{DateUtils::secondsSinceEpoch(ts3), DateUtils::secondsSinceEpoch(te3)};
auto ts03 = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}};
auto te03 = QDateTime{QDate{2017, 01, 01}, QTime{2, 22, 0, 0}};
auto sqp03 = SqpRange{DateUtils::secondsSinceEpoch(ts03), DateUtils::secondsSinceEpoch(te03)};
auto var0 = std::make_shared<Variable>("", sqp0);
// First case: add the first interval to the variable :sqp0
variableCacheController.addDateTime(var0, sqp0);
auto dateCacheList = variableCacheController.dateCacheList(var0);
QCOMPARE(dateCacheList.count(), 1);
auto dateCache = dateCacheList.at(0);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts0));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te0));
// 2nd case: add a second interval : sqp1 > sqp0
variableCacheController.addDateTime(var0, sqp1);
dateCacheList = variableCacheController.dateCacheList(var0);
QCOMPARE(dateCacheList.count(), 2);
dateCache = dateCacheList.at(0);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts0));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te0));
dateCache = dateCacheList.at(1);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts1));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te1));
// 3th case: merge sqp0 & sqp1 with sqp01
variableCacheController.addDateTime(var0, sqp01);
dateCacheList = variableCacheController.dateCacheList(var0);
QCOMPARE(dateCacheList.count(), 1);
dateCache = dateCacheList.at(0);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts0));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te1));
// 4th case: add a second interval : sqp1 > sqp0
variableCacheController.addDateTime(var0, sqp2);
variableCacheController.addDateTime(var0, sqp3);
dateCacheList = variableCacheController.dateCacheList(var0);
QCOMPARE(dateCacheList.count(), 3);
dateCache = dateCacheList.at(0);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts0));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te1));
dateCache = dateCacheList.at(1);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts3));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te3));
dateCache = dateCacheList.at(2);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts2));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te2));
// 5th case: merge all interval
variableCacheController.addDateTime(var0, sqp03);
dateCacheList = variableCacheController.dateCacheList(var0);
QCOMPARE(dateCacheList.count(), 1);
dateCache = dateCacheList.at(0);
QCOMPARE(dateCache.m_TStart, DateUtils::secondsSinceEpoch(ts0));
QCOMPARE(dateCache.m_TEnd, DateUtils::secondsSinceEpoch(te03));
}
QTEST_MAIN(TestVariableCacheController)
#include "TestVariableCacheController.moc"