/ tests.cpp
tests.cpp
1 // SPDX-FileCopyrightText: 2021 Jeff Epler 2 // 3 // SPDX-License-Identifier: GPL-3.0-only 4 5 #ifndef ARDUINO 6 7 #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN 8 #include <doctest/doctest.h> 9 10 #include "decoder.h" 11 12 circular_bit_array<6> cba; 13 circular_symbol_array<6, 4> csa; 14 15 TEST_CASE("test bit array") { 16 for (int i = 0; i < 6; i++) 17 cba.put(0); 18 19 // The next puts need to read out six zeros 20 for (int i = 0; i < 6; i++) 21 CHECK(cba.put(1) == 0); 22 23 // The next puts need to read out six ones 24 for (int i = 0; i < 6; i++) 25 CHECK(cba.put(1) == 1); 26 27 cba.put(0); 28 // content now 111110 29 30 CHECK(cba.at(0) == 1); 31 CHECK(cba.at(1) == 1); 32 CHECK(cba.at(2) == 1); 33 CHECK(cba.at(3) == 1); 34 CHECK(cba.at(4) == 1); 35 CHECK(cba.at(5) == 0); 36 } 37 38 TEST_CASE("test symbol array") { 39 for (int i = 0; i < 6; i++) 40 csa.put(0); 41 42 // The next puts need to read out six zeros 43 for (int i = 0; i < 6; i++) 44 CHECK(csa.put(i) == 0); 45 46 // The next puts need to read out the values above 47 for (int i = 0; i < 6; i++) 48 CHECK(csa.put(1) == i); 49 50 csa.put(0); 51 csa.put(1); 52 csa.put(2); 53 csa.put(3); 54 csa.put(4); 55 csa.put(5); 56 // content now 012345 57 58 CHECK(csa.at(0) == 0); 59 CHECK(csa.at(1) == 1); 60 CHECK(csa.at(2) == 2); 61 CHECK(csa.at(3) == 3); 62 CHECK(csa.at(4) == 4); 63 CHECK(csa.at(5) == 5); 64 } 65 66 TEST_CASE("test leap second") { 67 struct wwvb_time ww = { 68 .yday = 366, 69 .year = 16, 70 .hour = 23, 71 .minute = 59, 72 .second = 59, 73 .ls = 1, 74 .ly = 1, 75 .dst = 0, 76 .dut1 = -4, 77 }; 78 79 ww.advance_seconds(); 80 CHECK(ww.second == 60); 81 CHECK(ww.ls); 82 CHECK(ww.dut1 == -4); 83 84 ww.advance_seconds(); 85 CHECK(ww.second == 0); 86 CHECK(!ww.ls); 87 CHECK(ww.dut1 == 6); 88 } 89 90 TEST_CASE("test dst next day") { 91 struct wwvb_time ww = { 92 .yday = 73, 93 .year = 21, 94 .hour = 23, 95 .minute = 59, 96 .second = 59, 97 .ls = 1, 98 .ly = 1, 99 .dst = 2, 100 }; 101 102 ww.advance_seconds(); 103 CHECK(ww.second == 0); 104 CHECK(ww.dst == 3); 105 } 106 107 TEST_CASE("test std next day") { 108 struct wwvb_time ww = { 109 .yday = 311, 110 .year = 21, 111 .hour = 23, 112 .minute = 59, 113 .second = 59, 114 .ls = 1, 115 .ly = 1, 116 .dst = 1, 117 }; 118 119 ww.advance_seconds(); 120 CHECK(ww.second == 0); 121 CHECK(ww.minute == 0); 122 CHECK(ww.hour == 0); 123 CHECK(ww.dst == 0); 124 CHECK(ww.yday == 312); 125 CHECK(ww.year == 21); 126 } 127 128 TEST_CASE("test new year") { 129 struct wwvb_time ww = { 130 .yday = 365, 131 .year = 1, 132 .hour = 23, 133 .minute = 59, 134 .second = 59, 135 .ls = 0, 136 .ly = 0, 137 .dst = 0, 138 }; 139 ww.advance_seconds(); 140 CHECK(ww.second == 0); 141 CHECK(ww.minute == 0); 142 CHECK(ww.hour == 0); 143 CHECK(ww.year == 2); 144 CHECK(ww.yday == 1); 145 } 146 #endif