Line | Branch | Decision | Exec | Source |
---|---|---|---|---|
1 | /* | |||
2 | * test_pwm_generator.cpp | |||
3 | * | |||
4 | * @date Dec 8, 2018 | |||
5 | * @author Andrey Belomutskiy, (c) 2012-2020 | |||
6 | */ | |||
7 | ||||
8 | #include "pch.h" | |||
9 | ||||
10 | #define LOW_VALUE 0 | |||
11 | #define HIGH_VALUE 1 | |||
12 | static int expectedTimeOfNextEvent; | |||
13 | ||||
14 | 14 | static void assertNextEvent(const char *msg, int expectedPinState, TestExecutor *executor, OutputPin& pin) { | ||
15 | 14 | printf("PWM_test: Asserting event [%s]\r\n", msg); | ||
16 | // only one action expected in queue | |||
17 |
4/10✓ Branch 3 taken 14 times.
✓ Branch 7 taken 14 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 14 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 14 times.
✗ Branch 35 not taken.
|
14 | ASSERT_EQ( 1, executor->size()) << "PWM_test: schedulingQueue size"; | |
18 | ||||
19 | // move time to next event timestamp | |||
20 | 14 | setTimeNowUs(expectedTimeOfNextEvent); | ||
21 | ||||
22 | // execute pending actions and assert that only one action was executed | |||
23 |
5/12✓ Branch 3 taken 14 times.
✓ Branch 6 taken 14 times.
✓ Branch 10 taken 14 times.
✗ Branch 15 not taken.
✓ Branch 16 taken 14 times.
✗ Branch 19 not taken.
✗ Branch 22 not taken.
✗ Branch 25 not taken.
✗ Branch 30 not taken.
✗ Branch 33 not taken.
✓ Branch 40 taken 14 times.
✗ Branch 41 not taken.
|
14 | ASSERT_EQ(1, executor->executeAll(getTimeNowUs())) << msg << " executed"; | |
24 |
3/10✓ Branch 2 taken 14 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 14 times.
✗ Branch 9 not taken.
✗ Branch 12 not taken.
✗ Branch 15 not taken.
✗ Branch 20 not taken.
✗ Branch 23 not taken.
✓ Branch 30 taken 14 times.
✗ Branch 31 not taken.
|
14 | ASSERT_EQ(expectedPinState, pin.currentLogicValue) << msg << " pin state"; | |
25 | ||||
26 | // assert that we have one new action in queue | |||
27 |
4/10✓ Branch 3 taken 14 times.
✓ Branch 7 taken 14 times.
✗ Branch 12 not taken.
✓ Branch 13 taken 14 times.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 14 times.
✗ Branch 35 not taken.
|
14 | ASSERT_EQ(1, executor->size()) << "PWM_test: queue.size"; | |
28 | } | |||
29 | ||||
30 | 1 | static void test100dutyCycle() { | ||
31 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************** test100dutyCycle\r\n"); | |
32 | ||||
33 | 1 | expectedTimeOfNextEvent = 0; | ||
34 |
1/1✓ Branch 1 taken 1 time.
|
1 | setTimeNowUs(0); | |
35 | ||||
36 | 1 | OutputPin pin; | ||
37 |
1/1✓ Branch 2 taken 1 time.
|
1 | SimplePwm pwm("test PWM1"); | |
38 |
1/1✓ Branch 2 taken 1 time.
|
1 | TestExecutor executor; | |
39 | ||||
40 |
1/1✓ Branch 1 taken 1 time.
|
1 | startSimplePwm(&pwm, "unit_test", | |
41 | &executor, | |||
42 | &pin, | |||
43 | 1000 /* frequency */, | |||
44 | 1.0 /* duty cycle */); | |||
45 | ||||
46 | 1 | expectedTimeOfNextEvent += 1000; | ||
47 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "1@1000/100"; | |
48 | ||||
49 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@100", HIGH_VALUE, &executor, pin); | |
50 | ||||
51 | 1 | expectedTimeOfNextEvent += 1000; | ||
52 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec2@100", HIGH_VALUE, &executor, pin); | |
53 | ||||
54 | 1 | expectedTimeOfNextEvent += 1000; | ||
55 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec3@100", HIGH_VALUE, &executor, pin); | |
56 | 1 | } | ||
57 | ||||
58 | 1 | static void testSwitchToNanPeriod() { | ||
59 |
1/1✓ Branch 1 taken 1 time.
|
1 | printf("*************************************** testSwitchToNanPeriod\r\n"); | |
60 | ||||
61 | 1 | expectedTimeOfNextEvent = 0; | ||
62 |
1/1✓ Branch 1 taken 1 time.
|
1 | setTimeNowUs(0); | |
63 | ||||
64 | 1 | OutputPin pin; | ||
65 |
1/1✓ Branch 2 taken 1 time.
|
1 | SimplePwm pwm("test PWM1"); | |
66 |
1/1✓ Branch 2 taken 1 time.
|
1 | TestExecutor executor; | |
67 | ||||
68 |
1/1✓ Branch 1 taken 1 time.
|
1 | startSimplePwm(&pwm, "unit_test", | |
69 | &executor, | |||
70 | &pin, | |||
71 | 1000 /* frequency */, | |||
72 | 0.60 /* duty cycle */); | |||
73 | ||||
74 | 1 | expectedTimeOfNextEvent += 600; | ||
75 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "1@1000/70"; | |
76 | ||||
77 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@70", LOW_VALUE, &executor, pin); | |
78 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(600, getTimeNowUs()) << "time1"; | |
79 | ||||
80 | 1 | expectedTimeOfNextEvent += 400; | ||
81 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec2@70", HIGH_VALUE, &executor, pin); | |
82 | ||||
83 |
1/1✓ Branch 1 taken 1 time.
|
1 | pwm.setFrequency(NAN); | |
84 | ||||
85 | 1 | expectedTimeOfNextEvent += 600; | ||
86 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "1@1000/NAN"; | |
87 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec2@NAN", LOW_VALUE, &executor, pin); | |
88 | ||||
89 | 1 | expectedTimeOfNextEvent += MS2US(NAN_FREQUENCY_SLEEP_PERIOD_MS); | ||
90 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "2@1000/NAN"; | |
91 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec3@NAN", LOW_VALUE, &executor, pin); | |
92 | 1 | } | ||
93 | ||||
94 | 4 | TEST(PWM, testPwmGenerator) { | ||
95 |
1/1✓ Branch 1 taken 1 time.
|
1 | test100dutyCycle(); | |
96 |
1/1✓ Branch 1 taken 1 time.
|
1 | testSwitchToNanPeriod(); | |
97 | ||||
98 | 1 | expectedTimeOfNextEvent = 0; | ||
99 |
1/1✓ Branch 1 taken 1 time.
|
1 | setTimeNowUs(0); | |
100 | ||||
101 | 1 | OutputPin pin; | ||
102 |
1/1✓ Branch 2 taken 1 time.
|
1 | SimplePwm pwm("test PWM3"); | |
103 |
1/1✓ Branch 2 taken 1 time.
|
1 | TestExecutor executor; | |
104 | ||||
105 |
1/1✓ Branch 1 taken 1 time.
|
1 | startSimplePwm(&pwm, | |
106 | "unit_test", | |||
107 | &executor, | |||
108 | &pin, | |||
109 | 1000 /* frequency */, | |||
110 | 0.80 /* duty cycle */); | |||
111 | ||||
112 | 1 | expectedTimeOfNextEvent += 800; | ||
113 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "1@1000/80"; | |
114 | ||||
115 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@0", LOW_VALUE, &executor, pin); | |
116 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(800, getTimeNowUs()) << "time1"; | |
117 | ||||
118 | 1 | expectedTimeOfNextEvent += 200; | ||
119 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "2@1000/80"; | |
120 | ||||
121 | // above we had vanilla duty cycle, now let's handle a special case | |||
122 |
1/1✓ Branch 1 taken 1 time.
|
1 | pwm.setSimplePwmDutyCycle(0); | |
123 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "2@1000/0"; | |
124 | ||||
125 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@1", LOW_VALUE, &executor, pin); | |
126 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(1000, getTimeNowUs()) << "time2"; | |
127 | ||||
128 | 1 | expectedTimeOfNextEvent += 1000; | ||
129 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "3@1000/0"; | |
130 | ||||
131 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@2", LOW_VALUE /* pin value */, &executor, pin); | |
132 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(2000, getTimeNowUs()) << "time3"; | |
133 | 1 | expectedTimeOfNextEvent += 1000; | ||
134 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "4@1000/0"; | |
135 | ||||
136 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@3", LOW_VALUE /* pin value */, &executor, pin); | |
137 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(3000, getTimeNowUs()) << "time4"; | |
138 | 1 | expectedTimeOfNextEvent += 1000; | ||
139 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "5@1000/0"; | |
140 | ||||
141 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@4", LOW_VALUE /* pin value */, &executor, pin); | |
142 | 1 | expectedTimeOfNextEvent += 1000; | ||
143 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "6@1000/0"; | |
144 | ||||
145 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@5", LOW_VALUE /* pin value */, &executor, pin); | |
146 | 1 | expectedTimeOfNextEvent += 1000; | ||
147 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 12 not taken.
✓ Branch 13 taken 1 time.
✗ Branch 16 not taken.
✗ Branch 19 not taken.
✗ Branch 24 not taken.
✗ Branch 27 not taken.
✓ Branch 34 taken 1 time.
✗ Branch 35 not taken.
|
1 | ASSERT_EQ(5000, getTimeNowUs()) << "time4"; | |
148 |
4/10✓ Branch 3 taken 1 time.
✓ Branch 7 taken 1 time.
✗ Branch 11 not taken.
✓ Branch 12 taken 1 time.
✗ Branch 15 not taken.
✗ Branch 18 not taken.
✗ Branch 23 not taken.
✗ Branch 26 not taken.
✓ Branch 33 taken 1 time.
✗ Branch 34 not taken.
|
1 | ASSERT_EQ(expectedTimeOfNextEvent, executor.getForUnitTest(0)->getMomentUs()) << "7@1000/0"; | |
149 | ||||
150 |
1/1✓ Branch 1 taken 1 time.
|
1 | assertNextEvent("exec@6", LOW_VALUE /* pin value */, &executor, pin); | |
151 | 1 | } | ||
152 |