Verify and fix Tool Change state machine + unit tests
parent
e2ec745286
commit
75fe7b20b5
|
|
@ -27,23 +27,63 @@ namespace mb = modules::buttons;
|
||||||
namespace mg = modules::globals;
|
namespace mg = modules::globals;
|
||||||
namespace ms = modules::selector;
|
namespace ms = modules::selector;
|
||||||
|
|
||||||
TEST_CASE("tool_change::test0", "[tool_change]") {
|
void ToolChange(uint8_t fromSlot, uint8_t toSlot) {
|
||||||
using namespace logic;
|
|
||||||
|
|
||||||
ForceReinitAllAutomata();
|
ForceReinitAllAutomata();
|
||||||
|
|
||||||
ToolChange tc;
|
logic::ToolChange tc;
|
||||||
|
|
||||||
|
EnsureActiveSlotIndex(fromSlot);
|
||||||
|
|
||||||
// restart the automaton
|
// restart the automaton
|
||||||
tc.Reset(0);
|
tc.Reset(toSlot);
|
||||||
|
|
||||||
main_loop();
|
REQUIRE(WhileCondition(
|
||||||
|
tc,
|
||||||
|
[&](int step) -> bool {
|
||||||
|
if(step == 2000){ // on 2000th step make FINDA trigger
|
||||||
|
hal::adc::SetADC(1, 0);
|
||||||
|
}
|
||||||
|
return tc.TopLevelState() == ProgressCode::UnloadingFilament; },
|
||||||
|
50000));
|
||||||
|
REQUIRE(mg::globals.FilamentLoaded() == false);
|
||||||
|
|
||||||
REQUIRE(WhileTopState(tc, ProgressCode::UnloadingFilament, 5000));
|
REQUIRE(WhileCondition(
|
||||||
REQUIRE(modules::globals::globals.FilamentLoaded() == false);
|
tc,
|
||||||
|
[&](int step) -> bool {
|
||||||
REQUIRE(tc.TopLevelState() == ProgressCode::LoadingFilament);
|
if(step == 1000){ // on 1000th step make FINDA trigger
|
||||||
REQUIRE(WhileTopState(tc, ProgressCode::LoadingFilament, 5000));
|
hal::adc::SetADC(1, 900);
|
||||||
|
}
|
||||||
|
return tc.TopLevelState() == ProgressCode::LoadingFilament; },
|
||||||
|
50000));
|
||||||
|
|
||||||
REQUIRE(tc.TopLevelState() == ProgressCode::OK);
|
REQUIRE(tc.TopLevelState() == ProgressCode::OK);
|
||||||
REQUIRE(modules::globals::globals.FilamentLoaded() == true);
|
REQUIRE(mg::globals.FilamentLoaded() == true);
|
||||||
|
REQUIRE(mg::globals.ActiveSlot() == toSlot);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NoToolChange(uint8_t fromSlot, uint8_t toSlot) {
|
||||||
|
ForceReinitAllAutomata();
|
||||||
|
|
||||||
|
logic::ToolChange tc;
|
||||||
|
|
||||||
|
EnsureActiveSlotIndex(fromSlot);
|
||||||
|
|
||||||
|
// restart the automaton
|
||||||
|
tc.Reset(toSlot);
|
||||||
|
|
||||||
|
// should not do anything
|
||||||
|
REQUIRE(tc.TopLevelState() == ProgressCode::OK);
|
||||||
|
REQUIRE(tc.Error() == ErrorCode::OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("tool_change::test0", "[tool_change]") {
|
||||||
|
for (uint8_t fromSlot = 0; fromSlot < 5; ++fromSlot) {
|
||||||
|
for (uint8_t toSlot = 0; toSlot < 5; ++toSlot) {
|
||||||
|
if (fromSlot != toSlot) {
|
||||||
|
ToolChange(fromSlot, toSlot);
|
||||||
|
} else {
|
||||||
|
NoToolChange(fromSlot, toSlot);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue