+/* Test the constructor of DCPFrameRate */
+BOOST_AUTO_TEST_CASE (dcp_frame_rate_test)
+{
+ /* Run some tests with a limited range of allowed rates */
+
+ std::list<int> afr;
+ afr.push_back (24);
+ afr.push_back (25);
+ afr.push_back (30);
+ Config::instance()->set_allowed_dcp_frame_rates (afr);
+
+ DCPFrameRate dfr = DCPFrameRate (60);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 30);
+ BOOST_CHECK_EQUAL (dfr.skip, true);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (50);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 25);
+ BOOST_CHECK_EQUAL (dfr.skip, true);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (48);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 24);
+ BOOST_CHECK_EQUAL (dfr.skip, true);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (30);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 30);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (29.97);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 30);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, true);
+
+ dfr = DCPFrameRate (25);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 25);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (24);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 24);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (14.5);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 30);
+ BOOST_CHECK_EQUAL (dfr.repeat, true);
+ BOOST_CHECK_EQUAL (dfr.change_speed, true);
+
+ dfr = DCPFrameRate (12.6);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 25);
+ BOOST_CHECK_EQUAL (dfr.repeat, true);
+ BOOST_CHECK_EQUAL (dfr.change_speed, true);
+
+ dfr = DCPFrameRate (12.4);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 25);
+ BOOST_CHECK_EQUAL (dfr.repeat, true);
+ BOOST_CHECK_EQUAL (dfr.change_speed, true);
+
+ dfr = DCPFrameRate (12);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 24);
+ BOOST_CHECK_EQUAL (dfr.repeat, true);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ /* Now add some more rates and see if it will use them
+ in preference to skip/repeat.
+ */
+
+ afr.push_back (48);
+ afr.push_back (50);
+ afr.push_back (60);
+ Config::instance()->set_allowed_dcp_frame_rates (afr);
+
+ dfr = DCPFrameRate (60);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 60);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (50);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 50);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+
+ dfr = DCPFrameRate (48);
+ BOOST_CHECK_EQUAL (dfr.frames_per_second, 48);
+ BOOST_CHECK_EQUAL (dfr.skip, false);
+ BOOST_CHECK_EQUAL (dfr.repeat, false);
+ BOOST_CHECK_EQUAL (dfr.change_speed, false);
+}
+