TestVariableCacheController.cpp
353 lines
| 15.3 KiB
| text/x-c
|
CppLexer
r213 | #include <Variable/Variable.h> | |||
#include <Variable/VariableCacheController.h> | ||||
#include <QObject> | ||||
#include <QtTest> | ||||
#include <memory> | ||||
class TestVariableCacheController : public QObject { | ||||
Q_OBJECT | ||||
private slots: | ||||
void testProvideNotInCacheDateTimeList(); | ||||
r214 | ||||
void testAddDateTime(); | ||||
r213 | }; | |||
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 = SqpDateTime{static_cast<double>(ts0.toMSecsSinceEpoch()), | ||||
static_cast<double>(te0.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts1.toMSecsSinceEpoch()), | ||||
static_cast<double>(te1.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts2.toMSecsSinceEpoch()), | ||||
static_cast<double>(te2.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
auto notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | auto notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 2); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(1); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 2); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(1); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 4); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(1); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(2); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts2.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(3); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te2.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 1); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 3); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(1); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts2.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(2); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te2.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r213 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 2); | ||||
r227 | notInCacheSqp = notInCach.first(); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(ts.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
r213 | ||||
r227 | notInCacheSqp = notInCach.at(1); | |||
QCOMPARE(notInCacheSqp.m_TStart, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
QCOMPARE(notInCacheSqp.m_TEnd, static_cast<double>(te.toMSecsSinceEpoch())); | ||||
r275 | ||||
// 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 = SqpDateTime{static_cast<double>(ts.toMSecsSinceEpoch()), | ||||
static_cast<double>(te.toMSecsSinceEpoch())}; | ||||
notInCach = variableCacheController.provideNotInCacheDateTimeList(var0, sqp); | ||||
QCOMPARE(notInCach.size(), 0); | ||||
r213 | } | |||
r214 | ||||
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 = SqpDateTime{static_cast<double>(ts0.toMSecsSinceEpoch()), | ||||
static_cast<double>(te0.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts1.toMSecsSinceEpoch()), | ||||
static_cast<double>(te1.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts2.toMSecsSinceEpoch()), | ||||
static_cast<double>(te2.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts01.toMSecsSinceEpoch()), | ||||
static_cast<double>(te01.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts3.toMSecsSinceEpoch()), | ||||
static_cast<double>(te3.toMSecsSinceEpoch())}; | ||||
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 = SqpDateTime{static_cast<double>(ts03.toMSecsSinceEpoch()), | ||||
static_cast<double>(te03.toMSecsSinceEpoch())}; | ||||
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, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
// 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, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te0.toMSecsSinceEpoch())); | ||||
dateCache = dateCacheList.at(1); | ||||
QCOMPARE(dateCache.m_TStart, static_cast<double>(ts1.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
// 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, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
// 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, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te1.toMSecsSinceEpoch())); | ||||
dateCache = dateCacheList.at(1); | ||||
QCOMPARE(dateCache.m_TStart, static_cast<double>(ts3.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te3.toMSecsSinceEpoch())); | ||||
dateCache = dateCacheList.at(2); | ||||
QCOMPARE(dateCache.m_TStart, static_cast<double>(ts2.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te2.toMSecsSinceEpoch())); | ||||
// 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, static_cast<double>(ts0.toMSecsSinceEpoch())); | ||||
QCOMPARE(dateCache.m_TEnd, static_cast<double>(te03.toMSecsSinceEpoch())); | ||||
} | ||||
r213 | QTEST_MAIN(TestVariableCacheController) | |||
#include "TestVariableCacheController.moc" | ||||