#include "../test.h"
#define TEST(name) TEST_CASE("relative-basic: " name, "[relative-basic]")
TEST(
"ctor"
) {
SECTION(
"empty"
) {
DateRel rel;
CHECK(rel.sec() == 0);
CHECK(rel.min() == 0);
CHECK(rel.hour() == 0);
CHECK(rel.day() == 0);
CHECK(rel.month() == 0);
CHECK(rel.year() == 0);
CHECK(rel.to_string() ==
""
);
}
SECTION(
"from list"
) {
DateRel rel(1,2,3,4,5,6);
CHECK(rel.sec() == 6);
CHECK(rel.min() == 5);
CHECK(rel.hour() == 4);
CHECK(rel.day() == 3);
CHECK(rel.month() == 2);
CHECK(rel.year() == 1);
CHECK(rel.to_string() ==
"1Y 2M 3D 4h 5m 6s"
);
}
SECTION(
"copy ctor"
) {
DateRel rel(1,2,3,4,5,6);
auto
rel2 = rel;
CHECK(rel2.to_string() ==
"1Y 2M 3D 4h 5m 6s"
);
}
SECTION(
"from date pair"
) {
DateRel rel(Date(
"2012-03-02 15:47:32"
), Date(
"2013-04-03 16:48:33"
));
CHECK(rel.to_string() ==
"1Y 1M 1D 1h 1m 1s"
);
CHECK(rel.duration() == 34304461);
CHECK(rel.duration() != DateRel(rel.to_string()).duration());
CHECK(rel.from()->to_string() ==
"2012-03-02 15:47:32"
);
CHECK(rel.till()->to_string() ==
"2013-04-03 16:48:33"
);
rel = DateRel(
"2013-04-03 16:48:33"
,
"2012-03-02 15:47:32"
);
CHECK(rel.to_string() ==
"-1Y -1M -1D -1h -1m -1s"
);
CHECK(rel.duration() == -34304461);
CHECK(rel.from()->to_string() ==
"2013-04-03 16:48:33"
);
CHECK(rel.till()->to_string() ==
"2012-03-02 15:47:32"
);
CHECK(rel.duration() != DateRel(rel.to_string()).duration());
}
}
TEST(
"set"
) {
DateRel rel;
SECTION(
"string"
) {
rel =
"1Y 2M 3D 4h 5m 6s"
;
}
SECTION(
"oth"
) {
rel = DateRel(
"1Y 2M 3D 4h 5m 6s"
);
}
SECTION(
"dates"
) {
rel.set(
"2020-01-01 00:00:00"
,
"2021-03-04 04:05:06"
);
}
CHECK(rel.to_string() ==
"1Y 2M 3D 4h 5m 6s"
);
}
TEST(
"duration"
) {
SECTION(
"without date"
) {
DateRel rel(1,2,3,4,5,6);
CHECK(rel.to_secs() == 37090322);
CHECK(rel.to_secs() == rel.duration());
is_approx(rel.to_mins(), 618172.033333);
is_approx(rel.to_hours(), 10302.867222);
is_approx(rel.to_days(), 429.286134);
is_approx(rel.to_months(), 14.104156);
is_approx(rel.to_years(), 1.175346);
CHECK(rel.to_string() ==
"1Y 2M 3D 4h 5m 6s"
);
}
SECTION(
"with date"
) {
DateRel rel(Date(1000000000), Date(1100000000));
CHECK(rel.duration() == 100000000);
CHECK(rel.to_secs() == rel.duration());
is_approx(rel.to_mins(), 1666666.666666);
is_approx(rel.to_hours(), 27777.777777);
is_approx(rel.to_days(), 1157.36574);
is_approx(rel.to_months(), 38.012191);
is_approx(rel.to_years(), 3.167682);
CHECK(rel.to_string() ==
"3Y 2M 8h 46m 40s"
);
}
}
TEST(
"includes"
) {
DateRel rel(
"2004-09-10"
,
"2004-11-10"
);
CHECK(rel.includes(Date(
"2004-09-01"
)) == 1);
CHECK(rel.includes(Date(
"2004-09-10"
)) == 0);
CHECK(rel.includes(Date(
"2004-10-01"
)) == 0);
CHECK(rel.includes(Date(
"2004-11-10"
)) == 0);
CHECK(rel.includes(Date(1101848400)) == -1);
CHECK(DateRel(
"100s"
).includes(Date(123456)) == 0);
}
TEST(
"constants"
) {
CHECK(SEC == DateRel(
"1s"
));
CHECK(MIN == DateRel(
"1m"
));
CHECK(HOUR == DateRel(
"1h"
));
CHECK(DAY == DateRel(
"1D"
));
CHECK(WEEK == DateRel(
"7D"
));
CHECK(MONTH == DateRel(
"1M"
));
CHECK(YEAR == DateRel(
"1Y"
));
}
TEST(
"different timezones"
) {
auto
rel = DateRel(Date(
"2021-05-10T17:00:00+03:00"
), Date(
"2021-05-10T17:00:00+03:00"
));
CHECK(rel.duration() == 0);
rel = DateRel(Date(
"2021-05-10T17:00:00+04:00"
), Date(
"2021-05-10T17:00:00+03:00"
));
CHECK(rel.duration() == 3600);
rel = DateRel(Date(
"2021-05-10T17:00:00+02:00"
), Date(
"2021-05-10T17:00:00+03:00"
));
CHECK(rel.duration() == -3600);
rel = DateRel(Date(
"2021-05-10T17:00:00+02:00"
), Date(
"2021-05-10T17:00:00"
, tzget(
"Europe/Moscow"
)));
CHECK(rel.duration() == -3600);
}