Fill test disk partitions with random noise to expose more bugs.
[dcpomatic.git] / test / dcpomatic_time_test.cc
index 38b4d31a99c74d880e81c6e7969264ed07811683..5d23f247808135eeadfc94ad17451ffb7b42db45 100644 (file)
@@ -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<DCPTimePeriod> 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<DCPTimePeriod> 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<DCPTimePeriod> 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<DCPTimePeriod> 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<DCPTimePeriod> 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<DCPTimePeriod> 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);
+}