From 0f7ad28045e8998f1514fa3f142e31e074c7c369 2017-08-23 07:46:21 From: leroux Date: 2017-08-23 07:46:21 Subject: [PATCH] Merge pull request #230 from SCIQLOP-Initialisation develop Develop --- diff --git a/core/include/Variable/VariableController.h b/core/include/Variable/VariableController.h index d2b6384..10488e8 100644 --- a/core/include/Variable/VariableController.h +++ b/core/include/Variable/VariableController.h @@ -85,9 +85,10 @@ public slots: * @param name the name of the new variable * @param metadata the metadata of the new variable * @param provider the data provider for the new variable + * @return the pointer to the new variable or nullptr if the creation failed */ - void createVariable(const QString &name, const QVariantHash &metadata, - std::shared_ptr provider) noexcept; + std::shared_ptr createVariable(const QString &name, const QVariantHash &metadata, + std::shared_ptr provider) noexcept; /// Update the temporal parameters of every selected variable to dateTime void onDateTimeOnSelection(const SqpRange &dateTime); diff --git a/core/src/Variable/Variable.cpp b/core/src/Variable/Variable.cpp index aad63c4..2148365 100644 --- a/core/src/Variable/Variable.cpp +++ b/core/src/Variable/Variable.cpp @@ -219,19 +219,24 @@ QVector Variable::provideInCacheRangeList(const SqpRange &range) const auto inCache = QVector{}; - if (this->cacheContains(range)) { - if (range.m_TStart <= impl->m_CacheRange.m_TEnd - && range.m_TEnd >= impl->m_CacheRange.m_TEnd) { - inCache << SqpRange{range.m_TStart, impl->m_CacheRange.m_TEnd}; + if (this->intersect(range)) { + if (range.m_TStart <= impl->m_CacheRange.m_TStart + && range.m_TEnd >= impl->m_CacheRange.m_TStart + && range.m_TEnd < impl->m_CacheRange.m_TEnd) { + inCache << SqpRange{impl->m_CacheRange.m_TStart, range.m_TEnd}; } else if (range.m_TStart >= impl->m_CacheRange.m_TStart - && range.m_TEnd < impl->m_CacheRange.m_TEnd) { + && range.m_TEnd <= impl->m_CacheRange.m_TEnd) { inCache << range; } - else if (range.m_TStart < impl->m_CacheRange.m_TStart - && range.m_TEnd >= impl->m_CacheRange.m_TStart) { - inCache << SqpRange{impl->m_CacheRange.m_TStart, range.m_TEnd}; + else if (range.m_TStart > impl->m_CacheRange.m_TStart + && range.m_TEnd > impl->m_CacheRange.m_TEnd) { + inCache << SqpRange{range.m_TStart, impl->m_CacheRange.m_TEnd}; + } + else if (range.m_TStart <= impl->m_CacheRange.m_TStart + && range.m_TEnd >= impl->m_CacheRange.m_TEnd) { + inCache << impl->m_CacheRange; } else { qCCritical(LOG_Variable()) << tr("Detection of unknown case.") diff --git a/core/src/Variable/VariableController.cpp b/core/src/Variable/VariableController.cpp index 908db03..1df9fed 100644 --- a/core/src/Variable/VariableController.cpp +++ b/core/src/Variable/VariableController.cpp @@ -218,14 +218,14 @@ void VariableController::abortProgress(std::shared_ptr variable) { } -void VariableController::createVariable(const QString &name, const QVariantHash &metadata, - std::shared_ptr provider) noexcept +std::shared_ptr +VariableController::createVariable(const QString &name, const QVariantHash &metadata, + std::shared_ptr provider) noexcept { - if (!impl->m_TimeController) { qCCritical(LOG_VariableController()) << tr("Impossible to create variable: The time controller is null"); - return; + return nullptr; } auto range = impl->m_TimeController->dateTime(); @@ -242,6 +242,8 @@ void VariableController::createVariable(const QString &name, const QVariantHash impl->processRequest(newVariable, range); + + return newVariable; } } diff --git a/core/tests/Variable/TestVariable.cpp b/core/tests/Variable/TestVariable.cpp new file mode 100644 index 0000000..1228ddc --- /dev/null +++ b/core/tests/Variable/TestVariable.cpp @@ -0,0 +1,188 @@ +#include + +#include +#include + +#include + +class TestVariable : public QObject { + Q_OBJECT + +private slots: + void testNotInCacheRangeList(); + + void testInCacheRangeList(); +}; + + +void TestVariable::testNotInCacheRangeList() +{ + auto varRS = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + auto varRE = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 40, 0}}; + + auto sqpR = SqpRange{static_cast(varRS.toMSecsSinceEpoch()), + static_cast(varRE.toMSecsSinceEpoch())}; + + auto varCRS = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 0, 0}}; + auto varCRE = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}}; + auto sqpCR = SqpRange{static_cast(varCRS.toMSecsSinceEpoch()), + static_cast(varCRE.toMSecsSinceEpoch())}; + + Variable var{"Var test", sqpR}; + var.setCacheRange(sqpCR); + + // 1: [ts,te] < varTS + 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{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + + auto notInCach = var.provideNotInCacheRangeList(sqp); + + QCOMPARE(notInCach.size(), 1); + + auto notInCachRange = notInCach.first(); + + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); + + // 2: ts < varTS < te < varTE + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideNotInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(varCRS.toMSecsSinceEpoch())); + + // 3: varTS < ts < te < varTE + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideNotInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 0); + + + // 4: varTS < ts < varTE < te + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideNotInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(varCRE.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); + + // 5: varTS < varTE < ts < te + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideNotInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); + + // 6: ts (ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideNotInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 2); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(varCRS.toMSecsSinceEpoch())); + notInCachRange = notInCach[1]; + QCOMPARE(notInCachRange.m_TStart, static_cast(varCRE.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); +} + + +void TestVariable::testInCacheRangeList() +{ + auto varRS = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + auto varRE = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 40, 0}}; + + auto sqpR = SqpRange{static_cast(varRS.toMSecsSinceEpoch()), + static_cast(varRE.toMSecsSinceEpoch())}; + + auto varCRS = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 0, 0}}; + auto varCRE = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 0, 0}}; + auto sqpCR = SqpRange{static_cast(varCRS.toMSecsSinceEpoch()), + static_cast(varCRE.toMSecsSinceEpoch())}; + + Variable var{"Var test", sqpR}; + var.setCacheRange(sqpCR); + + // 1: [ts,te] < varTS + 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{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + + auto notInCach = var.provideInCacheRangeList(sqp); + + QCOMPARE(notInCach.size(), 0); + + // 2: ts < varTS < te < varTE + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 0, 0, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + auto notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(varCRS.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); + + // 3: varTS < ts < te < varTE + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 30, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(te.toMSecsSinceEpoch())); + + // 4: varTS < ts < varTE < te + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 3, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(ts.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(varCRE.toMSecsSinceEpoch())); + + // 5: varTS < varTE < ts < te + ts = QDateTime{QDate{2017, 01, 01}, QTime{2, 4, 20, 0}}; + te = QDateTime{QDate{2017, 01, 01}, QTime{2, 5, 0, 0}}; + sqp = SqpRange{static_cast(ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 0); + + // 6: ts (ts.toMSecsSinceEpoch()), + static_cast(te.toMSecsSinceEpoch())}; + notInCach = var.provideInCacheRangeList(sqp); + QCOMPARE(notInCach.size(), 1); + notInCachRange = notInCach.first(); + QCOMPARE(notInCachRange.m_TStart, static_cast(varCRS.toMSecsSinceEpoch())); + QCOMPARE(notInCachRange.m_TEnd, static_cast(varCRE.toMSecsSinceEpoch())); +} + + +QTEST_MAIN(TestVariable) +#include "TestVariable.moc" diff --git a/gui/src/SqpApplication.cpp b/gui/src/SqpApplication.cpp index a4b99df..4968eb0 100644 --- a/gui/src/SqpApplication.cpp +++ b/gui/src/SqpApplication.cpp @@ -60,7 +60,6 @@ public: virtual ~SqpApplicationPrivate() { - qCDebug(LOG_SqpApplication()) << tr("SqpApplicationPrivate destruction"); m_DataSourceControllerThread.quit(); m_DataSourceControllerThread.wait(); diff --git a/gui/src/Visualization/VisualizationGraphHelper.cpp b/gui/src/Visualization/VisualizationGraphHelper.cpp index 1339c16..bd80ba7 100644 --- a/gui/src/Visualization/VisualizationGraphHelper.cpp +++ b/gui/src/Visualization/VisualizationGraphHelper.cpp @@ -56,7 +56,8 @@ void setAxesProperties(const DataSeries &dataSeries, QCustomPlot &plot) noe } /** - * Struct used to create plottables, depending on the type of the data series from which to create them + * Struct used to create plottables, depending on the type of the data series from which to create + * them * @tparam T the data series' type * @remarks Default implementation can't create plottables */ @@ -106,7 +107,8 @@ struct PlottablesCreator +#include +#include +#include