My favorites | Sign in
Project Home Downloads Wiki Issues Source
Checkout   Browse   Changes    
 
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#include <stdio.h>
#include <inttypes.h>
#include <limits.h>
#include "../ring_buffer.h"
#include "minunit.h"

int tests_run = 0;
char minunit_msg[255];
char msg[50];
#define assert_start_end(buffer, s,e) \
{ unsigned char sa = buffer.idx_start; \
unsigned char ea = buffer.idx_end; \
sprintf(msg, "expected %d/%d, got %d/%d",s,e,sa,ea); mu_assert(msg, sa == s && ea == e); }

static char* test_push_pop() {
ring_buffer buffer;
buffer.idx_start = 0;
buffer.idx_end = 0;

ring_buffer_push(&buffer, 1);
ring_buffer_push(&buffer, 2);
ring_buffer_push(&buffer, 3);
assert_start_end(buffer, 0,3);

mu_assert_eq(1, ring_buffer_pop(&buffer));
mu_assert_eq(2, ring_buffer_pop(&buffer));
mu_assert_eq(3, ring_buffer_pop(&buffer));
assert_start_end(buffer, 3,3);

ring_buffer_push(&buffer, 4);
ring_buffer_push(&buffer, 5);
ring_buffer_push(&buffer, 6);
ring_buffer_push(&buffer, 7);
assert_start_end(buffer, 3,7);

mu_assert_eq(4, ring_buffer_pop(&buffer));
mu_assert_eq(5, ring_buffer_pop(&buffer));
mu_assert_eq(6, ring_buffer_pop(&buffer));
mu_assert_eq(7, ring_buffer_pop(&buffer));
assert_start_end(buffer, 7,7);

ring_buffer_push(&buffer, 8);
assert_start_end(buffer, 7,8);

mu_assert_eq(8, ring_buffer_pop(&buffer));
assert_start_end(buffer, 8,8);

ring_buffer_push(&buffer, 9);
ring_buffer_push(&buffer, 10);
ring_buffer_push(&buffer, 11);
ring_buffer_push(&buffer, 12);
assert_start_end(buffer, 8, 12);

mu_assert_eq(9, ring_buffer_pop(&buffer));
mu_assert_eq(10, ring_buffer_pop(&buffer));
mu_assert_eq(11, ring_buffer_pop(&buffer));
mu_assert_eq(12, ring_buffer_pop(&buffer));
assert_start_end(buffer, 12, 12);

return 0;
}

static char * test_index_overflow() {
ring_buffer buffer;
buffer.idx_start = 0;
buffer.idx_end = 0;
int i = 0;
for (i=0; i<2000; i++) {
assert_start_end(buffer, (i%256), (i%256));
ring_buffer_push(&buffer, i);
assert_start_end(buffer, i%256, (i+1)%256);
char msg[20];
int popped = ring_buffer_pop(&buffer);
sprintf(msg, "popped value should be %d, is %d", i, popped);
mu_assert(msg, (popped == i%256));
}
return 0;
}

static char * test_ring_buffer_push_array() {
ring_buffer buffer;
buffer.idx_start = 0;
buffer.idx_end = 0;
uint8_t array[8] = { 1,2,3,4,5,6,7,8 };
ring_buffer_push_array(&buffer, array, 4 );
assert_start_end(buffer, 0, 4);
mu_assert_eq(1, ring_buffer_pop(&buffer));
mu_assert_eq(2, ring_buffer_pop(&buffer));
mu_assert_eq(3, ring_buffer_pop(&buffer));
mu_assert_eq(4, ring_buffer_pop(&buffer));

ring_buffer_push_array(&buffer, array, 8 );
assert_start_end(buffer, 4, 12);

mu_assert_eq(1, ring_buffer_pop(&buffer));
mu_assert_eq(2, ring_buffer_pop(&buffer));
mu_assert_eq(3, ring_buffer_pop(&buffer));
mu_assert_eq(4, ring_buffer_pop(&buffer));
mu_assert_eq(5, ring_buffer_pop(&buffer));
mu_assert_eq(6, ring_buffer_pop(&buffer));
mu_assert_eq(7, ring_buffer_pop(&buffer));
mu_assert_eq(8, ring_buffer_pop(&buffer));

assert_start_end(buffer, 12, 12);

return 0;
}

char * test_ring_buffer_has_data() {
ring_buffer buffer;
buffer.idx_start = 0;
buffer.idx_end = 0;
mu_assert("buffer should not have data", !ring_buffer_has_data(&buffer));
uint8_t array[8] = { 1,2,3,4,5,6,7,8 };
ring_buffer_push_array(&buffer, array, 4 );
mu_assert("buffer should have data", ring_buffer_has_data(&buffer));

ring_buffer_pop(&buffer);
mu_assert("buffer should have data", ring_buffer_has_data(&buffer));
ring_buffer_pop(&buffer);
mu_assert("buffer should have data", ring_buffer_has_data(&buffer));
ring_buffer_pop(&buffer);
mu_assert("buffer should have data", ring_buffer_has_data(&buffer));
ring_buffer_pop(&buffer);

mu_assert("buffer should not have data", !(ring_buffer_has_data(&buffer)));

ring_buffer_push_array(&buffer, array, 4 );
mu_assert("buffer should have data", ring_buffer_has_data(&buffer));

while(ring_buffer_has_data(&buffer)) {
ring_buffer_pop(&buffer);
}
mu_assert("buffer should not have data", !(ring_buffer_has_data(&buffer)));

return 0;
}

char * test_ring_buffer() {
mu_run_test(test_push_pop);
mu_run_test(test_index_overflow);
mu_run_test(test_ring_buffer_push_array);
mu_run_test(test_ring_buffer_has_data);
return 0;
}

Change log

r255 by matteo.caprari on Sep 16, 2008   Diff
- 23% coverage on cyz_cmd
- reduced binary footprint of 64 bytes
(now 3700)
Go to: 
Project members, sign in to write a code review

Older revisions

r247 by matteo.caprari on Sep 12, 2008   Diff
- tested load_boot_parms
- added branch mode_no_play to test
set_boot_parms
- shortened boot_parms to reuse mode
byte
r246 by matteo.caprari on Sep 11, 2008   Diff
- more commands tested
- added mock macros in eeprom.h
- added compilation option to use gcov
to assest test coverage
r242 by matteo.caprari on Sep 8, 2008   Diff
- separated avr-only procedures from
cyz_cmd.c (eeprom.h, progmem.h)
- wrapped color procedures in color.h
- cyz_does not depend anymore from
cyz_rgb
...
All revisions of this file

File info

Size: 4195 bytes, 145 lines
Powered by Google Project Hosting