+ BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 2, 58, 0, 250));
+ a = dcp::Time (0, 47, 9, 998, 1000);
+ BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 47, 10, 0, 250));
+
+ /* Check some allowed constructions from string */
+
+ /* Interop type 1 */
+ a = dcp::Time ("01:23:45:123", optional<int>());
+ BOOST_CHECK_EQUAL (a, dcp::Time (1, 23, 45, 123, 250));
+ /* Interop type 2 */
+ a = dcp::Time ("01:23:45.123", optional<int>());
+ BOOST_CHECK_EQUAL (a, dcp::Time (1, 23, 45, 123, 1000));
+ /* SMPTE */
+ a = dcp::Time ("01:23:45:12", 250);
+ BOOST_CHECK_EQUAL (a, dcp::Time (1, 23, 45, 12, 250));
+
+ /* Check some disallowed constructions from string */
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:1234", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:1234:66", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23::123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01::45:123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time (":23:45:123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45.1234", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45.1234.66", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45.", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:.123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01::45.123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time (":23:45.123", optional<int>()), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:123", 250), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:123:66", 250), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23:45:", 250), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01:23::123", 250), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time ("01::45:123", 250), dcp::ReadError);
+ BOOST_CHECK_THROW (dcp::Time (":23:45:123", 250), dcp::ReadError);
+
+ /* Check operator< and operator> */
+ BOOST_CHECK (dcp::Time (3, 2, 3, 4, 24) < dcp::Time (3, 2, 3, 5, 24));
+ BOOST_CHECK (!(dcp::Time (3, 2, 3, 4, 24) < dcp::Time (3, 2, 3, 4, 24)));
+ BOOST_CHECK (dcp::Time (3, 2, 3, 5, 24) > dcp::Time (3, 2, 3, 4, 24));
+ BOOST_CHECK (!(dcp::Time (3, 2, 3, 4, 24) > dcp::Time (3, 2, 3, 4, 24)));
+ BOOST_CHECK (dcp::Time (6, 0, 0, 0, 24) < dcp::Time (7, 0, 0, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 6, 0, 0, 24) < dcp::Time (0, 7, 0, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 0, 6, 0, 24) < dcp::Time (0, 0, 7, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 0, 0, 6, 24) < dcp::Time (0, 0, 0, 7, 24));
+ BOOST_CHECK (dcp::Time (7, 0, 0, 0, 24) > dcp::Time (6, 0, 0, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 7, 0, 0, 24) > dcp::Time (0, 6, 0, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 0, 7, 0, 24) > dcp::Time (0, 0, 6, 0, 24));
+ BOOST_CHECK (dcp::Time (0, 0, 0, 7, 24) > dcp::Time (0, 0, 0, 6, 24));