WIP: some more test coverage ... unveiling yet more bugs
This commit is contained in:
parent
9d75739089
commit
14f233f83b
5 changed files with 32 additions and 4 deletions
|
|
@ -339,14 +339,14 @@ namespace time {
|
||||||
SmpteTC&
|
SmpteTC&
|
||||||
SmpteTC::operator++ ()
|
SmpteTC::operator++ ()
|
||||||
{
|
{
|
||||||
++frames;
|
frames += sgn;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
SmpteTC&
|
SmpteTC&
|
||||||
SmpteTC::operator-- ()
|
SmpteTC::operator-- ()
|
||||||
{
|
{
|
||||||
--frames;
|
frames -= sgn;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -273,6 +273,7 @@ namespace time {
|
||||||
/** convenience start for time calculations */
|
/** convenience start for time calculations */
|
||||||
TimeVar operator+ (TimeValue const& tval) const { return TimeVar(*this) + tval; }
|
TimeVar operator+ (TimeValue const& tval) const { return TimeVar(*this) + tval; }
|
||||||
TimeVar operator- (TimeValue const& tval) const { return TimeVar(*this) - tval; }
|
TimeVar operator- (TimeValue const& tval) const { return TimeVar(*this) - tval; }
|
||||||
|
TimeVar operator- () const { return -TimeVar(*this); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -137,9 +137,33 @@ namespace test{
|
||||||
smpte.hours -= 6;
|
smpte.hours -= 6;
|
||||||
CHECK ("- 0:21:59:24"== string(smpte)); // representation is symmetrical to origin
|
CHECK ("- 0:21:59:24"== string(smpte)); // representation is symmetrical to origin
|
||||||
CHECK (tx - Time(6*60*60) == smpte.getTime()); // Continuous time axis
|
CHECK (tx - Time(6*60*60) == smpte.getTime()); // Continuous time axis
|
||||||
CHECK (-1 == smpte.sgn);
|
|
||||||
|
CHECK (-1 == smpte.sgn); // Note: for these negative (extended) SMPTE...
|
||||||
|
CHECK (smpte.mins > 0); // ...the representation is really flipped around zero
|
||||||
|
CHECK (smpte.secs > 0);
|
||||||
|
CHECK (smpte.frames > 0);
|
||||||
|
tx = smpte.getTime();
|
||||||
|
++smpte.frames; // now *increasing* the frame value
|
||||||
|
CHECK ("- 0:22:00:00"== string(smpte)); // means decreasing the resulting time
|
||||||
|
CHECK (tx - Time(1000/25,0,0,0) == smpte.getTime());
|
||||||
|
++smpte; // but the orientation of the increment on the *whole* TC values is unaltered
|
||||||
|
CHECK ("- 0:21:59:24"== string(smpte)); // so this actually *advanced* time by one frame
|
||||||
|
CHECK (tx == smpte.getTime());
|
||||||
|
CHECK (tx < Time(0));
|
||||||
|
|
||||||
|
smpte.mins -= 2*60; // now lets flip it again...
|
||||||
|
CHECK (" 1:38:00:01"== string(smpte));
|
||||||
|
CHECK (+1 == smpte.sgn);
|
||||||
|
CHECK (smpte.getTime() > 0);
|
||||||
|
CHECK (tx + Time(2*60*60) == smpte.getTime());
|
||||||
|
smpte.secs -= 2*60*60; // and again...
|
||||||
|
CHECK (tx == smpte.getTime());
|
||||||
|
CHECK ("- 0:21:59:24"== string(smpte));
|
||||||
|
|
||||||
smpte.sgn += 123; // just flip the sign
|
smpte.sgn += 123; // just flip the sign
|
||||||
CHECK (" 0:21:59:24"== string(smpte));
|
CHECK (" 0:21:59:24"== string(smpte));
|
||||||
|
CHECK (tx == -smpte.getTime());
|
||||||
|
CHECK (+1 == smpte.sgn); // sign value is limited to +1 / -1
|
||||||
|
|
||||||
smpte.secs.setValueRaw(61); // set "wrong" value, bypassing normalisation
|
smpte.secs.setValueRaw(61); // set "wrong" value, bypassing normalisation
|
||||||
CHECK (smpte.secs == 61);
|
CHECK (smpte.secs == 61);
|
||||||
|
|
|
||||||
|
|
@ -190,6 +190,7 @@ namespace test{
|
||||||
CHECK (th+th == t1);
|
CHECK (th+th == t1);
|
||||||
CHECK (t1-th == th);
|
CHECK (t1-th == th);
|
||||||
CHECK (((t1-th)*=2) == t1);
|
CHECK (((t1-th)*=2) == t1);
|
||||||
|
CHECK (th-th == Time(0));
|
||||||
|
|
||||||
// that was indeed a temporary and didn't affect the originals
|
// that was indeed a temporary and didn't affect the originals
|
||||||
CHECK (t1 == TimeValue(GAVL_TIME_SCALE));
|
CHECK (t1 == TimeValue(GAVL_TIME_SCALE));
|
||||||
|
|
|
||||||
|
|
@ -6746,7 +6746,7 @@ Question is: how fine grained and configurable needs this to be?
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="TimecodeFormat" modifier="Ichthyostega" modified="201101211920" created="201101100308" tags="Player spec discuss draft" changecount="24">
|
<div title="TimecodeFormat" modifier="Ichthyostega" modified="201101220135" created="201101100308" tags="Player spec discuss draft" changecount="25">
|
||||||
<pre>The handling of [[Timecode]] is closely related to [[time representation and quantisation|TimeQuant]]. In fact, these two topics blend into one another. Time will be quantised into a //grid,// but this grid only makes sense when linked to a externally relevant meaning and representation, which is the Timecode. But a timecode value also denotes a specific point in time -- performing operations on a timecode is equivalent to manipulating a quantised time value.
|
<pre>The handling of [[Timecode]] is closely related to [[time representation and quantisation|TimeQuant]]. In fact, these two topics blend into one another. Time will be quantised into a //grid,// but this grid only makes sense when linked to a externally relevant meaning and representation, which is the Timecode. But a timecode value also denotes a specific point in time -- performing operations on a timecode is equivalent to manipulating a quantised time value.
|
||||||
|
|
||||||
!Problem of dependencies
|
!Problem of dependencies
|
||||||
|
|
@ -6791,6 +6791,8 @@ But because for Lumiera the SMPTE format is just a presentation rule applied to
|
||||||
# by a representation symmetrical to the zero point (0:0:0:0 - 1sec = -0:0:1:0) -- but beware: //the underlying frame quantisation won't flip//
|
# by a representation symmetrical to the zero point (0:0:0:0 - 1sec = -0:0:1:0) -- but beware: //the underlying frame quantisation won't flip//
|
||||||
Because this decision is considered arbitrary and any reasoning will be context dependant, the decision is to provide a hook for a //strategy// --
|
Because this decision is considered arbitrary and any reasoning will be context dependant, the decision is to provide a hook for a //strategy// --
|
||||||
Currently (1/11), the strategy is implemented according to (1) and (4) above, leaving the actual configuration of a strategy for later.
|
Currently (1/11), the strategy is implemented according to (1) and (4) above, leaving the actual configuration of a strategy for later.
|
||||||
|
!!{{red{WIP 1/11}}}BUG
|
||||||
|
Implementation of this strategy is still broken: it doesn't work properly when actually the change passing over the zero point happens by propagation from lower digits. Because then -- given the way the mutators are implemented -- the //new value of the wrapping digit hasn't been stored.// It seems the only sensible solution is to change the definition of the functors, so that any value will be changed by side-effect
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div title="Timeline" modifier="Ichthyostega" modified="201011220126" created="200706250721" tags="def" changecount="21">
|
<div title="Timeline" modifier="Ichthyostega" modified="201011220126" created="200706250721" tags="def" changecount="21">
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue