TaskScheduler Unit Tests #50
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: TaskScheduler Unit Tests | |
| on: | |
| push: | |
| branches: [ master, main ] | |
| paths: | |
| - 'examples/**' | |
| - 'src/**' | |
| - 'tests/**' | |
| pull_request: | |
| branches: [ master, main ] | |
| paths: | |
| - 'examples/**' | |
| - 'src/**' | |
| - 'tests/**' | |
| workflow_dispatch: | |
| jobs: | |
| test-basic: | |
| name: Tests of Basic Functionality | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Basic Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerBasicTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the basic test executable | |
| add_executable(test_basic | |
| tests/test-scheduler-basic.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_basic | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility | |
| target_compile_definitions(test_basic PRIVATE | |
| ARDUINO=300 | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_basic PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME BasicTests COMMAND test_basic) | |
| EOF | |
| - name: Build basic tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run basic tests | |
| run: | | |
| echo "=== Running Basic Scheduler Tests ===" | |
| ./test_basic | |
| test-thorough: | |
| name: Thorough Scheduler Tests | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Thorough Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerThoroughTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the thorough test executable | |
| add_executable(test_thorough | |
| tests/test-scheduler-basic-thorough.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_thorough | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility | |
| target_compile_definitions(test_thorough PRIVATE | |
| ARDUINO=300 | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_thorough PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME ThoroughTests COMMAND test_thorough) | |
| EOF | |
| - name: Build thorough tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run thorough tests | |
| run: | | |
| echo "=== Running Thorough Tests ===" | |
| ./test_thorough | |
| test-advanced: | |
| name: Tests of Advanced Functionality | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Advanced Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerAdvancedTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the advanced test executable | |
| add_executable(test_advanced | |
| tests/test-scheduler-advanced-features.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_advanced | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility | |
| target_compile_definitions(test_advanced PRIVATE | |
| ARDUINO=300 | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_advanced PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME AdvancedTests COMMAND test_advanced) | |
| EOF | |
| - name: Build advanced tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run advanced tests | |
| run: | | |
| echo "=== Running Advanced Tests ===" | |
| ./test_advanced | |
| test-blink-example: | |
| name: Tests Based on Blink Example | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Blink Example Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerBlinkExampleTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the blink example test executable | |
| add_executable(test_blink_example | |
| tests/test-scheduler-blink-example.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_blink_example | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility | |
| target_compile_definitions(test_blink_example PRIVATE | |
| ARDUINO=300 | |
| _TASK_SLEEP_ON_IDLE_RUN | |
| _TASK_STATUS_REQUEST | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_blink_example PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME BlinkExampleTests COMMAND test_blink_example) | |
| EOF | |
| - name: Build blink example tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run blink example tests | |
| run: | | |
| echo "=== Running Blink Example Tests ===" | |
| ./test_blink_example | |
| test-priority: | |
| name: Tests with Layered Priority | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Priority Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerPriorityTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the priority test executable | |
| add_executable(test_priority | |
| tests/test-scheduler-priority.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_priority | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility and priority support | |
| target_compile_definitions(test_priority PRIVATE | |
| ARDUINO=300 | |
| _TASK_PRIORITY | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_priority PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME PriorityTests COMMAND test_priority) | |
| EOF | |
| - name: Build priority tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run priority tests | |
| run: | | |
| echo "=== Running Priority Tests ===" | |
| ./test_priority | |
| test-thread-safe: | |
| name: Tests of Thread-Safe Functionality | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y cmake build-essential libgtest-dev pkg-config | |
| - name: Build and install Google Test | |
| run: | | |
| cd /usr/src/gtest | |
| sudo cmake . | |
| sudo cmake --build . --target all | |
| sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib | |
| - name: Create CMakeLists.txt for Thread-Safe Tests | |
| run: | | |
| cat > CMakeLists.txt << 'EOF' | |
| cmake_minimum_required(VERSION 3.10) | |
| project(TaskSchedulerThreadSafeTests VERSION 1.0.0) | |
| set(CMAKE_CXX_STANDARD 14) | |
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | |
| # Find required packages | |
| find_package(PkgConfig REQUIRED) | |
| find_package(Threads REQUIRED) | |
| # Include directories | |
| include_directories(${CMAKE_SOURCE_DIR}/src) | |
| include_directories(${CMAKE_SOURCE_DIR}/tests) | |
| # Gather source files | |
| file(GLOB TASKSCHEDULER_SOURCES | |
| "${CMAKE_SOURCE_DIR}/src/*.cpp" | |
| "${CMAKE_SOURCE_DIR}/src/*.c" | |
| ) | |
| # Create the thread-safe test executable | |
| add_executable(test_thread_safe | |
| tests/test-scheduler-thread-safe.cpp | |
| tests/test-queue-impl.cpp | |
| ${TASKSCHEDULER_SOURCES} | |
| ) | |
| # Link libraries | |
| target_link_libraries(test_thread_safe | |
| gtest | |
| gtest_main | |
| pthread | |
| ) | |
| # Compiler definitions for Arduino compatibility and thread safety | |
| target_compile_definitions(test_thread_safe PRIVATE | |
| ARDUINO=300 | |
| _TASK_HEADER_AND_CPP | |
| _TASK_THREAD_SAFE | |
| _TASK_STATUS_REQUEST | |
| _TASK_TIMEOUT | |
| ) | |
| # Compiler flags | |
| target_compile_options(test_thread_safe PRIVATE | |
| -Wall | |
| -Wextra | |
| -O2 | |
| -pthread | |
| ) | |
| # Enable testing | |
| enable_testing() | |
| add_test(NAME ThreadSafeTests COMMAND test_thread_safe) | |
| EOF | |
| - name: Build thread-safe tests | |
| run: | | |
| cmake . | |
| make -j$(nproc) | |
| - name: Run thread-safe tests | |
| run: | | |
| echo "=== Running Thread-Safe Tests ===" | |
| ./test_thread_safe |