More tests converted to fuc2.
This commit is contained in:
parent
b8b42d5681
commit
903cf00661
10 changed files with 671 additions and 556 deletions
119
tests/fsm.cpp
119
tests/fsm.cpp
|
|
@ -1,67 +1,78 @@
|
|||
#include <catch2/catch_test_macros.hpp>
|
||||
#include <fuc2/testing.hpp>
|
||||
#include <fmt/core.h>
|
||||
#include <string>
|
||||
#include "algos/simplefsm.hpp"
|
||||
|
||||
using namespace fmt;
|
||||
using std::string;
|
||||
using namespace fuc2;
|
||||
|
||||
enum class MyState {
|
||||
START, RUNNING, END
|
||||
};
|
||||
namespace fsm_tests {
|
||||
enum class MyState {
|
||||
START, RUNNING, END
|
||||
};
|
||||
|
||||
enum class MyEvent {
|
||||
STARTED, PUSH, QUIT
|
||||
};
|
||||
enum class MyEvent {
|
||||
STARTED, PUSH, QUIT
|
||||
};
|
||||
|
||||
class MyFSM : public DeadSimpleFSM<MyState, MyEvent> {
|
||||
public:
|
||||
void event(MyEvent ev, string data="") {
|
||||
switch($state) {
|
||||
FSM_STATE(MyState, START, ev);
|
||||
FSM_STATE(MyState, RUNNING, ev, data);
|
||||
FSM_STATE(MyState, END, ev);
|
||||
}
|
||||
class MyFSM : public DeadSimpleFSM<MyState, MyEvent> {
|
||||
public:
|
||||
void event(MyEvent ev, string data="") {
|
||||
switch($state) {
|
||||
FSM_STATE(MyState, START, ev);
|
||||
FSM_STATE(MyState, RUNNING, ev, data);
|
||||
FSM_STATE(MyState, END, ev);
|
||||
}
|
||||
}
|
||||
|
||||
void START(MyEvent ev) {
|
||||
println("<<< START {}", (int)ev);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
|
||||
void RUNNING(MyEvent ev, string &data) {
|
||||
if(ev == MyEvent::QUIT) {
|
||||
println("<<< QUITTING {}", data);
|
||||
state(MyState::END);
|
||||
} else {
|
||||
println("<<< RUN: {}", data);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
}
|
||||
|
||||
void END(MyEvent ev) {
|
||||
println("<<< STOP {}", (int)ev);
|
||||
state(MyState::END);
|
||||
}
|
||||
};
|
||||
|
||||
void test_confirm_fsm_works_with_optional_data() {
|
||||
MyFSM fsm;
|
||||
|
||||
CHECK(fsm.in_state(MyState::START));
|
||||
|
||||
fsm.event(MyEvent::STARTED);
|
||||
CHECK(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
CHECK(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
CHECK(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
CHECK(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::QUIT, "DONE!");
|
||||
CHECK(fsm.in_state(MyState::END));
|
||||
}
|
||||
|
||||
void START(MyEvent ev) {
|
||||
println("<<< START {}", (int)ev);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
|
||||
void RUNNING(MyEvent ev, string &data) {
|
||||
if(ev == MyEvent::QUIT) {
|
||||
println("<<< QUITTING {}", data);
|
||||
state(MyState::END);
|
||||
} else {
|
||||
println("<<< RUN: {}", data);
|
||||
state(MyState::RUNNING);
|
||||
}
|
||||
}
|
||||
|
||||
void END(MyEvent ev) {
|
||||
println("<<< STOP {}", (int)ev);
|
||||
state(MyState::END);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CASE("confirm fsm works with optional data", "[utils]") {
|
||||
MyFSM fsm;
|
||||
|
||||
REQUIRE(fsm.in_state(MyState::START));
|
||||
|
||||
fsm.event(MyEvent::STARTED);
|
||||
REQUIRE(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
REQUIRE(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
REQUIRE(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::PUSH);
|
||||
REQUIRE(fsm.in_state(MyState::RUNNING));
|
||||
|
||||
fsm.event(MyEvent::QUIT, "DONE!");
|
||||
REQUIRE(fsm.in_state(MyState::END));
|
||||
fuc2::Set TESTS{
|
||||
.name="fsm",
|
||||
.tests={
|
||||
TEST(test_confirm_fsm_works_with_optional_data),
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue