diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index bc84dc21a..479b34e62 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -36,6 +36,7 @@ set(SYSTEM_SRC System/Err.test.cpp System/FileInputStream.test.cpp System/MemoryInputStream.test.cpp + System/Sleep.test.cpp System/String.test.cpp System/Time.test.cpp System/Vector2.test.cpp diff --git a/test/System/Sleep.test.cpp b/test/System/Sleep.test.cpp new file mode 100644 index 000000000..271c3fea2 --- /dev/null +++ b/test/System/Sleep.test.cpp @@ -0,0 +1,40 @@ +#include + +// Other 1st party headers +#include + +#include + +#include + +using namespace std::chrono_literals; + +// Specialize StringMaker for std::chrono::duration specializations +// https://github.com/doctest/doctest/blob/master/doc/markdown/stringification.md#docteststringmakert-specialisation +namespace doctest +{ +template +struct StringMaker> +{ + static String convert(const std::chrono::duration& duration) + { + return toString(std::chrono::nanoseconds(duration).count()) + "ns"; + } +}; +} // namespace doctest + +#define CHECK_SLEEP_DURATION(duration) \ + do \ + { \ + const auto startTime = std::chrono::steady_clock::now(); \ + sf::sleep((duration)); \ + const auto elapsed = std::chrono::steady_clock::now() - startTime; \ + CHECK(elapsed >= (duration)); \ + } while (false) + +TEST_CASE("[System] sf::sleep") +{ + CHECK_SLEEP_DURATION(1ms); + CHECK_SLEEP_DURATION(10ms); + CHECK_SLEEP_DURATION(100ms); +}