1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
#include "lib/shuffler.h"
#include "lib/piece.h"
#include "lib/content_video.h"
#include <boost/test/unit_test.hpp>
using std::list;
using boost::shared_ptr;
using boost::weak_ptr;
using boost::optional;
static void
push (Shuffler& s, int frame, Eyes eyes)
{
shared_ptr<Piece> piece (new Piece (shared_ptr<Content>(), shared_ptr<Decoder>(), FrameRateChange(24, 24)));
ContentVideo cv;
cv.frame = frame;
cv.eyes = eyes;
s.video (piece, cv);
}
list<ContentVideo> pending_cv;
static void
receive (weak_ptr<Piece>, ContentVideo cv)
{
pending_cv.push_back (cv);
}
static void
check (int frame, Eyes eyes, int line)
{
BOOST_REQUIRE_MESSAGE (!pending_cv.empty(), "Check at " << line << " failed.");
BOOST_CHECK_MESSAGE (pending_cv.front().frame == frame, "Check at " << line << " failed.");
BOOST_CHECK_MESSAGE (pending_cv.front().eyes == eyes, "Check at " << line << " failed.");
pending_cv.pop_front();
}
/** A perfect sequence */
BOOST_AUTO_TEST_CASE (shuffler_test1)
{
Shuffler s;
s.Video.connect (boost::bind (&receive, _1, _2));
for (int i = 0; i < 10; ++i) {
push (s, i, EYES_LEFT);
push (s, i, EYES_RIGHT);
check (i, EYES_LEFT, __LINE__);
check (i, EYES_RIGHT, __LINE__);
}
}
/** Everything present but some simple shuffling needed */
BOOST_AUTO_TEST_CASE (shuffler_test2)
{
Shuffler s;
s.Video.connect (boost::bind (&receive, _1, _2));
for (int i = 0; i < 10; i += 2) {
push (s, i, EYES_LEFT);
push (s, i + 1, EYES_LEFT);
push (s, i, EYES_RIGHT);
push (s, i + 1, EYES_RIGHT);
check (i, EYES_LEFT, __LINE__);
check (i, EYES_RIGHT, __LINE__);
check (i + 1, EYES_LEFT, __LINE__);
check (i + 1, EYES_RIGHT, __LINE__);
}
}
/** One missing left eye image */
BOOST_AUTO_TEST_CASE (shuffler_test3)
{
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, 1, EYES_LEFT);
check (1, EYES_LEFT, __LINE__);
push (s, 1, EYES_RIGHT);
check (1, EYES_RIGHT, __LINE__);
push (s, 2, EYES_RIGHT);
push (s, 3, EYES_LEFT);
push (s, 3, EYES_RIGHT);
push (s, 4, EYES_LEFT);
push (s, 4, EYES_RIGHT);
s.flush ();
check (2, EYES_RIGHT, __LINE__);
check (3, EYES_LEFT, __LINE__);
check (3, EYES_RIGHT, __LINE__);
check (4, EYES_LEFT, __LINE__);
check (4, EYES_RIGHT, __LINE__);
}
/** One missing right eye image */
BOOST_AUTO_TEST_CASE (shuffler_test4)
{
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, 1, EYES_LEFT);
check (1, EYES_LEFT, __LINE__);
push (s, 1, EYES_RIGHT);
check (1, EYES_RIGHT, __LINE__);
push (s, 2, EYES_LEFT);
push (s, 3, EYES_LEFT);
push (s, 3, EYES_RIGHT);
push (s, 4, EYES_LEFT);
push (s, 4, EYES_RIGHT);
s.flush ();
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__);
}
|