소스 검색

Individual unit tests. Unified isSomething() method naming approach

Anatoli Arkhipenko 5 달 전
부모
커밋
0551e9dc38
3개의 변경된 파일200개의 추가작업 그리고 41개의 파일을 삭제
  1. 186 31
      .github/workflows/test.yml
  2. 4 4
      src/TaskScheduler.h
  3. 10 6
      src/TaskSchedulerDeclarations.h

+ 186 - 31
.github/workflows/test.yml

@@ -1,4 +1,4 @@
-name: TaskScheduler Unit Test
+name: TaskScheduler Unit Tests
 on:
   push:
     branches: [ main ]
@@ -7,30 +7,31 @@ on:
   workflow_dispatch:
 
 jobs:
-  Test01_Basic_Functionality:
+  test-basic:
+    name: Basic 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
+
+      - name: Create CMakeLists.txt for Basic Tests
         run: |
           cat > CMakeLists.txt << 'EOF'
           cmake_minimum_required(VERSION 3.10)
-          project(TaskSchedulerTests VERSION 1.0.0)
+          project(TaskSchedulerBasicTests VERSION 1.0.0)
 
           set(CMAKE_CXX_STANDARD 14)
           set(CMAKE_CXX_STANDARD_REQUIRED ON)
@@ -44,44 +45,114 @@ jobs:
           include_directories(${CMAKE_SOURCE_DIR}/tests)
 
           # Gather source files
