+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test1)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (0), DCPTime (42)));
+ B.push_back (DCPTimePeriod (DCPTime (52), DCPTime (91)));
+ B.push_back (DCPTimePeriod (DCPTime (94), DCPTime (106)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (42));
+ BOOST_CHECK (i->to == DCPTime (52));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (91));
+ BOOST_CHECK (i->to == DCPTime (94));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test2)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (14), DCPTime (42)));
+ B.push_back (DCPTimePeriod (DCPTime (52), DCPTime (91)));
+ B.push_back (DCPTimePeriod (DCPTime (94), DCPTime (106)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (0));
+ BOOST_CHECK (i->to == DCPTime (14));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (42));
+ BOOST_CHECK (i->to == DCPTime (52));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (91));
+ BOOST_CHECK (i->to == DCPTime (94));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test3)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (14), DCPTime (42)));
+ B.push_back (DCPTimePeriod (DCPTime (52), DCPTime (91)));
+ B.push_back (DCPTimePeriod (DCPTime (94), DCPTime (99)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (0));
+ BOOST_CHECK (i->to == DCPTime (14));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (42));
+ BOOST_CHECK (i->to == DCPTime (52));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (91));
+ BOOST_CHECK (i->to == DCPTime (94));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (99));
+ BOOST_CHECK (i->to == DCPTime (106));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test4)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (0));
+ BOOST_CHECK (i->to == DCPTime (106));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test5)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (14), DCPTime (42)));
+ B.push_back (DCPTimePeriod (DCPTime (42), DCPTime (91)));
+ B.push_back (DCPTimePeriod (DCPTime (94), DCPTime (99)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (0));
+ BOOST_CHECK (i->to == DCPTime (14));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from ==DCPTime (91));
+ BOOST_CHECK (i->to == DCPTime (94));
+ ++i;
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (99));
+ BOOST_CHECK (i->to == DCPTime (106));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test6)
+{
+ DCPTimePeriod A (DCPTime (0), DCPTime (106));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (0), DCPTime (42)));
+ B.push_back (DCPTimePeriod (DCPTime (42), DCPTime (91)));
+ B.push_back (DCPTimePeriod (DCPTime (91), DCPTime (106)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ BOOST_CHECK (r.empty());
+}
+
+BOOST_AUTO_TEST_CASE (dcpomatic_time_period_subtract_test7)
+{
+ DCPTimePeriod A (DCPTime (228), DCPTime (356));
+ list<DCPTimePeriod> B;
+ B.push_back (DCPTimePeriod (DCPTime (34), DCPTime (162)));
+ list<DCPTimePeriod> r = subtract (A, B);
+ list<DCPTimePeriod>::const_iterator i = r.begin ();
+ BOOST_REQUIRE (i != r.end ());
+ BOOST_CHECK (i->from == DCPTime (228));
+ BOOST_CHECK (i->to == DCPTime (356));
+ ++i;
+ BOOST_REQUIRE (i == r.end ());
+}