// // Created by erki on 12/09/23. // #include #include namespace { int callback_count = 0; void callbackByOne() { callback_count += 1; } void callbackByN(int to_add) { callback_count += to_add; } } TEST_CASE("Slot calls function properly with void args.", "[cpptick]") { cpptick::Scheduler scheduler; cpptick::Slot slot(&scheduler); auto* f = slot.connect(callbackByOne); callback_count = 0; REQUIRE(callback_count == 0); SECTION("invoke() calls the slot appropriately.") { slot.invoke(); CHECK(callback_count == 0); scheduler.tick(); CHECK(callback_count == 1); SECTION("Second tick doesn't invoke the slot again.") { scheduler.tick(); CHECK(callback_count == 1); } SECTION("Second invoke() will call the slot again.") { slot.invoke(); scheduler.tick(); CHECK(callback_count == 2); } } SECTION("Multiple calls queue properly.") { const int count = 3; for (int i = 0; i < count; i++) { slot.invoke(); } for (int i = 0; i < count; i++) { CHECK(callback_count == i); scheduler.tick(); CHECK(callback_count == i + 1); } } delete f; } TEST_CASE("Slot calls function properly with args.", "[cpptick]") { cpptick::Scheduler scheduler; cpptick::Slot slot(&scheduler); auto* f = slot.connect(callbackByN); callback_count = 0; REQUIRE(callback_count == 0); SECTION("invoke() passes argument appropriately.") { const int to_add = 5; slot.invoke(to_add); CHECK(callback_count == 0); scheduler.tick(); CHECK(callback_count == to_add); } delete f; }