X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=test%2Fdcpomatic_time_test.cc;h=5d23f247808135eeadfc94ad17451ffb7b42db45;hb=b8650a25a30a25e567d68f9b775579661a1828b1;hp=38b4d31a99c74d880e81c6e7969264ed07811683;hpb=baf84885a777378b9ff5c05ef24d6361560822a6;p=dcpomatic.git diff --git a/test/dcpomatic_time_test.cc b/test/dcpomatic_time_test.cc index 38b4d31a9..5d23f2478 100644 --- a/test/dcpomatic_time_test.cc +++ b/test/dcpomatic_time_test.cc @@ -19,7 +19,7 @@ */ /** @file test/dcpomatic_time_test.cc - * @brief Test Time and TimePeriod classes. + * @brief Test dcpomatic::Time and dcpomatic::TimePeriod classes. * @ingroup selfcontained */ @@ -31,6 +31,7 @@ using std::list; using std::cout; +using namespace dcpomatic; BOOST_AUTO_TEST_CASE (dcpomatic_time_test) { @@ -243,7 +244,7 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_period_coalesce_test1) p.push_back (A); p.push_back (B); list q = coalesce (p); - BOOST_REQUIRE_EQUAL (q.size(), 2); + BOOST_REQUIRE_EQUAL (q.size(), 2U); BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(14), DCPTime(29))); BOOST_CHECK (q.back () == DCPTimePeriod(DCPTime(45), DCPTime(91))); } @@ -256,7 +257,7 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_period_coalesce_test2) p.push_back (A); p.push_back (B); list q = coalesce (p); - BOOST_REQUIRE_EQUAL (q.size(), 1); + BOOST_REQUIRE_EQUAL (q.size(), 1U); BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(14), DCPTime(91))); } @@ -268,7 +269,7 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_period_coalesce_test3) p.push_back (A); p.push_back (B); list q = coalesce (p); - BOOST_REQUIRE_EQUAL (q.size(), 1); + BOOST_REQUIRE_EQUAL (q.size(), 1U); BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(14), DCPTime(91))); } @@ -282,7 +283,7 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_period_coalesce_test4) p.push_back (B); p.push_back (C); list q = coalesce (p); - BOOST_REQUIRE_EQUAL (q.size(), 1); + BOOST_REQUIRE_EQUAL (q.size(), 1U); BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(14), DCPTime(106))); } @@ -296,7 +297,56 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_period_coalesce_test5) p.push_back (B); p.push_back (C); list q = coalesce (p); - BOOST_REQUIRE_EQUAL (q.size(), 2); + BOOST_REQUIRE_EQUAL (q.size(), 2U); BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(14), DCPTime(91))); BOOST_CHECK (q.back() == DCPTimePeriod(DCPTime(100), DCPTime(106))); } + +BOOST_AUTO_TEST_CASE (test_coalesce_with_overlapping_periods) +{ + DCPTimePeriod A (DCPTime(0), DCPTime(10)); + DCPTimePeriod B (DCPTime(2), DCPTime(8)); + list p; + p.push_back (A); + p.push_back (B); + auto q = coalesce(p); + BOOST_REQUIRE_EQUAL (q.size(), 1U); + BOOST_CHECK (q.front() == DCPTimePeriod(DCPTime(0), DCPTime(10))); +} + +/* Straightforward test of DCPTime::ceil */ +BOOST_AUTO_TEST_CASE (dcpomatic_time_ceil_test) +{ + BOOST_CHECK_EQUAL (DCPTime(0).ceil(DCPTime::HZ / 2).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).ceil(DCPTime::HZ / 2).get(), 2); + BOOST_CHECK_EQUAL (DCPTime(2).ceil(DCPTime::HZ / 2).get(), 2); + BOOST_CHECK_EQUAL (DCPTime(3).ceil(DCPTime::HZ / 2).get(), 4); + + BOOST_CHECK_EQUAL (DCPTime(0).ceil(DCPTime::HZ / 42).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).ceil(DCPTime::HZ / 42).get(), 42); + BOOST_CHECK_EQUAL (DCPTime(42).ceil(DCPTime::HZ / 42).get(), 42); + BOOST_CHECK_EQUAL (DCPTime(43).ceil(DCPTime::HZ / 42).get(), 84); + + /* Check that rounding up to non-integer frame rates works */ + BOOST_CHECK_EQUAL (DCPTime(45312).ceil(29.976).get(), 48038); + + /* Check another tricky case that used to fail */ + BOOST_CHECK_EQUAL (DCPTime(212256039).ceil(23.976).get(), 212256256); +} + +/* Straightforward test of DCPTime::floor */ +BOOST_AUTO_TEST_CASE (dcpomatic_time_floor_test) +{ + BOOST_CHECK_EQUAL (DCPTime(0).floor(DCPTime::HZ / 2).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).floor(DCPTime::HZ / 2).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(2).floor(DCPTime::HZ / 2).get(), 2); + BOOST_CHECK_EQUAL (DCPTime(3).floor(DCPTime::HZ / 2).get(), 2); + + BOOST_CHECK_EQUAL (DCPTime(0).floor(DCPTime::HZ / 42).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(1).floor(DCPTime::HZ / 42).get(), 0); + BOOST_CHECK_EQUAL (DCPTime(42).floor(DCPTime::HZ / 42.0).get(), 42); + BOOST_CHECK_EQUAL (DCPTime(43).floor(DCPTime::HZ / 42.0).get(), 42); + + /* Check that rounding down to non-integer frame rates works */ + BOOST_CHECK_EQUAL (DCPTime(45312).floor(29.976).get(), 44836); +}