#include "dcp_time.h"
#include "exceptions.h"
#include "compose.hpp"
+#include "dcp_assert.h"
#include <boost/algorithm/string.hpp>
#include <boost/optional.hpp>
#include <iostream>
Time
Time::rebase (int tcr_) const
{
- return Time (h, m, s, lrintf (float (e) * tcr_ / tcr), tcr_);
+ long int e_ = lrintf (float (e) * tcr_ / tcr);
+ int s_ = s;
+ if (e_ >= tcr_) {
+ e_ -= tcr_;
+ ++s_;
+ }
+ int m_ = m;
+ if (s_ >= 60) {
+ s_ -= 60;
+ ++m_;
+ }
+ int h_ = h;
+ if (m_ >= 60) {
+ m_ -= 60;
+ ++h_;
+ }
+
+ return Time (h_, m_, s_, e_, tcr_);
}
b = dcp::Time (9, 12, 41, 17, 99);
BOOST_CHECK_EQUAL (b.rebase(250), dcp::Time(9, 12, 41, 43, 250));
a = dcp::Time (0, 2, 57, 999, 1000);
- BOOST_CHECK_EQUAL (a.rebase(250), dcp::Time(0, 2, 57, 250, 250));
+ 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 */