Skip to content

Commit

Permalink
Merge 08f4c23 into 42c3a24
Browse files Browse the repository at this point in the history
  • Loading branch information
PaulXiCao committed Dec 22, 2023
2 parents 42c3a24 + 08f4c23 commit 48f0192
Showing 1 changed file with 77 additions and 0 deletions.
77 changes: 77 additions & 0 deletions test-suite/period.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ BOOST_AUTO_TEST_CASE(testWeeksDaysAlgebra) {
Period OneWeek(1, Weeks);
Period ThreeDays(3, Days);
Period OneDay(1, Days);
Period ZeroDays(0, Days);

Integer n = 2;
if (TwoWeeks/n!=OneWeek)
Expand All @@ -113,6 +114,10 @@ BOOST_AUTO_TEST_CASE(testWeeksDaysAlgebra) {
" + " << OneWeek <<
" != " << Period(11, Days));

BOOST_TEST((OneWeek + ZeroDays) == OneWeek);
BOOST_TEST((OneWeek + 3*OneDay) == Period(10, Days));
BOOST_TEST((OneWeek + 7*OneDay) == TwoWeeks);

Period SevenDays(7, Days);
if (SevenDays.length()!=7)
BOOST_ERROR("normalization error: SevenDays.length()" <<
Expand All @@ -124,6 +129,55 @@ BOOST_AUTO_TEST_CASE(testWeeksDaysAlgebra) {
" instead of " << Days);
}

BOOST_AUTO_TEST_CASE(testOperators) {
BOOST_TEST_MESSAGE("Testing specific operators...");

Period p(3, Days);
p *= 2;
BOOST_TEST(p == Period(6, Days));

p -= Period(2, Days);
BOOST_TEST(p == Period(4, Days));
}

BOOST_AUTO_TEST_CASE(testConvertToYears) {
BOOST_TEST_MESSAGE("Testing converting periods to years...");

BOOST_TEST(years(Period(0, Years)) == 0);
BOOST_TEST(years(Period(1, Years)) == 1);
BOOST_TEST(years(Period(5, Years)) == 5);

const auto tol = boost::test_tools::tolerance(1e-15);
BOOST_TEST(years(Period(1, Months)) == 1.0/12.0, tol);
BOOST_TEST(years(Period(8, Months)) == 8.0/12.0, tol);
BOOST_TEST(years(Period(12, Months)) == 1);
BOOST_TEST(years(Period(18, Months)) == 1.5, tol);
}

BOOST_AUTO_TEST_CASE(testConvertToMonths) {
BOOST_TEST_MESSAGE("Testing converting periods to months...");

BOOST_TEST(months(Period(0, Months)) == 0);
BOOST_TEST(months(Period(1, Months)) == 1);
BOOST_TEST(months(Period(5, Months)) == 5);

BOOST_TEST(months(Period(1, Years)) == 12);
BOOST_TEST(months(Period(3, Years)) == 36);
}

BOOST_AUTO_TEST_CASE(testConvertToWeeks) {
BOOST_TEST_MESSAGE("Testing converting periods to weeks...");

BOOST_TEST(weeks(Period(0, Weeks)) == 0);
BOOST_TEST(weeks(Period(1, Weeks)) == 1);
BOOST_TEST(weeks(Period(5, Weeks)) == 5);

const auto tol = boost::test_tools::tolerance(1e-15);
BOOST_TEST(weeks(Period(1, Days)) == 1.0/7.0, tol);
BOOST_TEST(weeks(Period(3, Days)) == 3.0/7.0, tol);
BOOST_TEST(weeks(Period(11, Days)) == 11.0/7.0, tol);
}

BOOST_AUTO_TEST_CASE(testNormalization) {

BOOST_TEST_MESSAGE("Testing period normalization...");
Expand Down Expand Up @@ -189,6 +243,29 @@ BOOST_AUTO_TEST_CASE(testNormalization) {

}

BOOST_AUTO_TEST_CASE(testFrequencyComputation) {
BOOST_TEST_MESSAGE("Testing computation of frequency from period...");

// frequency -> period -> frequency == initial frequency?
for (const Frequency f : {NoFrequency, Once, Annual, Semiannual, EveryFourthMonth, Quarterly,
Bimonthly, Monthly, EveryFourthWeek, Biweekly, Weekly, Daily}) {
BOOST_TEST(Period(f).frequency() == f);
}
BOOST_CHECK_THROW(Period(OtherFrequency).frequency(), QuantLib::Error);

// test Period(count, timeUnit).frequency()
BOOST_TEST(Period(1, Years).frequency() == Annual);
BOOST_TEST(Period(6, Months).frequency() == Semiannual);
BOOST_TEST(Period(4, Months).frequency() == EveryFourthMonth);
BOOST_TEST(Period(3, Months).frequency() == Quarterly);
BOOST_TEST(Period(2, Months).frequency() == Bimonthly);
BOOST_TEST(Period(1, Months).frequency() == Monthly);
BOOST_TEST(Period(4, Weeks).frequency() == EveryFourthWeek);
BOOST_TEST(Period(2, Weeks).frequency() == Biweekly);
BOOST_TEST(Period(1, Weeks).frequency() == Weekly);
BOOST_TEST(Period(1, Days).frequency() == Daily);
}

BOOST_AUTO_TEST_SUITE_END()

BOOST_AUTO_TEST_SUITE_END()

0 comments on commit 48f0192

Please sign in to comment.