Skip to content

Commit

Permalink
redux
Browse files Browse the repository at this point in the history
  • Loading branch information
t0mpr1c3 committed Sep 27, 2023
1 parent 9b9feef commit 2e584b9
Show file tree
Hide file tree
Showing 12 changed files with 224 additions and 65 deletions.
125 changes: 125 additions & 0 deletions init
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
test/test_encoders.cpp: encoders->init(Machine_t::Kh910);
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), 0x01);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::NoCarriage);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())] - 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_RIGHT_MINUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: ASSERT_FALSE(encoders->getMachineType() == Machine_t::Kh270);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::NoCarriage);
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MIN[static_cast<int8_t>(encoders->getMachineType())] - 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getHallActive(), Direction_t::Left);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Lace);
test/test_encoders.cpp: ASSERT_EQ(encoders->getBeltShift(), BeltShift::Regular);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->m_position = 0;
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: encoders->init(Machine_t::Kh270);
test/test_encoders.cpp: ASSERT_TRUE(encoders->getMachineType() == Machine_t::Kh270);
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getHallActive(), Direction_t::Left);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(Machine_t::Kh270)]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: ASSERT_EQ(encoders->getBeltShift(), BeltShift::Regular);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->init(Machine_t::Kh270);
test/test_encoders.cpp: ASSERT_TRUE(encoders->getMachineType() == Machine_t::Kh270);
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getHallActive(), Direction_t::Left);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(Machine_t::Kh270)] + MAGNET_DISTANCE_270);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: ASSERT_EQ(encoders->getBeltShift(), BeltShift::Regular);
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MIN[static_cast<int8_t>(encoders->getMachineType())] - 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Garter);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())] - 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: encoders->m_position = END_LEFT[static_cast<uint8_t>(encoders->getMachineType())] + 1;
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MIN[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getDirection(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getHallActive(), Direction_t::Right);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_RIGHT_MINUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::NoCarriage);
test/test_encoders.cpp: ASSERT_EQ(encoders->getBeltShift(), BeltShift::Shifted);
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_RIGHT_MINUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: uint16_t pos = END_RIGHT_MINUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())];
test/test_encoders.cpp: while (pos < END_RIGHT[static_cast<int8_t>(encoders->getMachineType())]) {
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), ++pos);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), pos);
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), pos);
test/test_encoders.cpp: .WillOnce(Return(FILTER_L_MAX[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), pos);
test/test_encoders.cpp: ASSERT_TRUE(encoders->getMachineType() == Machine_t::Kh910);
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MIN[static_cast<int8_t>(encoders->getMachineType())] - 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getCarriage(), Carriage_t::Knit);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())] + 1));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: .WillOnce(Return(FILTER_R_MAX[static_cast<int8_t>(encoders->getMachineType())]));
test/test_encoders.cpp: encoders->isr();
test/test_encoders.cpp: ASSERT_EQ(encoders->getPosition(), END_LEFT_PLUS_OFFSET[static_cast<int8_t>(encoders->getMachineType())]);
test/test_encoders.cpp: uint8_t p = encoders->getPosition();
test/test_encoders.cpp: BeltShift_t b = encoders->getBeltShift();
test/test_encoders.cpp: Direction_t d = encoders->getDirection();
test/test_encoders.cpp: Direction_t d = encoders->getHallActive();
test/test_encoders.cpp: Carriage_t c = encoders->getCarriage();
test/test_encoders.cpp: Machine_t m = encoders->getMachineType();
test/test_encoders.cpp: encoders->init(Machine_t::Kh270);
test/test_encoders.cpp: Machine_t m = encoders->getMachineType();
test/test_encoders.cpp: uint16_t v = encoders->getHallValue(Direction_t::NoDirection);
test/test_encoders.cpp: v = encoders->getHallValue(Direction_t::Left);
test/test_encoders.cpp: v = encoders->getHallValue(Direction_t::Right);
test/test_encoders.cpp: v = encoders->getHallValue(Direction_t::Right);
5 changes: 5 additions & 0 deletions src/ayab/global_OpInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,4 +48,9 @@ void GlobalOpInit::com(const uint8_t *buffer, size_t size) {

void GlobalOpInit::end() {
m_instance->end();

}

bool GlobalOpInit::isReady() {
return m_instance->isReady();
}
15 changes: 12 additions & 3 deletions src/ayab/opInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,16 @@ void OpInit::begin() {
* Assess whether the Finite State Machine is ready to move from state `OpInit` to `OpReady`.
*/
void OpInit::update() {
if (isReady()) {
GlobalController::setState(GlobalOpReady::m_instance);
}
}

/*!
* \brief Assess whether the Finite State Machine is ready to move from state `OpInit` to `OpReady`.
* \return `true` if ready to move from state `OpInit` to `OpReady`, false otherwise.
*/
bool OpInit::isReady() {
#ifdef DBG_NOMACHINE
// TODO(who?): check if debounce is needed
bool state = digitalRead(DBG_BTN_PIN);
Expand Down Expand Up @@ -97,15 +107,14 @@ void OpInit::update() {
GlobalSolenoids::setSolenoids(SOLENOIDS_BITMASK);
GlobalCom::send_indState(Err_t::Success);
// move to `OpReady`
GlobalController::setState(GlobalOpReady::m_instance);
return;
return true;
}

#ifdef DBG_NOMACHINE
m_prevState = state;
#endif
// stay in `OpInit`
return;
return false;
}

/*!
Expand Down
6 changes: 6 additions & 0 deletions src/ayab/opInit.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@
class OpInitInterface : public OpInterface {
public:
virtual ~OpInitInterface() = default;

virtual bool isReady() = 0;
};

// Container class for the static methods that implement the hardware test
Expand All @@ -51,6 +53,8 @@ class GlobalOpInit final {
static void update();
static void com(const uint8_t *buffer, size_t size);
static void end();

static bool isReady();
};

class OpInit : public OpInitInterface {
Expand All @@ -62,6 +66,8 @@ class OpInit : public OpInitInterface {
void com(const uint8_t *buffer, size_t size) final;
void end() final;

bool isReady() final;

private:
Direction_t m_lastHall;
#ifdef DBG_NOMACHINE
Expand Down
5 changes: 5 additions & 0 deletions test/mocks/opInit_mock.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,8 @@ void OpInit::end() {
assert(gOpInitMock != nullptr);
gOpInitMock->end();
}

bool OpInit::isReady() {
assert(gOpInitMock != nullptr);
return gOpInitMock->isReady();
}
1 change: 1 addition & 0 deletions test/mocks/opInit_mock.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ class OpInitMock : public OpInitInterface {
MOCK_METHOD0(update, void());
MOCK_METHOD2(com, void(const uint8_t *buffer, size_t size));
MOCK_METHOD0(end, void());
MOCK_METHOD0(isReady, bool());
};

OpInitMock *OpInitMockInstance();
Expand Down
7 changes: 6 additions & 1 deletion test/test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,12 @@ GCOVR_ARGS="--exclude-unreachable-branches \
-e src/ayab/global_OpTest.cpp \
-e src/ayab/global_OpReady.cpp \
-e src/ayab/global_OpError.cpp \
-e src/ayab/global_OpKnit.cpp"
-e src/ayab/global_OpKnit.cpp \
-e src/ayab/global_beeper.cpp \
-e src/ayab/global_com.cpp \
-e src/ayab/global_controller.cpp \
-e src/ayab/global_encoders.cpp \
-e src/ayab/global_solenoids.cpp"

if [[ $sonar -eq 1 ]]; then
gcovr -r . $GCOVR_ARGS --sonarqube ./test/build/coverage.xml
Expand Down
29 changes: 21 additions & 8 deletions test/test_OpInit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,14 @@ class OpInitTest : public ::testing::Test {
EXPECT_CALL(*controllerMock, getDirection).WillRepeatedly(Return(dir));
EXPECT_CALL(*controllerMock, getHallActive).WillRepeatedly(Return(hall));
EXPECT_CALL(*controllerMock, getMachineType).WillRepeatedly(Return(Machine_t::Kh910));
EXPECT_CALL(*controllerMock, getState).WillRepeatedly(Return(opInit));
}

void expect_ready(bool ready) {
EXPECT_CALL(*controllerMock, setState).Times(ready ? 1 : 0);
if (ready) {
EXPECT_CALL(*controllerMock, getState).WillOnce(Return(opInit));
}
ASSERT_EQ(opInit->isReady(), ready);
}
};

Expand Down Expand Up @@ -116,11 +120,26 @@ TEST_F(OpInitTest, test_begin910) {
opInit->begin();
}

TEST_F(OpInitTest, test_updateF) {
// isReady() == false
expect_update(get_position_past_right(Machine_t::Kh910), Direction_t::Left, Direction_t::Left);
EXPECT_CALL(*controllerMock, getState).WillOnce(Return(opInit));
EXPECT_CALL(*controllerMock, setState(opReady)).Times(0);
opInit->update();
}

TEST_F(OpInitTest, test_updateT) {
// isReady() == true
expect_update(get_position_past_left(Machine_t::Kh910), Direction_t::Right, Direction_t::Left);
EXPECT_CALL(*controllerMock, getState).WillOnce(Return(opInit));
EXPECT_CALL(*controllerMock, setState(opReady));
opInit->update();
}

TEST_F(OpInitTest, test_op_init_RLL) {
// not ready
expect_update(get_position_past_right(Machine_t::Kh910), Direction_t::Left, Direction_t::Left);
expect_ready(false);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -130,7 +149,6 @@ TEST_F(OpInitTest, test_op_init_LRR) {
// not ready
expect_update(get_position_past_left(Machine_t::Kh910), Direction_t::Right, Direction_t::Right);
expect_ready(false);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -141,7 +159,6 @@ TEST_F(OpInitTest, test_op_init_LRL) {
// is passed in Right direction inside active needles.
expect_update(get_position_past_left(Machine_t::Kh910), Direction_t::Right, Direction_t::Left);
expect_ready(true);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -152,7 +169,6 @@ TEST_F(OpInitTest, test_op_init_XRL) {
// is passed in Right direction inside active needles.
expect_update(get_position_past_left(Machine_t::Kh910) - 2, Direction_t::Right, Direction_t::Left);
expect_ready(false);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -163,7 +179,6 @@ TEST_F(OpInitTest, test_op_init_XLR) {
// when the right Hall sensor is passed in the Left direction.
expect_update(get_position_past_right(Machine_t::Kh910) + 2, Direction_t::Left, Direction_t::Right);
expect_ready(false);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -174,7 +189,6 @@ TEST_F(OpInitTest, test_op_init_RLR) {
// when the right Hall sensor is passed in the Left direction.
expect_update(get_position_past_right(Machine_t::Kh910), Direction_t::Left, Direction_t::Right);
expect_ready(true);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand All @@ -184,7 +198,6 @@ TEST_F(OpInitTest, test_op_init_RLN) {
// not ready
expect_update(get_position_past_right(Machine_t::Kh910), Direction_t::Left, Direction_t::NoDirection);
expect_ready(false);
opInit->update();

// test expectations without destroying instance
ASSERT_TRUE(Mock::VerifyAndClear(controllerMock));
Expand Down
Loading

0 comments on commit 2e584b9

Please sign in to comment.