Browse Source

sns: BaseFilter::status()

no real reason to expose internal state, just report filter readiness
dev
Maxim Prokhorov 3 months ago
parent
commit
7152cc67a8
7 changed files with 32 additions and 32 deletions
  1. +5
    -5
      code/espurna/filters/BaseFilter.h
  2. +2
    -2
      code/espurna/filters/LastFilter.h
  3. +2
    -2
      code/espurna/filters/MaxFilter.h
  4. +7
    -9
      code/espurna/filters/MedianFilter.h
  5. +2
    -2
      code/espurna/filters/MovingAverageFilter.h
  6. +2
    -2
      code/espurna/filters/SumFilter.h
  7. +12
    -10
      code/test/unit/src/filters/filters.cpp

+ 5
- 5
code/espurna/filters/BaseFilter.h View File

@ -11,16 +11,16 @@ class BaseFilter {
public:
virtual ~BaseFilter() = default;
// Reset internal value to default and also erases internal storage
// Reset internal state to default
virtual void reset() {
}
// Defaults to 0 aka no backing storage
virtual size_t capacity() const {
return 0;
// Defaults to false aka filter is not initialized
virtual bool status() const {
return false;
}
// Resize the backing storage (when it is available)
// Resize the backing storage (when it is available) and reset internal state
virtual void resize(size_t) {
}


+ 2
- 2
code/espurna/filters/LastFilter.h View File

@ -13,8 +13,8 @@ public:
_value = value;
}
size_t capacity() const override {
return 1;
bool status() const override {
return true;
}
void reset() override {


+ 2
- 2
code/espurna/filters/MaxFilter.h View File

@ -15,8 +15,8 @@ public:
_value = std::max(value, _value);
}
size_t capacity() const override {
return 1;
bool status() const override {
return true;
}
void resize(size_t) override {


+ 7
- 9
code/espurna/filters/MedianFilter.h View File

@ -61,8 +61,8 @@ public:
return out;
}
size_t capacity() const override {
return _capacity;
bool status() const override {
return _values.capacity() > 0;
}
void resize(size_t capacity) override {
@ -72,14 +72,12 @@ public:
private:
void _reset() {
auto previous = _values.size()
? _values.back()
: 0.0;
_values.clear();
_values.push_back(previous);
if (_values.size()) {
_values.erase(_values.begin(), _values.end() - 1);
} else {
_values.clear();
}
}
std::vector<double> _values;
size_t _capacity = 0;
};

+ 2
- 2
code/espurna/filters/MovingAverageFilter.h View File

@ -17,8 +17,8 @@ public:
}
}
size_t capacity() const override {
return _values.capacity();
bool status() const override {
return _values.capacity() > 0;
}
double value() const override {


+ 2
- 2
code/espurna/filters/SumFilter.h View File

@ -13,8 +13,8 @@ public:
_value += value;
}
size_t capacity() const override {
return 1;
bool status() const override {
return true;
}
void resize(size_t) override {


+ 12
- 10
code/test/unit/src/filters/filters.cpp View File

@ -19,12 +19,12 @@ namespace {
void test_last() {
auto filter = LastFilter();
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
filter.resize(123);
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
filter.update(123.4);
@ -43,12 +43,12 @@ void test_last() {
void test_max() {
auto filter = MaxFilter();
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
filter.resize(567);
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
filter.update(5.0);
@ -78,12 +78,12 @@ void test_max() {
void test_median() {
auto filter = MedianFilter();
TEST_ASSERT_EQUAL(0, filter.capacity());
TEST_ASSERT(!filter.status());
const double one[] {4., 3., 5., 6., 2., 2., 3., 4., 7., 9.};
filter.resize(std::size(one));
TEST_ASSERT_EQUAL(std::size(samples), filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
for (const auto& sample : one) {
@ -95,6 +95,7 @@ void test_median() {
const double two[] {6., 6.1, 6.2, 6.3, 6.4, 6.5, 2.5, 4.5, 2.6, 2.5, 2.4};
filter.resize(std::size(two));
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(9, filter.value());
for (const auto& sample : two) {
@ -106,6 +107,7 @@ void test_median() {
const double three[] {2.4, 2.4};
filter.resize(std::size(three));
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(2.4, filter.value());
for (const auto& sample : three) {
@ -118,13 +120,13 @@ void test_median() {
void test_moving_average() {
auto filter = MovingAverageFilter();
TEST_ASSERT_EQUAL(0, filter.capacity());
TEST_ASSERT(!filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
const double samples[] {22., 22.3, 22.1, 22.1, 22.1, 22.0, 22.5, 22.1};
filter.resize(std::size(samples));
TEST_ASSERT_EQUAL(std::size(samples), filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
for (const auto& sample : samples) {
@ -137,13 +139,13 @@ void test_moving_average() {
void test_sum() {
auto filter = SumFilter();
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
const double samples[] {20., 20.1, 13., 10., 5., 14., 29., 32.};
filter.resize(std::size(samples));
TEST_ASSERT_EQUAL(1, filter.capacity());
TEST_ASSERT(filter.status());
TEST_ASSERT_EQUAL_DOUBLE(0.0, filter.value());
for (const auto& sample : samples) {


Loading…
Cancel
Save