Add a new "Add DKDM" dialogue (#1637).
[dcpomatic.git] / test / shuffler_test.cc
index 879f2e079ade4145b35730b1e4f1820014c54df4..6d90ba27d99092f32dc3d850bb49c882fe7f1043 100644 (file)
@@ -120,3 +120,50 @@ BOOST_AUTO_TEST_CASE (shuffler_test4)
        check (4, EYES_LEFT, __LINE__);
        check (4, EYES_RIGHT, __LINE__);
 }
+
+/** Only one eye */
+BOOST_AUTO_TEST_CASE (shuffler_test5)
+{
+       Shuffler s;
+       s.Video.connect (boost::bind (&receive, _1, _2));
+
+       /* One left should come out straight away */
+       push (s, 0, EYES_LEFT);
+       check (0, EYES_LEFT, __LINE__);
+
+       /* More lefts should be kept in the shuffler in the hope that some rights arrive */
+       for (int i = 0; i < s._max_size; ++i) {
+               push (s, i + 1, EYES_LEFT);
+       }
+       BOOST_CHECK (pending_cv.empty ());
+
+       /* If enough lefts come the shuffler should conclude that there's no rights and start
+          giving out the lefts.
+       */
+       push (s, s._max_size + 1, EYES_LEFT);
+       check (1, EYES_LEFT, __LINE__);
+}
+
+/** One complete frame (L+R) missing.
+    Shuffler should carry on, skipping this frame, as the player will cope with it.
+*/
+BOOST_AUTO_TEST_CASE (shuffler_test6)
+{
+       Shuffler s;
+       s.Video.connect (boost::bind (&receive, _1, _2));
+
+       push (s, 0, EYES_LEFT);
+       check (0, EYES_LEFT, __LINE__);
+       push (s, 0, EYES_RIGHT);
+       check (0, EYES_RIGHT, __LINE__);
+
+       push (s, 2, EYES_LEFT);
+       push (s, 2, EYES_RIGHT);
+       check (2, EYES_LEFT, __LINE__);
+       check (2, EYES_RIGHT, __LINE__);
+
+       push (s, 3, EYES_LEFT);
+       check (3, EYES_LEFT, __LINE__);
+       push (s, 3, EYES_RIGHT);
+       check (3, EYES_RIGHT, __LINE__);
+}