From a2580b819c17fe2a65ffc2be1e2bc28d7b5470ec Mon Sep 17 00:00:00 2001 From: Benoit Germain Date: Wed, 12 Mar 2025 09:11:42 +0100 Subject: Unit tests for lanes.sleep --- unit_tests/lane_tests.cpp | 65 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'unit_tests') diff --git a/unit_tests/lane_tests.cpp b/unit_tests/lane_tests.cpp index 0f66251..196b31d 100644 --- a/unit_tests/lane_tests.cpp +++ b/unit_tests/lane_tests.cpp @@ -3,6 +3,7 @@ // ################################################################################################# // ################################################################################################# + TEST_CASE("lanes.nameof") { LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; @@ -32,6 +33,70 @@ TEST_CASE("lanes.nameof") // ################################################################################################# // ################################################################################################# +TEST_CASE("lanes.sleep.argument validation") +{ + LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; + S.requireSuccess("lanes = require 'lanes'.configure()"); + + // anything not a number is no good + S.requireFailure("lanes.sleep(true)"); + S.requireFailure("lanes.sleep({})"); + S.requireFailure("lanes.sleep('a string')"); + S.requireFailure("lanes.sleep(lanes.null)"); + S.requireFailure("lanes.sleep(print)"); + + // negative durations are not supported + S.requireFailure("lanes.sleep(-1)"); + + // no duration is supported (same as 0) + S.requireSuccess("lanes.sleep()"); + S.requireSuccess("lanes.sleep(0)"); +} + +// ################################################################################################# + +TEST_CASE("lanes.sleep.check durations") +{ + LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; + S.requireSuccess("lanes = require 'lanes'.configure()"); + + // requesting to sleep some duration should result in sleeping for that duration + auto const _before{ std::chrono::steady_clock::now() }; + S.requireSuccess("lanes.sleep(1)"); + CHECK(std::chrono::steady_clock::now() - _before >= 1000ms); + CHECK(std::chrono::steady_clock::now() - _before < 1100ms); +} + + +// ################################################################################################# + +TEST_CASE("lanes.sleep.interactions with timers") +{ + LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; + S.requireSuccess("lanes = require 'lanes'.configure{with_timers = true}"); + + std::string_view const _script{ + // start a 10Hz timer + " local l = lanes.linda()" + " lanes.timer(l, 'gluh', 0.1, 0.1)" + // launch a lane that is supposed to sleep forever + " local g = lanes.gen('*', lanes.sleep)" + " local h = g('indefinitely')" + // sleep 1 second (this uses the timer linda) + " lanes.sleep(1)" + // shutdown should be able to cancel the lane and stop it instantly + " return 'SUCCESS'" + }; + // running the script should take about 1 second + auto const _before{ std::chrono::steady_clock::now() }; + S.requireReturnedString(_script, "SUCCESS"); + CHECK(std::chrono::steady_clock::now() - _before >= 1000ms); + CHECK(std::chrono::steady_clock::now() - _before < 1100ms); +} + +// ################################################################################################# +// ################################################################################################# + TEST_CASE("lanes.gen") { LuaState S{ LuaState::WithBaseLibs{ true }, LuaState::WithFixture{ false } }; -- cgit v1.2.3-55-g6feb