#3057 Resampled plot export. Add more resample periods. Add unit tests

This commit is contained in:
Bjørn Erik Jensen 2018-06-18 14:10:11 +02:00
parent ef5ef6d9ca
commit d5ec3b1db3
4 changed files with 224 additions and 6 deletions

View File

@ -32,7 +32,10 @@
//--------------------------------------------------------------------------------------------------
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DECADE = DateTimeSpan(10, 0, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_YEAR = DateTimeSpan(1, 0, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_HALFYEAR = DateTimeSpan(0, 6, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_QUARTER = DateTimeSpan(0, 3, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_MONTH = DateTimeSpan(0, 1, 0);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_WEEK = DateTimeSpan(0, 0, 7);
const DateTimeSpan RiaQDateTimeTools::TIMESPAN_DAY = DateTimeSpan(0, 0, 1);
@ -260,7 +263,10 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan(DateTimePeriod period)
{
case DateTimePeriod::DECADE: return TIMESPAN_DECADE;
case DateTimePeriod::YEAR: return TIMESPAN_YEAR;
case DateTimePeriod::HALFYEAR: return TIMESPAN_HALFYEAR;
case DateTimePeriod::QUARTER: return TIMESPAN_QUARTER;
case DateTimePeriod::MONTH: return TIMESPAN_MONTH;
case DateTimePeriod::WEEK: return TIMESPAN_WEEK;
case DateTimePeriod::DAY: return TIMESPAN_DAY;
}
CVF_ASSERT(false);
@ -272,12 +278,20 @@ const DateTimeSpan RiaQDateTimeTools::timeSpan(DateTimePeriod period)
//--------------------------------------------------------------------------------------------------
QDateTime RiaQDateTimeTools::truncateTime(const QDateTime& dt, DateTimePeriod period)
{
int y = dt.date().year();
int m = dt.date().month();
int d = dt.date().day();
int dow = dt.date().dayOfWeek();
switch (period)
{
case DateTimePeriod::DECADE: return createUtcDateTime(QDate((dt.date().year() / 10) * 10, 1, 1));
case DateTimePeriod::YEAR: return createUtcDateTime(QDate(dt.date().year(), 1, 1));
case DateTimePeriod::MONTH: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), 1));
case DateTimePeriod::DAY: return createUtcDateTime(QDate(dt.date().year(), dt.date().month(), dt.date().day()));
case DateTimePeriod::DECADE: return createUtcDateTime(QDate((y / 10) * 10, 1, 1));
case DateTimePeriod::YEAR: return createUtcDateTime(QDate(y, 1, 1));
case DateTimePeriod::HALFYEAR: return createUtcDateTime(QDate(y, ((m - 1) / 6) * 6 + 1, 1));
case DateTimePeriod::QUARTER: return createUtcDateTime(QDate(y, ((m - 1) / 3) * 3 + 1, 1));
case DateTimePeriod::MONTH: return createUtcDateTime(QDate(y, m, 1));
case DateTimePeriod::WEEK: return createUtcDateTime(QDate(y, m, d).addDays(-dow + 1));
case DateTimePeriod::DAY: return createUtcDateTime(QDate(y, m, d));
}
CVF_ASSERT(false);
return createUtcDateTime();

View File

@ -35,7 +35,10 @@ enum class DateTimePeriod
{
DECADE,
YEAR,
HALFYEAR,
QUARTER,
MONTH,
WEEK,
DAY
};
@ -46,7 +49,10 @@ class RiaQDateTimeTools
{
static const DateTimeSpan TIMESPAN_DECADE;
static const DateTimeSpan TIMESPAN_YEAR;
static const DateTimeSpan TIMESPAN_HALFYEAR;
static const DateTimeSpan TIMESPAN_QUARTER;
static const DateTimeSpan TIMESPAN_MONTH;
static const DateTimeSpan TIMESPAN_WEEK;
static const DateTimeSpan TIMESPAN_DAY;
public:

View File

@ -192,10 +192,9 @@ void RiaTimeHistoryCurveResampler::computeResampledTimeSteps(DateTimePeriod peri
clearData();
auto currTimeStep = firstResampledTimeStep(firstOriginalTimeStep, period);
while (QDT::lessThanOrEqualTo(currTimeStep, lastOriginalTimeStep))
{
auto ss1 = currTimeStep.toString();
m_timeSteps.push_back(currTimeStep.toTime_t());
currTimeStep = QDT::addPeriod(currTimeStep, period);
}

View File

@ -46,6 +46,205 @@ TEST(RiaTimeHistoryCurveResampler, Test_Resampling_NoPeriod)
EXPECT_EQ(0, (int)resampler.resampledTimeSteps().size());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Decade)
{
std::vector<QString> timeStrings(
{
"1989-02-03",
"2005-06-06",
"2012-02-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::DECADE);
EXPECT_EQ(3, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("1990-01-01"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2000-01-01"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2010-01-01"), resampler.resampledTimeSteps()[2]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Year)
{
std::vector<QString> timeStrings(
{
"2014-06-06",
"2015-12-02",
"2018-02-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::YEAR);
EXPECT_EQ(4, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("2015-01-01"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2016-01-01"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[2]);
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_HalfYear)
{
std::vector<QString> timeStrings(
{
"2016-06-06",
"2017-03-02",
"2018-02-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::HALFYEAR);
EXPECT_EQ(4, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("2016-07-01"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2017-07-01"), resampler.resampledTimeSteps()[2]);
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Quarter)
{
std::vector<QString> timeStrings(
{
"2016-09-06",
"2017-03-02",
"2018-02-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::QUARTER);
EXPECT_EQ(6, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("2016-10-01"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2017-01-01"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2017-04-01"), resampler.resampledTimeSteps()[2]);
EXPECT_EQ(toTime_t("2017-07-01"), resampler.resampledTimeSteps()[3]);
EXPECT_EQ(toTime_t("2017-10-01"), resampler.resampledTimeSteps()[4]);
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[5]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Month)
{
std::vector<QString> timeStrings(
{
"2017-09-06",
"2017-12-02",
"2018-02-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::MONTH);
EXPECT_EQ(5, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("2017-10-01"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2017-11-01"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2017-12-01"), resampler.resampledTimeSteps()[2]);
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[3]);
EXPECT_EQ(toTime_t("2018-02-01"), resampler.resampledTimeSteps()[4]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
TEST(RiaTimeHistoryCurveResampler, Test_Resampling_Week)
{
std::vector<QString> timeStrings(
{
"2017-11-02",
"2017-12-24",
"2018-01-07"
}
);
std::vector<double> dataValues(
{
0.0,
0.0,
0.0
}
);
RiaTimeHistoryCurveResampler resampler;
resampler.setCurveData(dataValues, toTime_tVector(timeStrings));
resampler.resampleAndComputeWeightedMeanValues(DateTimePeriod::WEEK);
EXPECT_EQ(9, (int)resampler.resampledTimeSteps().size());
EXPECT_EQ(toTime_t("2017-11-06"), resampler.resampledTimeSteps()[0]);
EXPECT_EQ(toTime_t("2017-11-13"), resampler.resampledTimeSteps()[1]);
EXPECT_EQ(toTime_t("2017-11-20"), resampler.resampledTimeSteps()[2]);
EXPECT_EQ(toTime_t("2017-11-27"), resampler.resampledTimeSteps()[3]);
EXPECT_EQ(toTime_t("2017-12-04"), resampler.resampledTimeSteps()[4]);
EXPECT_EQ(toTime_t("2017-12-11"), resampler.resampledTimeSteps()[5]);
EXPECT_EQ(toTime_t("2017-12-18"), resampler.resampledTimeSteps()[6]);
EXPECT_EQ(toTime_t("2017-12-25"), resampler.resampledTimeSteps()[7]);
EXPECT_EQ(toTime_t("2018-01-01"), resampler.resampledTimeSteps()[8]);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------