diff options
| author | Carl Hetherington <cth@carlh.net> | 2024-12-20 14:25:04 +0100 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2025-09-03 22:55:23 +0200 |
| commit | 56062db51268e35bb65e1584d8e0b45fffae65dd (patch) | |
| tree | e1b4fd284ddc3c914d2fdb14658c55783b78c949 /test | |
| parent | 8bcbfd3df701915dcac298c54521b3fe4c555b24 (diff) | |
Increase timebase of Time so that more frame rates are possible without rounding (#2919).
Diffstat (limited to 'test')
| -rw-r--r-- | test/dcpomatic_time_test.cc | 67 |
1 files changed, 49 insertions, 18 deletions
diff --git a/test/dcpomatic_time_test.cc b/test/dcpomatic_time_test.cc index 4c5383d20..82d57a619 100644 --- a/test/dcpomatic_time_test.cc +++ b/test/dcpomatic_time_test.cc @@ -34,6 +34,10 @@ using std::cout; using namespace dcpomatic; +// 24 hours +int64_t constexpr long_project_seconds = 12 * 60 * 60; + + static DCPTime test_time(int t) { return DCPTime(t, 96000); @@ -57,6 +61,14 @@ BOOST_AUTO_TEST_CASE (dcpomatic_time_test) } } + +BOOST_AUTO_TEST_CASE(dcpomatic_time_construction_test) +{ + /* Check that we can construct a large time using the old timebase */ + BOOST_CHECK(DCPTime(long_project_seconds * 96000, 96000) == DCPTime(long_project_seconds * DCPTime::TIME_BASE, DCPTime::TIME_BASE)); +} + + BOOST_AUTO_TEST_CASE (dcpomatic_time_period_overlaps_test) { /* Taking times as the start of a sampling interval @@ -324,36 +336,55 @@ BOOST_AUTO_TEST_CASE (test_coalesce_with_overlapping_periods) /* Straightforward test of DCPTime::ceil */ BOOST_AUTO_TEST_CASE (dcpomatic_time_ceil_test) { - BOOST_CHECK(test_time(0).ceil(DCPTime::HZ / 2) == test_time(0)); - BOOST_CHECK(test_time(1).ceil(DCPTime::HZ / 2) == test_time(2)); - BOOST_CHECK(test_time(2).ceil(DCPTime::HZ / 2) == test_time(2)); - BOOST_CHECK(test_time(3).ceil(DCPTime::HZ / 2) == test_time(4)); + BOOST_CHECK(DCPTime(0, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 2) == DCPTime(0, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(1, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 2) == DCPTime(2, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(2, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 2) == DCPTime(2, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(3, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 2) == DCPTime(4, DCPTime::TIME_BASE)); - BOOST_CHECK(test_time(0).ceil(DCPTime::HZ / 42) == test_time(0)); - BOOST_CHECK(test_time(1).ceil(DCPTime::HZ / 42) == test_time(42)); - BOOST_CHECK(test_time(42).ceil(DCPTime::HZ / 42) == test_time(42)); - BOOST_CHECK(test_time(43).ceil(DCPTime::HZ / 42) == test_time(84)); + BOOST_CHECK(DCPTime(0, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 42) == DCPTime(0, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(1, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 42) == DCPTime(42, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(42, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 42) == DCPTime(42, DCPTime::TIME_BASE)); + BOOST_CHECK(DCPTime(43, DCPTime::TIME_BASE).ceil(DCPTime::TIME_BASE / 42) == DCPTime(84, DCPTime::TIME_BASE)); /* Check that rounding up to non-integer frame rates works */ - BOOST_CHECK(test_time(45312).ceil(29.976) == test_time(48038)); + BOOST_CHECK(test_time(45312).ceil(29.976) == DCPTime(247316108887, DCPTime::TIME_BASE)); /* Check another tricky case that used to fail */ - BOOST_CHECK(test_time(212256039).ceil(23.976) == test_time(212256256)); + BOOST_CHECK(DCPTime(1092757128815583LL, DCPTime::TIME_BASE).ceil(23.976) == DCPTime(1092758247315315, DCPTime::TIME_BASE)); } /* Straightforward test of DCPTime::floor */ BOOST_AUTO_TEST_CASE (dcpomatic_time_floor_test) { - BOOST_CHECK(test_time(0).floor(DCPTime::HZ / 2) == test_time(0)); - BOOST_CHECK(test_time(1).floor(DCPTime::HZ / 2) == test_time(0)); - BOOST_CHECK(test_time(2).floor(DCPTime::HZ / 2) == test_time(2)); - BOOST_CHECK(test_time(3).floor(DCPTime::HZ / 2) == test_time(2)); + BOOST_CHECK(test_time(0).floor(DCPTime::TIME_BASE / 2) == test_time(0)); + BOOST_CHECK(test_time(1).floor(DCPTime::TIME_BASE / 2) == test_time(0)); + BOOST_CHECK(test_time(2).floor(DCPTime::TIME_BASE / 2) == test_time(2)); + BOOST_CHECK(test_time(3).floor(DCPTime::TIME_BASE / 2) == test_time(2)); - BOOST_CHECK(test_time(0).floor(DCPTime::HZ / 42) == test_time(0)); - BOOST_CHECK(test_time(1).floor(DCPTime::HZ / 42) == test_time(0)); - BOOST_CHECK(test_time(42).floor(DCPTime::HZ / 42.0) == test_time(42)); - BOOST_CHECK(test_time(43).floor(DCPTime::HZ / 42.0) == test_time(42)); + BOOST_CHECK(test_time(0).floor(DCPTime::TIME_BASE / 42) == test_time(0)); + BOOST_CHECK(test_time(1).floor(DCPTime::TIME_BASE / 42) == test_time(0)); + BOOST_CHECK(test_time(42).floor(DCPTime::TIME_BASE / 42.0) == test_time(42)); + BOOST_CHECK(test_time(43).floor(DCPTime::TIME_BASE / 42.0) == test_time(42)); /* Check that rounding down to non-integer frame rates works */ BOOST_CHECK(test_time(45312).floor(29.976) == test_time(44836)); } + + +BOOST_AUTO_TEST_CASE(dcpomatic_time_factor_test) +{ + for (int i = 2; i <= 30; ++i) { + BOOST_CHECK((dcpomatic::DCPTime::TIME_BASE % i) == 0); + } + + BOOST_CHECK((dcpomatic::DCPTime::TIME_BASE % 36) == 0); + BOOST_CHECK((dcpomatic::DCPTime::TIME_BASE % 48) == 0); + BOOST_CHECK((dcpomatic::DCPTime::TIME_BASE % 60) == 0); +} + + +BOOST_AUTO_TEST_CASE(dcpomatic_time_frames_floor_test) +{ + BOOST_CHECK_EQUAL(dcpomatic::DCPTime(195061250884500LL, 69872686884000LL).frames_floor(48000), 134000); +} + |
