cwwvb/tests.cpp
2022-01-11 21:16:44 -06:00

146 lines
2.9 KiB
C++

// SPDX-FileCopyrightText: 2021 Jeff Epler
//
// SPDX-License-Identifier: GPL-3.0-only
#ifndef ARDUINO
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include <doctest/doctest.h>
#include "decoder.h"
circular_bit_array<6> cba;
circular_symbol_array<6, 4> csa;
TEST_CASE("test bit array") {
for (int i = 0; i < 6; i++)
cba.put(0);
// The next puts need to read out six zeros
for (int i = 0; i < 6; i++)
CHECK(cba.put(1) == 0);
// The next puts need to read out six ones
for (int i = 0; i < 6; i++)
CHECK(cba.put(1) == 1);
cba.put(0);
// content now 111110
CHECK(cba.at(0) == 1);
CHECK(cba.at(1) == 1);
CHECK(cba.at(2) == 1);
CHECK(cba.at(3) == 1);
CHECK(cba.at(4) == 1);
CHECK(cba.at(5) == 0);
}
TEST_CASE("test symbol array") {
for (int i = 0; i < 6; i++)
csa.put(0);
// The next puts need to read out six zeros
for (int i = 0; i < 6; i++)
CHECK(csa.put(i) == 0);
// The next puts need to read out the values above
for (int i = 0; i < 6; i++)
CHECK(csa.put(1) == i);
csa.put(0);
csa.put(1);
csa.put(2);
csa.put(3);
csa.put(4);
csa.put(5);
// content now 012345
CHECK(csa.at(0) == 0);
CHECK(csa.at(1) == 1);
CHECK(csa.at(2) == 2);
CHECK(csa.at(3) == 3);
CHECK(csa.at(4) == 4);
CHECK(csa.at(5) == 5);
}
TEST_CASE("test leap second") {
struct wwvb_time ww = {
.yday = 366,
.year = 16,
.hour = 23,
.minute = 59,
.second = 59,
.ls = 1,
.ly = 1,
.dst = 0,
.dut1 = -4,
};
ww.advance_seconds();
CHECK(ww.second == 60);
CHECK(ww.ls);
CHECK(ww.dut1 == -4);
ww.advance_seconds();
CHECK(ww.second == 0);
CHECK(!ww.ls);
CHECK(ww.dut1 == 6);
}
TEST_CASE("test dst next day") {
struct wwvb_time ww = {
.yday = 73,
.year = 21,
.hour = 23,
.minute = 59,
.second = 59,
.ls = 1,
.ly = 1,
.dst = 2,
};
ww.advance_seconds();
CHECK(ww.second == 0);
CHECK(ww.dst == 3);
}
TEST_CASE("test std next day") {
struct wwvb_time ww = {
.yday = 311,
.year = 21,
.hour = 23,
.minute = 59,
.second = 59,
.ls = 1,
.ly = 1,
.dst = 1,
};
ww.advance_seconds();
CHECK(ww.second == 0);
CHECK(ww.minute == 0);
CHECK(ww.hour == 0);
CHECK(ww.dst == 0);
CHECK(ww.yday == 312);
CHECK(ww.year == 21);
}
TEST_CASE("test new year") {
struct wwvb_time ww = {
.yday = 365,
.year = 1,
.hour = 23,
.minute = 59,
.second = 59,
.ls = 0,
.ly = 0,
.dst = 0,
};
ww.advance_seconds();
CHECK(ww.second == 0);
CHECK(ww.minute == 0);
CHECK(ww.hour == 0);
CHECK(ww.year == 2);
CHECK(ww.yday == 1);
}
#endif