#include #include #include #include #include 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("", 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("", 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"