Fix allDepleted(). Add tests.

This commit is contained in:
Marek Bel 2019-01-04 19:34:42 +01:00
parent a309ec1b0b
commit 360a977520
3 changed files with 149 additions and 1 deletions

View file

@ -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)

View file

@ -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?

146
Tests/AutoDeplete_test.cpp Normal file
View file

@ -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);
}