14namespace tracktion {
inline namespace graph
17#if GRAPH_UNIT_TESTS_PLAYHEAD
25 :
juce::UnitTest (
"PlayHead",
"tracktion_graph")
29 void runTest()
override
39 beginTest (
"SplitTimelineRange");
42 playHead.play ({ 0, 1000 },
true);
46 expect (! tr.isSplit);
47 expectEquals<int64_t> (tr.timelineRange1.getStart(), 250);
48 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 750);
49 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
50 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 0);
56 expectEquals<int64_t> (tr.timelineRange1.getStart(), 750);
57 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 1000);
58 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
59 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 250);
63 playHead.play ({ 0, 1500 },
false);
65 expect (! tr.isSplit);
66 expectEquals<int64_t> (tr.timelineRange1.getStart(), 500);
67 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 1500);
68 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
69 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 0);
73 beginTest (
"PlayHead playing");
77 playHead.play ({ 0, 10'000 },
false);
80 expectEquals<int64_t> (playHead.getPosition(), 0);
81 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), 0);
83 referenceRange += 500;
84 playHead.setReferenceSampleRange (referenceRange);
85 expectEquals<int64_t> (playHead.getPosition(), 500);
86 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), 0);
88 referenceRange += 1000;
89 playHead.setReferenceSampleRange (referenceRange);
90 expectEquals<int64_t> (playHead.getPosition(), 1500);
91 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), 0);
94 referenceRange += 500;
95 playHead.setReferenceSampleRange (referenceRange);
96 expectEquals<int64_t> (playHead.getPosition(), 1500);
97 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), 1500);
100 expectEquals<int64_t> (playHead.getPosition(), 1500);
102 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), -500);
103 expectEquals<int64_t> (playHead.getPosition(), 1500);
104 referenceRange += 500;
105 playHead.setReferenceSampleRange (referenceRange);
106 expectEquals<int64_t> (playHead.getPosition(), 2000);
107 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (0), -500);
112 playHead.play ({ 0, 2'000 },
true);
115 auto incrementReferencePos = [&] (
int64_t numSamples)
117 referencePos += numSamples;
118 playHead.setReferenceSampleRange ({ referencePos, referencePos });
121 expectEquals<int64_t> (playHead.getPosition(), 0);
122 incrementReferencePos (1000);
123 expectEquals<int64_t> (playHead.getPosition(), 1000);
124 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (referencePos), playHead.getPosition());
129 expect (! tr.isSplit);
130 expectEquals<int64_t> (tr.timelineRange1.getStart(), 1000);
131 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 1500);
132 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
133 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 0);
136 incrementReferencePos (500);
137 expectEquals<int64_t> (playHead.getPosition(), 1500);
138 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (referencePos), playHead.getPosition());
144 expectEquals<int64_t> (tr.timelineRange1.getStart(), 1500);
145 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 2000);
146 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
147 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 500);
153 playHead.play ({ 1'000, 3'000 },
true);
156 auto incrementReferencePos = [&] (
int64_t numSamples)
158 referencePos += numSamples;
159 playHead.setReferenceSampleRange ({ referencePos, referencePos });
162 expectEquals<int64_t> (playHead.getPosition(), 1'000);
163 incrementReferencePos (1'000);
164 expectEquals<int64_t> (playHead.getPosition(), 2'000);
165 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (referencePos), playHead.getPosition());
170 expect (! tr.isSplit);
171 expectEquals<int64_t> (tr.timelineRange1.getStart(), 2'000);
172 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 2'500);
173 expectEquals<int64_t> (tr.timelineRange2.getStart(), 0);
174 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 0);
177 incrementReferencePos (500);
178 expectEquals<int64_t> (playHead.getPosition(), 2'500);
179 expectEquals<int64_t> (playHead.referenceSamplePositionToTimelinePosition (referencePos), playHead.getPosition());
185 expectEquals<int64_t> (tr.timelineRange1.getStart(), 2'500);
186 expectEquals<int64_t> (tr.timelineRange1.getEnd(), 3'000);
187 expectEquals<int64_t> (tr.timelineRange2.getStart(), 1'000);
188 expectEquals<int64_t> (tr.timelineRange2.getEnd(), 1'500);
194 playHead.play ({ 1'000, 3'000 },
true);
195 playHead.setRollInToLoop (500);
196 expect (playHead.isPlaying());
197 expect (playHead.isLooping());
198 expect (playHead.isRollingIntoLoop());
200 expectEquals<int64_t> (playHead.getPosition(), 500);
201 playHead.setReferenceSampleRange ({ 500, 500 });
202 expectEquals<int64_t> (playHead.getPosition(), 1'000);
203 expect (! playHead.isRollingIntoLoop());
209static PlayHeadTests playHeadTests;
SplitTimelineRange referenceSampleRangeToSplitTimelineRange(const PlayHead &playHead, juce::Range< int64_t > referenceSampleRange)
Converts a reference sample range to a TimelinePositionWindow which could have two time ranges if the...