Browse Source

Fix allDepleted(). Add tests.

Marek Bel 5 years ago
parent
commit
360a977520
3 changed files with 149 additions and 1 deletions
  1. 2 0
      CMakeLists.txt
  2. 1 1
      Firmware/AutoDeplete.cpp
  3. 146 0
      Tests/AutoDeplete_test.cpp

+ 2 - 0
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)

+ 1 - 1
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?

+ 146 - 0
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);
+
+}