Skip to content

Commit 6af649f

Browse files
Generate HTML reports in coverage-summary. More mixer tests
1 parent c9dfb85 commit 6af649f

4 files changed

Lines changed: 120 additions & 7 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ utils/genspeech/*.zip
2222
#.settings/org.eclipse.cdt.*
2323
#src/beta-*
2424
/local/
25+
coverage/
2526

2627
src/filesystem/
2728

src/target/test/channels.c

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,41 @@
1616
#include "../common/emu/fltk.h"
1717
#include "mixer.h"
1818

19+
void TEST_CHAN_SetChannelValue(int channel, s32 value)
20+
{
21+
s32 step = (CHAN_MAX_VALUE - CHAN_MIN_VALUE) / 100;
22+
switch(channel) {
23+
case INP_THROTTLE: gui.throttle = (value - CHAN_MIN_VALUE) / step; break;
24+
case INP_RUDDER: gui.rudder = (value - CHAN_MIN_VALUE) / step; break;
25+
case INP_ELEVATOR: gui.elevator = (value - CHAN_MIN_VALUE) / step; break;
26+
case INP_AILERON: gui.aileron = (value - CHAN_MIN_VALUE) / step; break;
27+
28+
case INP_RUD_DR0: gui.rud_dr = 0; break;
29+
case INP_RUD_DR1: gui.rud_dr = 1; break;
30+
31+
case INP_ELE_DR0: gui.ele_dr = 0; break;
32+
case INP_ELE_DR1: gui.ele_dr = 1; break;
33+
34+
case INP_AIL_DR0: gui.ail_dr = 0; break;
35+
case INP_AIL_DR1: gui.ail_dr = 1; break;
36+
37+
case INP_GEAR0: gui.gear = 0; break;
38+
case INP_GEAR1: gui.gear = 1; break;
39+
40+
case INP_MIX0: gui.mix = 0; break;
41+
case INP_MIX1: gui.mix = 1; break;
42+
case INP_MIX2: gui.mix = 2; break;
43+
44+
case INP_FMOD0: gui.fmod = 0; break;
45+
case INP_FMOD1: gui.fmod = 1; break;
46+
case INP_FMOD2: gui.fmod = 2; break;
47+
}
48+
return;
49+
}
50+
1951
s32 CHAN_ReadInput(int channel)
2052
{
21-
s32 step = (CHAN_MAX_VALUE - CHAN_MIN_VALUE) / 10;
53+
s32 step = (CHAN_MAX_VALUE - CHAN_MIN_VALUE) / 100;
2254
switch(channel) {
2355
case INP_THROTTLE: return CHAN_MIN_VALUE + step * gui.throttle;
2456
case INP_RUDDER: return CHAN_MIN_VALUE + step * gui.rudder;

src/tests/test_mixer.c

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,110 @@
11
#include "CuTest.h"
22

3+
extern void TEST_CHAN_SetChannelValue(int channel, s32 value);
4+
35
extern struct Transmitter Transmitter;
46
extern u8 TEST_Button_InterruptLongPress();
57

8+
void TestGetAllMixers(CuTest *t)
9+
{
10+
CuAssertPtrEquals(t, MIXER_GetAllMixers(), Model.mixers);
11+
}
12+
13+
void TestGetAllTrims(CuTest *t)
14+
{
15+
CuAssertPtrEquals(t, MIXER_GetAllTrims(), Model.trims);
16+
}
17+
18+
void TestEvalMixers(CuTest *t)
19+
{
20+
s32 rawdata[NUM_SOURCES + 1] = {0};
21+
memset(Model.mixers, 0, sizeof(Model.mixers));
22+
rawdata[1] = 1;
23+
for (unsigned i = 0; i < NUM_MIXERS - 1; i++) {
24+
Model.mixers[i].src = 1;
25+
Model.mixers[i].dest = 2;
26+
Model.mixers[i].scalar = 100;
27+
Model.mixers[i].flags = MUX_ADD;
28+
}
29+
MIXER_EvalMixers(rawdata);
30+
CuAssertIntEquals(t, NUM_MIXERS -1, rawdata[3 + NUM_INPUTS]);
31+
}
32+
633
void TestMixerMapChannel(CuTest *t)
734
{
8-
unsigned channels[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER};
35+
unsigned channels[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER, 5};
936
Transmitter.mode = MODE_1;
1037
for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
11-
unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER};
38+
unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_AILERON, INP_RUDDER, 5};
1239
CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i]));
1340
}
1441
Transmitter.mode = MODE_2;
1542
for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
16-
unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_AILERON, INP_RUDDER};
43+
unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_AILERON, INP_RUDDER, 5};
1744
CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i]));
1845
}
1946
Transmitter.mode = MODE_3;
2047
for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
21-
unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_RUDDER, INP_AILERON};
48+
unsigned expected[] = {INP_THROTTLE, INP_ELEVATOR, INP_RUDDER, INP_AILERON, 5};
2249
CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i]));
2350
}
2451
Transmitter.mode = MODE_4;
2552
for (unsigned i = 0; i < sizeof(channels) / sizeof(channels[0]); i++) {
26-
unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_RUDDER, INP_AILERON};
53+
unsigned expected[] = {INP_ELEVATOR, INP_THROTTLE, INP_RUDDER, INP_AILERON, 5};
2754
CuAssertIntEquals(t, expected[i], MIXER_MapChannel(channels[i]));
2855
}
2956
}
3057

58+
void TestUpdateRawInputs(CuTest *t)
59+
{
60+
memset(&Model, 0, sizeof(Model));
61+
memset((s32 *)raw, 0, sizeof(raw));
62+
for (int i = 1; i <= NUM_TX_INPUTS; i++) {
63+
TEST_CHAN_SetChannelValue(i, (i + 1) * 200);
64+
Model.mixers[i].src = i;
65+
Model.mixers[i].dest = i;
66+
Model.mixers[i].scalar = 100;
67+
Model.mixers[i].flags = MUX_REPLACE;
68+
}
69+
MIXER_UpdateRawInputs();
70+
s32 expected[] = {
71+
0, 1000, 800, 600, 400, -10000, 10000, -10000, 10000, -10000,
72+
10000, -10000, 10000, -10000, -10000, 10000, -10000, -10000, 10000,
73+
};
74+
for(unsigned i = 0; i < sizeof(raw) / sizeof(raw[0]); i++) {
75+
s32 exp = i*sizeof(s32) < sizeof(expected) ? expected[i] : 0;
76+
CuAssertIntEquals(t, exp, raw[i]);
77+
}
78+
79+
//PPMin = TRAIN2
80+
memset((s32 *)raw, 0, sizeof(raw));
81+
Model.num_ppmin = PPM_IN_TRAIN2 << 6;
82+
Model.train_sw = INP_GEAR1;
83+
raw[Model.train_sw] = 100;
84+
for(int i = 0; i < MAX_PPM_IN_CHANNELS; i++) {
85+
Model.ppm_map[i] = i;
86+
ppmChannels[i] = -100 * i ;
87+
}
88+
MIXER_UpdateRawInputs();
89+
for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) {
90+
CuAssertIntEquals(t, 0, raw[i]);
91+
}
92+
ppmSync = 1;
93+
MIXER_UpdateRawInputs();
94+
for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) {
95+
CuAssertIntEquals(t, -100 * i, raw[i]);
96+
}
97+
98+
//PPMin = Source
99+
ppmSync = 1;
100+
memset((s32 *)raw, 0, sizeof(raw));
101+
Model.num_ppmin = (PPM_IN_SOURCE << 6) | MAX_PPM_IN_CHANNELS;
102+
MIXER_UpdateRawInputs();
103+
for(unsigned i = 0; i < MAX_PPM_IN_CHANNELS; i++) {
104+
CuAssertIntEquals(t, -100 * i, raw[1 + NUM_INPUTS + NUM_OUT_CHANNELS + NUM_VIRT_CHANNELS + i]);
105+
}
106+
}
107+
31108
void TestApplyMixerSimple(CuTest *t)
32109
{
33110
struct Mixer initmixer = {

utils/coverage-summary.sh

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212
# the COPYING file in the top-level directory.
1313

1414
# first generate the coverage report
15-
gcovr -r . --object-directory objs/test/ -e '.*tests/test_.*' -e '.*AllTests.c' -e '.*target/test/CuTest.c' -p -o raw-report.txt
15+
rm -rf coverage/ 2> /dev/null
16+
mkdir coverage
17+
gcovr -k -r . --object-directory objs/test/ -e '.*tests/test_.*' -e '.*AllTests.c' -e '.*target/test/CuTest.c' -p --html --html-details -o coverage/coverage.html
18+
gcovr -g -r . --object-directory objs/test/ -e '.*tests/test_.*' -e '.*AllTests.c' -e '.*target/test/CuTest.c' -p -o raw-report.txt
1619

1720
# strip the full-path and line markers
1821
sed s/objs/test\/ raw-report.txt | sed s/[0-9]\*[,-]//g > simplified.txt

0 commit comments

Comments
 (0)