+ check (2, Eyes::LEFT, __LINE__);
+ check (3, Eyes::LEFT, __LINE__);
+ check (3, Eyes::RIGHT, __LINE__);
+ 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__);