From d4eab5875e79f3abb9721515fc0f3727a66bd667 Mon Sep 17 00:00:00 2001 From: maksimdrachov <39975120+maksimdrachov@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:24:25 +0200 Subject: [PATCH] Rename to olga_scheduler (#10) ## Summary by CodeRabbit - **New Features** - Project name updated from "olg_scheduler" to "olga_scheduler" across the application. - Test executables and associated files renamed accordingly. - **Documentation** - Updated project references in the README to reflect the new name. - Added an image of "Olga of Kiev" in the README. - **Bug Fixes** - Ensured consistent namespace usage throughout the codebase, maintaining functionality. --- CMakeLists.txt | 14 ++++++------ README.md | 14 +++++++----- .../St_Olga_by_Nesterov_in_1892_(cropped).jpg | Bin 0 -> 40480 bytes .../olga_scheduler.hpp} | 6 +++--- ..._scheduler.cpp => test_olga_scheduler.cpp} | 20 +++++++++--------- 5 files changed, 29 insertions(+), 25 deletions(-) create mode 100644 docs/St_Olga_by_Nesterov_in_1892_(cropped).jpg rename include/{olg_scheduler/olg_scheduler.hpp => olga_scheduler/olga_scheduler.hpp} (99%) rename tests/{test_olg_scheduler.cpp => test_olga_scheduler.cpp} (97%) diff --git a/CMakeLists.txt b/CMakeLists.txt index ee28e20..5691a65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ # Copyright (c) 2024 Zubax Robotics cmake_minimum_required(VERSION 3.12) -project(olg_scheduler_tests C CXX) +project(olga_scheduler_tests C CXX) enable_testing() set(CTEST_OUTPUT_ON_FAILURE ON) @@ -47,14 +47,14 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wsign-conversion -Wcast-align -Wmissing set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wtype-limits -Wnon-virtual-dtor -Woverloaded-virtual") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") -add_executable(test_olg_scheduler_cpp20 ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_olg_scheduler.cpp) -set_target_properties(test_olg_scheduler_cpp20 PROPERTIES CXX_STANDARD 20) -target_include_directories(test_olg_scheduler_cpp20 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/olg_scheduler) -target_include_directories(test_olg_scheduler_cpp20 SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib/cavl) -target_link_libraries(test_olg_scheduler_cpp20 +add_executable(test_olga_scheduler_cpp20 ${CMAKE_CURRENT_SOURCE_DIR}/tests/test_olga_scheduler.cpp) +set_target_properties(test_olga_scheduler_cpp20 PROPERTIES CXX_STANDARD 20) +target_include_directories(test_olga_scheduler_cpp20 PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include/olga_scheduler) +target_include_directories(test_olga_scheduler_cpp20 SYSTEM PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/lib/cavl) +target_link_libraries(test_olga_scheduler_cpp20 PRIVATE GTest::gmock_main ) include(GoogleTest) -gtest_discover_tests(test_olg_scheduler_cpp20) +gtest_discover_tests(test_olga_scheduler_cpp20) diff --git a/README.md b/README.md index 71f5be6..eb4881e 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,10 @@ -# olg_scheduler +# olga_scheduler -[![Main Workflow](https://github.com/zubax/olg_scheduler/actions/workflows/main.yml/badge.svg)](https://github.com/zubax/olg_scheduler/actions/workflows/main.yml) +[![Main Workflow](https://github.com/zubax/olga_scheduler/actions/workflows/main.yml/badge.svg)](https://github.com/zubax/olga_scheduler/actions/workflows/main.yml) Generic single-file implementation of scheduler suitable for deeply embedded systems. -"OLG" happens to be an abbreviation of [Okay Let's Go](https://www.youtube.com/watch?v=Jo6fKboqfMs) -and also a reference to the fact that it has a logarithmic asymptotic complexity. -**Simply copy `olg_scheduler.hpp` into your project tree and you are ready to roll.** +"OLGa" is a reference to the fact that it has a logarithmic asymptotic complexity. +**Simply copy `olga_scheduler.hpp` into your project tree and you are ready to roll.** The only dependency is the CAVL (`cavl.hpp`) header-only library (>= [v3.1.0](https://github.com/pavel-kirienko/cavl/tree/3.1.0)). @@ -14,3 +13,8 @@ The code is fully covered by manual tests with full state space exploration. For development-related instructions please refer to the CI configuration files. To release a new version, simply create a new tag. + + +

+ Olga of Kiev +

\ No newline at end of file diff --git a/docs/St_Olga_by_Nesterov_in_1892_(cropped).jpg b/docs/St_Olga_by_Nesterov_in_1892_(cropped).jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f5c82002031fc560c9dd1b34a48fe6ffbcbca93 GIT binary patch literal 40480 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 /// @@ -26,7 +26,7 @@ #include #include -namespace olg_scheduler +namespace olga_scheduler { template @@ -362,4 +362,4 @@ class EventLoop final }; // EventLoop -} // namespace olg_scheduler +} // namespace olga_scheduler diff --git a/tests/test_olg_scheduler.cpp b/tests/test_olga_scheduler.cpp similarity index 97% rename from tests/test_olg_scheduler.cpp rename to tests/test_olga_scheduler.cpp index 9959c89..d15925f 100644 --- a/tests/test_olg_scheduler.cpp +++ b/tests/test_olga_scheduler.cpp @@ -1,4 +1,4 @@ -/// Source: https://github.com/zubax/olg_scheduler +/// Source: https://github.com/zubax/olga_scheduler /// /// Copyright (c) 2024 Zubax Robotics /// @@ -15,7 +15,7 @@ /// OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR /// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -#include "olg_scheduler.hpp" +#include "olga_scheduler.hpp" #include #include @@ -75,10 +75,10 @@ class SteadyClockMock final } // namespace -namespace olg_scheduler::verification +namespace olga_scheduler::verification { -TEST(TestOlgScheduler, EventLoopBasic) +TEST(TestOlgaScheduler, EventLoopBasic) { using std::chrono_literals::operator""ms; @@ -227,7 +227,7 @@ TEST(TestOlgScheduler, EventLoopBasic) EXPECT_FALSE(d); } -TEST(TestOlgScheduler, EventLoopTotalOrdering) +TEST(TestOlgaScheduler, EventLoopTotalOrdering) { using std::chrono_literals::operator""ms; @@ -258,7 +258,7 @@ TEST(TestOlgScheduler, EventLoopTotalOrdering) EXPECT_THAT(c, 5); } -TEST(TestOlgScheduler, EventLoopPoll) +TEST(TestOlgaScheduler, EventLoopPoll) { using time_point = SteadyClockMock::time_point; using std::chrono_literals::operator""ms; @@ -294,7 +294,7 @@ TEST(TestOlgScheduler, EventLoopPoll) EXPECT_THAT(evl.getTree()[0U]->getDeadline().value().time_since_epoch(), 210ms); // Skipped ahead! } -TEST(TestOlgScheduler, EventLoopDefer_single_overdue) +TEST(TestOlgaScheduler, EventLoopDefer_single_overdue) { using time_point = SteadyClockMock::time_point; using std::chrono_literals::operator""ms; @@ -316,7 +316,7 @@ TEST(TestOlgScheduler, EventLoopDefer_single_overdue) EXPECT_THAT(out.approx_now.time_since_epoch(), 1030ms); } -TEST(TestOlgScheduler, EventLoopDefer_long_running_callback) +TEST(TestOlgaScheduler, EventLoopDefer_long_running_callback) { using duration = SteadyClockMock::duration; using std::chrono_literals::operator""ms; @@ -345,7 +345,7 @@ TEST(TestOlgScheduler, EventLoopDefer_long_running_callback) std::make_tuple("b", 20ms, 100ms))); } -TEST(TestOlgScheduler, HandleMovement) +TEST(TestOlgaScheduler, HandleMovement) { using duration = SteadyClockMock::duration; using std::chrono_literals::operator""ms; @@ -417,7 +417,7 @@ TEST(TestOlgScheduler, HandleMovement) EXPECT_THAT(calls, IsEmpty()); } -} // namespace olg_scheduler::verification +} // namespace olga_scheduler::verification // NOLINTEND(cppcoreguidelines-avoid-magic-numbers, readability-magic-numbers) // NOLINTEND(readability-function-cognitive-complexity, misc-const-correctness)