3-phase PV router
Loading...
Searching...
No Matches
test_main.cpp
Go to the documentation of this file.
1
2#include <unity.h>
3#include "ewma_avg.hpp" // Include the EWMA_average class
4
5// 120 should be for around 10 minutes of data (period in minutes * 60 / datalog period in seconds)
7{
8 EWMA_average< 120 > avg; // Initialize with default smoothing factor
9 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageS()); // EMA should start at 0
10 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageD()); // DEMA should start at 0
11 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageT()); // TEMA should start at 0
12}
13
15{
17 avg.addValue(100); // Add a single value
18 TEST_ASSERT_EQUAL_INT32(100, avg.getAverageS()); // EMA should match the input
19 TEST_ASSERT_EQUAL_INT32(100, avg.getAverageD()); // DEMA should match the input
20 TEST_ASSERT_EQUAL_INT32(100, avg.getAverageT()); // TEMA should match the input
21}
22
24{
26 avg.addValue(100); // Add first value
27 avg.addValue(200); // Add second value
28 TEST_ASSERT_GREATER_THAN(100, avg.getAverageS()); // EMA should be between 100 and 200
29 TEST_ASSERT_LESS_THAN(200, avg.getAverageS()); // EMA should be less than 200
30 TEST_ASSERT_GREATER_THAN(100, avg.getAverageD()); // DEMA should be between 100 and 200
31 TEST_ASSERT_LESS_THAN(200, avg.getAverageD()); // DEMA should be less than 200
32 TEST_ASSERT_GREATER_THAN(100, avg.getAverageT()); // TEMA should be between 100 and 200
33 TEST_ASSERT_LESS_THAN(200, avg.getAverageT()); // TEMA should be less than 200
34}
35
37{
39 avg.addValue(100);
40 avg.addValue(1000); // Add a peak value
41 TEST_ASSERT_GREATER_THAN(100, avg.getAverageS()); // EMA should increase
42 TEST_ASSERT_GREATER_THAN(avg.getAverageS(), avg.getAverageD()); // EMA > DEMA
43 TEST_ASSERT_GREATER_THAN(avg.getAverageD(), avg.getAverageT()); // DEMA > TEMA
44}
45
47{
49 avg.addValue(100);
50 avg.addValue(200);
51 avg = EWMA_average< 120 >(); // Reset by reinitializing
52 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageS()); // EMA should reset to 0
53 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageD()); // DEMA should reset to 0
54 TEST_ASSERT_EQUAL_INT32(0, avg.getAverageT()); // TEMA should reset to 0
55}
56
57int main()
58{
59 UNITY_BEGIN();
60
61 RUN_TEST(test_initial_values);
64 RUN_TEST(test_peak_response);
65 RUN_TEST(test_reset_behavior);
66
67 return UNITY_END();
68}
Implements an Exponentially Weighted Moving Average (EWMA).
Definition ewma_avg.hpp:80
void addValue(int32_t input)
Add a new value and update the EMA, DEMA, and TEMA.
Definition ewma_avg.hpp:90
auto getAverageD() const
Get the Double Exponentially Weighted Moving Average (DEMA).
Definition ewma_avg.hpp:117
auto getAverageT() const
Get the Triple Exponentially Weighted Moving Average (TEMA).
Definition ewma_avg.hpp:127
auto getAverageS() const
Get the Exponentially Weighted Moving Average (EMA).
Definition ewma_avg.hpp:107
This file implements an Exponentially Weighted Moving Average template class.
void test_reset_behavior()
Definition test_main.cpp:46
void test_initial_values()
Definition test_main.cpp:6
void test_single_value_update()
Definition test_main.cpp:14
void test_multiple_value_updates()
Definition test_main.cpp:23
int main()
Definition test_main.cpp:57
void test_peak_response()
Definition test_main.cpp:36