@@ -15,14 +15,6 @@ struct positionLog {
1515
1616positionLog lastPositions[16 ];
1717
18- struct modeLog {
19- byte prevMode;
20- byte newMode;
21- };
22-
23- byte modeIndex = 0 ;
24- modeLog lastModes[10 ];
25-
2618void setUp (void ) {
2719 for (int id = 0 ; id < 16 ; id++) {
2820 lastPositions[id].index = 0 ;
@@ -31,13 +23,6 @@ void setUp(void) {
3123 lastPositions[id].positions [i] = 0 ;
3224 }
3325 }
34-
35- for (int i = 0 ; i < 10 ; i++) {
36- lastModes[i].prevMode = 0 ;
37- lastModes[i].newMode = 0 ;
38- }
39-
40- modeIndex = 0 ;
4126}
4227
4328void move (byte servoID, int position) {
@@ -46,12 +31,6 @@ void move(byte servoID, int position) {
4631 lastPositions[servoID].index ++;
4732}
4833
49- void onModeChange (byte prevMode, byte newMode) {
50- lastModes[modeIndex].prevMode = prevMode;
51- lastModes[modeIndex].newMode = newMode;
52- modeIndex++;
53- }
54-
5534const int positionsA[5 ] PROGMEM = {350 , 340 , 330 , 340 , 330 };
5635const int positionsB[5 ] PROGMEM = {250 , 240 , 230 , 240 , 230 };
5736
@@ -67,48 +46,56 @@ void test_play(void) {
6746 animation.play ();
6847 TEST_ASSERT_EQUAL (Animation::MODE_PLAY, animation.getMode ());
6948
70- int expA[9 ] = {340 , 330 , 340 , 330 , 350 , 340 , 330 , 340 , 330 };
71- int expB[9 ] = {240 , 230 , 240 , 230 , 250 , 240 , 230 , 240 , 230 };
49+ int expA[5 ] = {340 , 330 , 340 , 330 , 350 };
50+ int expB[5 ] = {240 , 230 , 240 , 230 , 250 };
7251
7352 for (long i = 0 ; i < FRAME_MICROS * (long )9 ; i++) {
7453 animation.run (i);
7554 }
7655
77- for (int i = 0 ; i < 9 ; i++) {
56+ for (int i = 0 ; i < 5 ; i++) {
7857 TEST_ASSERT_EQUAL (expA[i], lastPositions[1 ].positions [i]);
7958 TEST_ASSERT_EQUAL (expB[i], lastPositions[2 ].positions [i]);
8059 TEST_ASSERT_EQUAL (0 , lastPositions[3 ].positions [i]);
8160 }
61+
62+ for (int i = 5 ; i < 9 ; i++) {
63+ TEST_ASSERT_EQUAL (0 , lastPositions[1 ].positions [i]);
64+ TEST_ASSERT_EQUAL (0 , lastPositions[2 ].positions [i]);
65+ TEST_ASSERT_EQUAL (0 , lastPositions[3 ].positions [i]);
66+ }
67+
68+ TEST_ASSERT_EQUAL (Animation::MODE_DEFAULT, animation.getMode ());
8269}
8370
84- void test_pause (void ) {
71+ void test_pause_play (void ) {
8572 Animation animation (FPS, FRAMES);
8673 Servo servo (2 , positionsA, move);
8774 animation.addServo (servo);
8875 animation.play ();
8976 TEST_ASSERT_EQUAL (Animation::MODE_PLAY, animation.getMode ());
9077
91- int exp[9 ] = {340 , 330 , 340 , 330 , 350 , 340 , 330 , 340 , 330 };
78+ int exp[5 ] = {340 , 330 , 340 , 330 , 350 };
9279
93- for (int i = 0 ; i < 4 ; i++) {
80+ for (int i = 0 ; i < 2 ; i++) {
9481 animation.run (FRAME_MICROS * (long )(i + 1 ));
9582 TEST_ASSERT_EQUAL (exp[i], lastPositions[2 ].positions [i]);
9683 }
9784
9885 animation.pause ();
9986 TEST_ASSERT_EQUAL (Animation::MODE_PAUSE, animation.getMode ());
10087
101- for (int i = 4 ; i < 8 ; i++) {
88+ for (int i = 2 ; i < 5 ; i++) {
10289 animation.run (FRAME_MICROS * (long )(i + 1 ));
10390 TEST_ASSERT_EQUAL (0 , lastPositions[2 ].positions [i]);
10491 }
10592
10693 animation.play ();
10794 TEST_ASSERT_EQUAL (Animation::MODE_PLAY, animation.getMode ());
10895
109- for (int i = 8 ; i < 14 ; i++) {
96+ for (int i = 5 ; i < 8 ; i++) {
11097 animation.run (FRAME_MICROS * (long )(i + 1 ));
111- TEST_ASSERT_EQUAL (exp[i - 5 ], lastPositions[2 ].positions [i - 5 ]);
98+ TEST_ASSERT_EQUAL (exp[i - 3 ], lastPositions[2 ].positions [i - 3 ]);
11299 }
113100}
114101
@@ -143,68 +130,71 @@ void test_stop(void) {
143130 TEST_ASSERT_EQUAL (0 , animation.getFrame ());
144131}
145132
146- void test_live (void ) {
147- Animation animation;
148- SerialMock mock;
133+ void test_loop (void ) {
134+ Animation animation (FPS, FRAMES);
149135 Servo servos[] = {
150- Servo (0 , positionsA, move),
151- Servo (1 , move),
136+ Servo (1 , positionsA, move),
137+ Servo (2 , positionsB, move),
138+ Servo (3 , move),
152139 };
153- animation.addServos (servos, 2 );
154- animation.live (mock);
155- TEST_ASSERT_EQUAL (Animation::MODE_LIVE, animation.getMode ());
140+ animation.addServos (servos, 3 );
141+ TEST_ASSERT_EQUAL (Animation::MODE_DEFAULT, animation.getMode ());
142+ animation.loop ();
143+ TEST_ASSERT_EQUAL (Animation::MODE_LOOP, animation.getMode ());
156144
157- byte values[ 20 ] = {60 , 0 , 1 , 94 , 62 , 60 , 1 , 1 , 94 , 62 ,
158- 60 , 0 , 1 , 99 , 62 , 60 , 1 , 1 , 99 , 62 };
145+ int expA[ 9 ] = {340 , 330 , 340 , 330 , 350 , 340 , 330 , 340 , 330 };
146+ int expB[ 9 ] = { 240 , 230 , 240 , 230 , 250 , 240 , 230 , 240 , 230 };
159147
160- for (int i = 0 ; i < 10 ; i++) {
161- mock. write (values[i] );
148+ for (long i = 0 ; i < FRAME_MICROS * ( long ) 9 ; i++) {
149+ animation. run (i );
162150 }
163151
164- animation.run ();
165-
166- TEST_ASSERT_EQUAL (0 , lastPositions[0 ].positions [0 ]);
167- TEST_ASSERT_EQUAL (350 , lastPositions[1 ].positions [0 ]);
168-
169- for (int i = 10 ; i < 20 ; i++) {
170- mock.write (values[i]);
152+ for (int i = 0 ; i < 9 ; i++) {
153+ TEST_ASSERT_EQUAL (expA[i], lastPositions[1 ].positions [i]);
154+ TEST_ASSERT_EQUAL (expB[i], lastPositions[2 ].positions [i]);
155+ TEST_ASSERT_EQUAL (0 , lastPositions[3 ].positions [i]);
171156 }
172157
173- animation.run ();
174-
175- TEST_ASSERT_EQUAL (355 , lastPositions[0 ].positions [0 ]);
176- TEST_ASSERT_EQUAL (355 , lastPositions[1 ].positions [1 ]);
158+ TEST_ASSERT_EQUAL (Animation::MODE_LOOP, animation.getMode ());
177159}
178160
179- void test_mode_change (void ) {
180- SerialMock mock;
161+ void test_pause_loop (void ) {
181162 Animation animation (FPS, FRAMES);
163+ Servo servo (2 , positionsA, move);
164+ animation.addServo (servo);
165+ animation.loop ();
166+ TEST_ASSERT_EQUAL (Animation::MODE_LOOP, animation.getMode ());
182167
183- animation.onModeChange (onModeChange);
168+ int exp[9 ] = {340 , 330 , 340 , 330 , 350 , 340 , 330 , 340 , 330 };
169+
170+ for (int i = 0 ; i < 4 ; i++) {
171+ animation.run (FRAME_MICROS * (long )(i + 1 ));
172+ TEST_ASSERT_EQUAL (exp[i], lastPositions[2 ].positions [i]);
173+ }
184174
185- animation.play ();
186- TEST_ASSERT_EQUAL (Animation::MODE_DEFAULT, lastModes[0 ].prevMode );
187- TEST_ASSERT_EQUAL (Animation::MODE_PLAY, lastModes[0 ].newMode );
188175 animation.pause ();
189- TEST_ASSERT_EQUAL (Animation::MODE_PLAY, lastModes[1 ].prevMode );
190- TEST_ASSERT_EQUAL (Animation::MODE_PAUSE, lastModes[1 ].newMode );
191- animation.stop ();
192- TEST_ASSERT_EQUAL (Animation::MODE_PAUSE, lastModes[2 ].prevMode );
193- TEST_ASSERT_EQUAL (Animation::MODE_STOP, lastModes[2 ].newMode );
194- animation.run ();
195- TEST_ASSERT_EQUAL (Animation::MODE_STOP, lastModes[3 ].prevMode );
196- TEST_ASSERT_EQUAL (Animation::MODE_DEFAULT, lastModes[3 ].newMode );
197- animation.live (mock);
198- TEST_ASSERT_EQUAL (Animation::MODE_DEFAULT, lastModes[4 ].prevMode );
199- TEST_ASSERT_EQUAL (Animation::MODE_LIVE, lastModes[4 ].newMode );
176+ TEST_ASSERT_EQUAL (Animation::MODE_PAUSE, animation.getMode ());
177+
178+ for (int i = 4 ; i < 8 ; i++) {
179+ animation.run (FRAME_MICROS * (long )(i + 1 ));
180+ TEST_ASSERT_EQUAL (0 , lastPositions[2 ].positions [i]);
181+ }
182+
183+ animation.loop ();
184+ TEST_ASSERT_EQUAL (Animation::MODE_LOOP, animation.getMode ());
185+
186+ for (int i = 8 ; i < 14 ; i++) {
187+ animation.run (FRAME_MICROS * (long )(i + 1 ));
188+ TEST_ASSERT_EQUAL (exp[i - 5 ], lastPositions[2 ].positions [i - 5 ]);
189+ }
200190}
201191
202192int main (int argc, char **argv) {
203193 UNITY_BEGIN ();
204194 RUN_TEST (test_play);
205- RUN_TEST (test_pause );
195+ RUN_TEST (test_pause_play );
206196 RUN_TEST (test_stop);
207- RUN_TEST (test_live );
208- RUN_TEST (test_mode_change );
197+ RUN_TEST (test_loop );
198+ RUN_TEST (test_pause_loop );
209199 UNITY_END ();
210200}
0 commit comments