##// END OF EJS Templates
Reads variable's metadata to retrieve the type of data series (scalar, vector, spectrogram)
Reads variable's metadata to retrieve the type of data series (scalar, vector, spectrogram)

File last commit:

r756:a7f60f6512e6
r1279:88939ef97b8f
Show More
TestVariableCacheController.cpp
333 lines | 13.7 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>("");
var0->setRange(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>("");
var0->setRange(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"