Tactility/Tests/TactilityCore/DispatcherTest.cpp
2024-12-06 23:16:29 +01:00

56 lines
1.5 KiB
C++

#include "doctest.h"
#include "TactilityCore.h"
#include "Dispatcher.h"
using namespace tt;
static uint32_t counter = 0;
static const uint32_t value_chacker_expected = 123;
void increment_callback(TT_UNUSED std::shared_ptr<void> context) {
counter++;
}
void value_checker(std::shared_ptr<void> context) {
auto value = std::static_pointer_cast<uint32_t>(context);
if (*value != value_chacker_expected) {
tt_crash_implementation();
}
}
TEST_CASE("dispatcher should not call callback if consume isn't called") {
counter = 0;
Dispatcher dispatcher;
auto context = std::make_shared<uint32_t>();
dispatcher.dispatch(&increment_callback, std::move(context));
delay_ticks(10);
CHECK_EQ(counter, 0);
}
TEST_CASE("dispatcher should be able to dealloc when message is not consumed") {
auto* dispatcher = new Dispatcher();
auto context = std::make_shared<uint32_t>();
dispatcher->dispatch(increment_callback, std::move(context));
delete dispatcher;
}
TEST_CASE("dispatcher should call callback when consume is called") {
counter = 0;
Dispatcher dispatcher;
auto context = std::make_shared<uint32_t>();
dispatcher.dispatch(increment_callback, std::move(context));
dispatcher.consume(100);
CHECK_EQ(counter, 1);
}
TEST_CASE("message should be passed on correctly") {
Dispatcher dispatcher;
auto context = std::make_shared<uint32_t>(value_chacker_expected);
dispatcher.dispatch(value_checker, std::move(context));
dispatcher.consume(100);
}