-          file(GLOB TASKSCHEDULER_SOURCES 
+          file(GLOB TASKSCHEDULER_SOURCES
               "${CMAKE_SOURCE_DIR}/src/*.cpp"
               "${CMAKE_SOURCE_DIR}/src/*.c"
           )
 
-          # Only include the specific test file we want to run
-          set(TEST_SOURCES
-              "${CMAKE_SOURCE_DIR}/tests/test-scheduler-basic.cpp"
-              "${CMAKE_SOURCE_DIR}/tests/test-scheduler-basic-thorough-no-lambda.cpp"
-              "${CMAKE_SOURCE_DIR}/tests/test-scheduler-advanced-features-no-lambda.cpp"
+          # 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
           )
 
-          # Check if we have test files
-          list(LENGTH TEST_SOURCES TEST_COUNT)
-          if(TEST_COUNT EQUAL 0)
-              message(FATAL_ERROR "No test files found in tests/ directory")
-          endif()
+          # Compiler definitions for Arduino compatibility
+          target_compile_definitions(test_basic PRIVATE
+              ARDUINO=300
+          )
 
-          # Create the test executable
-          add_executable(taskscheduler_tests
-              ${TEST_SOURCES}
+          # 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-no-lambda:
+    name: Thorough No-Lambda 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 No-Lambda Tests
+        run: |
+          cat > CMakeLists.txt << 'EOF'
+          cmake_minimum_required(VERSION 3.10)
+          project(TaskSchedulerThoroughNoLambdaTests 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 no-lambda test executable
+          add_executable(test_thorough_no_lambda
+              tests/test-scheduler-basic-thorough-no-lambda.cpp
               ${TASKSCHEDULER_SOURCES}
           )
 
           # Link libraries
-          target_link_libraries(taskscheduler_tests
+          target_link_libraries(test_thorough_no_lambda
               gtest
               gtest_main
               pthread
           )
 
           # Compiler definitions for Arduino compatibility
-          target_compile_definitions(taskscheduler_tests PRIVATE
+          target_compile_definitions(test_thorough_no_lambda PRIVATE
               ARDUINO=300
           )
 
           # Compiler flags
-          target_compile_options(taskscheduler_tests PRIVATE
+          target_compile_options(test_thorough_no_lambda PRIVATE
               -Wall
               -Wextra
               -O2
@@ -89,14 +160,98 @@ jobs:
 
           # Enable testing
           enable_testing()
-          add_test(NAME TaskSchedulerUnitTests COMMAND taskscheduler_tests)
+          add_test(NAME ThoroughNoLambdaTests COMMAND test_thorough_no_lambda)
           EOF
-          
-      - name: Build tests
+
+      - name: Build thorough no-lambda tests
         run: |
           cmake .
           make -j$(nproc)
-          
-      - name: Run unit tests
+
+      - name: Run thorough no-lambda tests
+        run: |
+          echo "=== Running Thorough No-Lambda Tests ==="
+          ./test_thorough_no_lambda
+
+  test-advanced-no-lambda:
+    name: Advanced No-Lambda 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 Advanced No-Lambda Tests
+        run: |
+          cat > CMakeLists.txt << 'EOF'
+          cmake_minimum_required(VERSION 3.10)
+          project(TaskSchedulerAdvancedNoLambdaTests 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 no-lambda test executable
+          add_executable(test_advanced_no_lambda
+              tests/test-scheduler-advanced-features-no-lambda.cpp
+              ${TASKSCHEDULER_SOURCES}
+          )
+
+          # Link libraries
+          target_link_libraries(test_advanced_no_lambda
+              gtest
+              gtest_main
+              pthread
+          )
+
+          # Compiler definitions for Arduino compatibility
+          target_compile_definitions(test_advanced_no_lambda PRIVATE
+              ARDUINO=300
+          )
+
+          # Compiler flags
+          target_compile_options(test_advanced_no_lambda PRIVATE
+              -Wall
+              -Wextra
+              -O2
+          )
+
+          # Enable testing
+          enable_testing()
+          add_test(NAME AdvancedNoLambdaTests COMMAND test_advanced_no_lambda)
+          EOF
+
+      - name: Build advanced no-lambda tests
+        run: |
+          cmake .
+          make -j$(nproc)
+
+      - name: Run advanced no-lambda tests
         run: |
-          ./taskscheduler_tests
+          echo "=== Running Advanced No-Lambda Tests ==="
+          ./test_advanced_no_lambda

+ 4 - 4
src/TaskScheduler.h

@@ -479,8 +479,8 @@ void StatusRequest::setWaiting(unsigned int aCount) {
 #endif  //  #ifdef _TASK_TIMEOUT
 }
 
-bool StatusRequest::pending() { return (iCount != 0); }
-bool StatusRequest::completed() { return (iCount == 0); }
+bool StatusRequest::isPending() { return (iCount != 0); }
+bool StatusRequest::isCompleted() { return (iCount == 0); }
 int StatusRequest::getStatus() { return iStatus; }
 int StatusRequest::getCount() { return iCount; }
 StatusRequest* Task::getStatusRequest() { return iStatusRequest; }
@@ -782,7 +782,7 @@ long Task::untilTimeout() {
     return -1;
 }
 
-bool Task::timedOut() {
+bool Task::isTimedOut() {
     return iStatus.timeout;
 }
 
@@ -933,7 +933,7 @@ void __TASK_IRAM Task::cancel() {
     disable();
 }
 
-bool Task::canceled() {
+bool Task::isCanceled() {
     return iStatus.canceled;
 }
 

+ 10 - 6
src/TaskSchedulerDeclarations.h

@@ -311,8 +311,10 @@ class StatusRequest {
     __TASK_INLINE void setWaiting(unsigned int aCount = 1);
     __TASK_INLINE bool  signal(int aStatus = 0);
     __TASK_INLINE void  signalComplete(int aStatus = 0);
-    __TASK_INLINE bool pending();
-    __TASK_INLINE bool completed();
+    __TASK_INLINE bool pending() { return isPending(); };  // deprecated
+    __TASK_INLINE bool isPending();
+    __TASK_INLINE bool completed() { return isCompleted(); }; // deprecated
+    __TASK_INLINE bool isCompleted();
     __TASK_INLINE int  getStatus();
     __TASK_INLINE int  getCount();
     
@@ -409,7 +411,8 @@ class Task {
     __TASK_INLINE void resetTimeout();
     __TASK_INLINE unsigned long getTimeout();
     __TASK_INLINE long untilTimeout();
-    __TASK_INLINE bool timedOut();
+    __TASK_INLINE bool timedOut() { return isTimedOut(); };  // deprecated
+    __TASK_INLINE bool isTimedOut();
 #endif
 
     __TASK_INLINE bool  enable();
@@ -419,13 +422,14 @@ class Task {
     __TASK_INLINE bool  restartDelayed(unsigned long aDelay=0);
 
     __TASK_INLINE void  delay(unsigned long aDelay=0);
-    __TASK_INLINE void adjust(long aInterval);
+    __TASK_INLINE void  adjust(long aInterval);
     __TASK_INLINE void  forceNextIteration();
     __TASK_INLINE bool  disable();
     __TASK_INLINE void  abort();
     __TASK_INLINE void  cancel();
-    __TASK_INLINE bool isEnabled();
-    __TASK_INLINE bool canceled();
+    __TASK_INLINE bool  isEnabled();
+    __TASK_INLINE bool  isCanceled();
+    __TASK_INLINE bool  canceled() { return isCanceled(); };  // deprecated
 
 #ifdef _TASK_SCHEDULING_OPTIONS
     __TASK_INLINE unsigned int getSchedulingOption() { return iOption; }