mirror of
https://github.com/torlando-tech/pyxis.git
synced 2026-08-04 01:40:33 +00:00
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
#include <cstdint>
|
|
#include <iostream>
|
|
#include "ButtonDebouncer.h"
|
|
|
|
using Hardware::TDeck::ButtonDebouncer;
|
|
|
|
static int passed = 0;
|
|
static int failed = 0;
|
|
#define CHECK(expr) do { if (expr) { ++passed; } else { ++failed; std::cerr << "FAIL line " << __LINE__ << ": " #expr "\n"; } } while (0)
|
|
|
|
int main() {
|
|
ButtonDebouncer d(50);
|
|
CHECK(!d.update(false, 0));
|
|
CHECK(!d.changed());
|
|
|
|
// A 30 ms active-low noise pulse must never become a press or release.
|
|
CHECK(!d.update(true, 100));
|
|
CHECK(!d.update(true, 129));
|
|
CHECK(!d.update(false, 130));
|
|
CHECK(!d.changed());
|
|
|
|
// Both edges must remain stable for the full debounce interval.
|
|
CHECK(!d.update(true, 200));
|
|
CHECK(!d.update(true, 249));
|
|
CHECK(d.update(true, 250));
|
|
CHECK(d.changed());
|
|
CHECK(d.update(false, 260));
|
|
CHECK(d.update(false, 309));
|
|
CHECK(!d.update(false, 310));
|
|
CHECK(d.changed());
|
|
|
|
// Unsigned subtraction keeps the interval correct across millis() wrap.
|
|
ButtonDebouncer wrap(50);
|
|
CHECK(!wrap.update(false, 0xFFFFFFE0u));
|
|
CHECK(!wrap.update(true, 0xFFFFFFF0u));
|
|
CHECK(!wrap.update(true, 0x00000020u));
|
|
CHECK(wrap.update(true, 0x00000022u));
|
|
CHECK(wrap.changed());
|
|
|
|
std::cout << passed << " passed, " << failed << " failed\n";
|
|
return failed == 0 ? 0 : 1;
|
|
}
|