diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b0798404..c0c2aacd0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,9 @@ set(TEST_SOURCES Tests/tests.cpp Tests/Example_test.cpp Tests/Timer_test.cpp + Tests/AutoDeplete_test.cpp Firmware/Timer.cpp + Firmware/AutoDeplete.cpp ) add_executable(tests ${TEST_SOURCES}) target_include_directories(tests PRIVATE Tests) diff --git a/Firmware/AutoDeplete.cpp b/Firmware/AutoDeplete.cpp index bfc090129..e6323dd96 100644 --- a/Firmware/AutoDeplete.cpp +++ b/Firmware/AutoDeplete.cpp @@ -14,7 +14,7 @@ static const uint8_t filamentCount = 5; static constexpr uint8_t allDepleted(uint8_t fCount) { - return fCount == 1 ? 1 : ((1 << (fCount - 1)) | allDepleted(fCount - 2)); + return fCount == 1 ? 1 : ((1 << (fCount - 1)) | allDepleted(fCount - 1)); } //! @brief Is filament available for printing? diff --git a/Tests/AutoDeplete_test.cpp b/Tests/AutoDeplete_test.cpp new file mode 100644 index 000000000..fb2964bc0 --- /dev/null +++ b/Tests/AutoDeplete_test.cpp @@ -0,0 +1,146 @@ +/** + * @file + * @author Marek Bel + */ + +#include "catch.hpp" + +#include "../Firmware/AutoDeplete.h" + +TEST_CASE( "AutoDeplete test.", "[AutoDeplete]" ) +{ + CHECK(ad_allDepleted() == false); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 1); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + + ad_markDepleted(1); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markDepleted(3); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 4); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markDepleted(4); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 0); + CHECK(ad_getAlternative(4) == 0); + CHECK(ad_allDepleted() == false); + + ad_markDepleted(4); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 0); + CHECK(ad_getAlternative(4) == 0); + CHECK(ad_allDepleted() == false); + + ad_markDepleted(0); + + CHECK(ad_getAlternative(0) == 2); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 2); + CHECK(ad_getAlternative(4) == 2); + CHECK(ad_allDepleted() == false); + + ad_markDepleted(2); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 1); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == true); + + ad_markDepleted(2); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 1); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == true); + + ad_markLoaded(4); + + CHECK(ad_getAlternative(0) == 4); + CHECK(ad_getAlternative(1) == 4); + CHECK(ad_getAlternative(2) == 4); + CHECK(ad_getAlternative(3) == 4); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(0); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 4); + CHECK(ad_getAlternative(2) == 4); + CHECK(ad_getAlternative(3) == 4); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(3); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 3); + CHECK(ad_getAlternative(2) == 3); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(3); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 3); + CHECK(ad_getAlternative(2) == 3); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(2); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 2); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(1); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 1); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + + ad_markLoaded(1); + + CHECK(ad_getAlternative(0) == 0); + CHECK(ad_getAlternative(1) == 1); + CHECK(ad_getAlternative(2) == 2); + CHECK(ad_getAlternative(3) == 3); + CHECK(ad_getAlternative(4) == 4); + CHECK(ad_allDepleted() == false); + +}