Files
cariflex/tools/EVerest-main/lib/everest/fsm/tests/state_allocator.cpp
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

63 lines
2.5 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright 2023 - 2023 Pionix GmbH and Contributors to EVerest
#include <catch2/catch_test_macros.hpp>
#include <fsm/_impl/state_allocator.hpp>
#include <fsm/buffer.hpp>
SCENARIO("Testing buffer allocator") {
GIVEN("A state allocator with a defined swap buffer") {
using BufferType = fsm::buffer::SwapBuffer<64, 64, 3>;
using StateAllocatorType = fsm::_impl::StateAllocator<BufferType>;
BufferType buffer;
REQUIRE(buffer.MAX_SIMPLE_STATE_SIZE == 64);
StateAllocatorType state_allocator{buffer};
WHEN("The state_allocator is vanilla") {
THEN("It shouldn not have any staged states") {
REQUIRE(state_allocator.has_staged_states() == false);
auto simple_object = state_allocator.pull_simple_state<double>();
REQUIRE(simple_object == nullptr);
auto compound_object = state_allocator.pull_compound_state<int>();
REQUIRE(compound_object == nullptr);
}
}
WHEN("Made ready for allocation and added a simple and compound object") {
state_allocator.make_ready_for_nesting_level(0);
const int SOME_INT_CONST = 42;
const double SOME_DOUBLE_CONST = 3.14;
auto compound_allocation_result = state_allocator.create_compound<int>(SOME_INT_CONST);
auto simple_allocation_result = state_allocator.create_simple<double>(SOME_DOUBLE_CONST);
REQUIRE(compound_allocation_result == true);
REQUIRE(simple_allocation_result == true);
THEN("The allocator should have staged states") {
REQUIRE(state_allocator.has_staged_states() == true);
}
THEN("The created objects should yield the correct values") {
auto simple_object = state_allocator.pull_simple_state<double>();
REQUIRE(state_allocator.has_staged_states() == true);
auto compound_object = state_allocator.pull_compound_state<int>();
REQUIRE(state_allocator.has_staged_states() == false);
REQUIRE(*simple_object == SOME_DOUBLE_CONST);
REQUIRE(*compound_object == SOME_INT_CONST);
}
THEN("Creating a simple object again should fail") {
simple_allocation_result = state_allocator.create_simple<double>(SOME_DOUBLE_CONST);
REQUIRE(simple_allocation_result == false);
}
}
}
}