test.yml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523
  1. name: TaskScheduler Unit Tests
  2. on:
  3. push:
  4. branches: [ master, main ]
  5. paths:
  6. - 'examples/**'
  7. - 'src/**'
  8. - 'tests/**'
  9. pull_request:
  10. branches: [ master, main ]
  11. paths:
  12. - 'examples/**'
  13. - 'src/**'
  14. - 'tests/**'
  15. workflow_dispatch:
  16. jobs:
  17. test-basic:
  18. name: Tests of Basic Functionality
  19. runs-on: ubuntu-latest
  20. steps:
  21. - name: Checkout
  22. uses: actions/checkout@v4
  23. - name: Install dependencies
  24. run: |
  25. sudo apt-get update
  26. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  27. - name: Build and install Google Test
  28. run: |
  29. cd /usr/src/gtest
  30. sudo cmake .
  31. sudo cmake --build . --target all
  32. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  33. - name: Create CMakeLists.txt for Basic Tests
  34. run: |
  35. cat > CMakeLists.txt << 'EOF'
  36. cmake_minimum_required(VERSION 3.10)
  37. project(TaskSchedulerBasicTests VERSION 1.0.0)
  38. set(CMAKE_CXX_STANDARD 14)
  39. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  40. # Find required packages
  41. find_package(PkgConfig REQUIRED)
  42. find_package(Threads REQUIRED)
  43. # Include directories
  44. include_directories(${CMAKE_SOURCE_DIR}/src)
  45. include_directories(${CMAKE_SOURCE_DIR}/tests)
  46. # Gather source files
  47. file(GLOB TASKSCHEDULER_SOURCES
  48. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  49. "${CMAKE_SOURCE_DIR}/src/*.c"
  50. )
  51. # Create the basic test executable
  52. add_executable(test_basic
  53. tests/test-scheduler-basic.cpp
  54. ${TASKSCHEDULER_SOURCES}
  55. )
  56. # Link libraries
  57. target_link_libraries(test_basic
  58. gtest
  59. gtest_main
  60. pthread
  61. )
  62. # Compiler definitions for Arduino compatibility
  63. target_compile_definitions(test_basic PRIVATE
  64. ARDUINO=300
  65. )
  66. # Compiler flags
  67. target_compile_options(test_basic PRIVATE
  68. -Wall
  69. -Wextra
  70. -O2
  71. )
  72. # Enable testing
  73. enable_testing()
  74. add_test(NAME BasicTests COMMAND test_basic)
  75. EOF
  76. - name: Build basic tests
  77. run: |
  78. cmake .
  79. make -j$(nproc)
  80. - name: Run basic tests
  81. run: |
  82. echo "=== Running Basic Scheduler Tests ==="
  83. ./test_basic
  84. test-thorough:
  85. name: Thorough Scheduler Tests
  86. runs-on: ubuntu-latest
  87. steps:
  88. - name: Checkout
  89. uses: actions/checkout@v4
  90. - name: Install dependencies
  91. run: |
  92. sudo apt-get update
  93. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  94. - name: Build and install Google Test
  95. run: |
  96. cd /usr/src/gtest
  97. sudo cmake .
  98. sudo cmake --build . --target all
  99. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  100. - name: Create CMakeLists.txt for Thorough Tests
  101. run: |
  102. cat > CMakeLists.txt << 'EOF'
  103. cmake_minimum_required(VERSION 3.10)
  104. project(TaskSchedulerThoroughTests VERSION 1.0.0)
  105. set(CMAKE_CXX_STANDARD 14)
  106. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  107. # Find required packages
  108. find_package(PkgConfig REQUIRED)
  109. find_package(Threads REQUIRED)
  110. # Include directories
  111. include_directories(${CMAKE_SOURCE_DIR}/src)
  112. include_directories(${CMAKE_SOURCE_DIR}/tests)
  113. # Gather source files
  114. file(GLOB TASKSCHEDULER_SOURCES
  115. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  116. "${CMAKE_SOURCE_DIR}/src/*.c"
  117. )
  118. # Create the thorough test executable
  119. add_executable(test_thorough
  120. tests/test-scheduler-basic-thorough.cpp
  121. ${TASKSCHEDULER_SOURCES}
  122. )
  123. # Link libraries
  124. target_link_libraries(test_thorough
  125. gtest
  126. gtest_main
  127. pthread
  128. )
  129. # Compiler definitions for Arduino compatibility
  130. target_compile_definitions(test_thorough PRIVATE
  131. ARDUINO=300
  132. )
  133. # Compiler flags
  134. target_compile_options(test_thorough PRIVATE
  135. -Wall
  136. -Wextra
  137. -O2
  138. )
  139. # Enable testing
  140. enable_testing()
  141. add_test(NAME ThoroughTests COMMAND test_thorough)
  142. EOF
  143. - name: Build thorough tests
  144. run: |
  145. cmake .
  146. make -j$(nproc)
  147. - name: Run thorough tests
  148. run: |
  149. echo "=== Running Thorough Tests ==="
  150. ./test_thorough
  151. test-advanced:
  152. name: Tests of Advanced Functionality
  153. runs-on: ubuntu-latest
  154. steps:
  155. - name: Checkout
  156. uses: actions/checkout@v4
  157. - name: Install dependencies
  158. run: |
  159. sudo apt-get update
  160. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  161. - name: Build and install Google Test
  162. run: |
  163. cd /usr/src/gtest
  164. sudo cmake .
  165. sudo cmake --build . --target all
  166. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  167. - name: Create CMakeLists.txt for Advanced Tests
  168. run: |
  169. cat > CMakeLists.txt << 'EOF'
  170. cmake_minimum_required(VERSION 3.10)
  171. project(TaskSchedulerAdvancedTests VERSION 1.0.0)
  172. set(CMAKE_CXX_STANDARD 14)
  173. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  174. # Find required packages
  175. find_package(PkgConfig REQUIRED)
  176. find_package(Threads REQUIRED)
  177. # Include directories
  178. include_directories(${CMAKE_SOURCE_DIR}/src)
  179. include_directories(${CMAKE_SOURCE_DIR}/tests)
  180. # Gather source files
  181. file(GLOB TASKSCHEDULER_SOURCES
  182. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  183. "${CMAKE_SOURCE_DIR}/src/*.c"
  184. )
  185. # Create the advanced test executable
  186. add_executable(test_advanced
  187. tests/test-scheduler-advanced-features.cpp
  188. ${TASKSCHEDULER_SOURCES}
  189. )
  190. # Link libraries
  191. target_link_libraries(test_advanced
  192. gtest
  193. gtest_main
  194. pthread
  195. )
  196. # Compiler definitions for Arduino compatibility
  197. target_compile_definitions(test_advanced PRIVATE
  198. ARDUINO=300
  199. )
  200. # Compiler flags
  201. target_compile_options(test_advanced PRIVATE
  202. -Wall
  203. -Wextra
  204. -O2
  205. )
  206. # Enable testing
  207. enable_testing()
  208. add_test(NAME AdvancedTests COMMAND test_advanced)
  209. EOF
  210. - name: Build advanced tests
  211. run: |
  212. cmake .
  213. make -j$(nproc)
  214. - name: Run advanced tests
  215. run: |
  216. echo "=== Running Advanced Tests ==="
  217. ./test_advanced
  218. test-blink-example:
  219. name: Tests Based on Blink Example
  220. runs-on: ubuntu-latest
  221. steps:
  222. - name: Checkout
  223. uses: actions/checkout@v4
  224. - name: Install dependencies
  225. run: |
  226. sudo apt-get update
  227. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  228. - name: Build and install Google Test
  229. run: |
  230. cd /usr/src/gtest
  231. sudo cmake .
  232. sudo cmake --build . --target all
  233. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  234. - name: Create CMakeLists.txt for Blink Example Tests
  235. run: |
  236. cat > CMakeLists.txt << 'EOF'
  237. cmake_minimum_required(VERSION 3.10)
  238. project(TaskSchedulerBlinkExampleTests VERSION 1.0.0)
  239. set(CMAKE_CXX_STANDARD 14)
  240. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  241. # Find required packages
  242. find_package(PkgConfig REQUIRED)
  243. find_package(Threads REQUIRED)
  244. # Include directories
  245. include_directories(${CMAKE_SOURCE_DIR}/src)
  246. include_directories(${CMAKE_SOURCE_DIR}/tests)
  247. # Gather source files
  248. file(GLOB TASKSCHEDULER_SOURCES
  249. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  250. "${CMAKE_SOURCE_DIR}/src/*.c"
  251. )
  252. # Create the blink example test executable
  253. add_executable(test_blink_example
  254. tests/test-scheduler-blink-example.cpp
  255. ${TASKSCHEDULER_SOURCES}
  256. )
  257. # Link libraries
  258. target_link_libraries(test_blink_example
  259. gtest
  260. gtest_main
  261. pthread
  262. )
  263. # Compiler definitions for Arduino compatibility
  264. target_compile_definitions(test_blink_example PRIVATE
  265. ARDUINO=300
  266. _TASK_SLEEP_ON_IDLE_RUN
  267. _TASK_STATUS_REQUEST
  268. )
  269. # Compiler flags
  270. target_compile_options(test_blink_example PRIVATE
  271. -Wall
  272. -Wextra
  273. -O2
  274. )
  275. # Enable testing
  276. enable_testing()
  277. add_test(NAME BlinkExampleTests COMMAND test_blink_example)
  278. EOF
  279. - name: Build blink example tests
  280. run: |
  281. cmake .
  282. make -j$(nproc)
  283. - name: Run blink example tests
  284. run: |
  285. echo "=== Running Blink Example Tests ==="
  286. ./test_blink_example
  287. test-priority:
  288. name: Tests with Layered Priority
  289. runs-on: ubuntu-latest
  290. steps:
  291. - name: Checkout
  292. uses: actions/checkout@v4
  293. - name: Install dependencies
  294. run: |
  295. sudo apt-get update
  296. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  297. - name: Build and install Google Test
  298. run: |
  299. cd /usr/src/gtest
  300. sudo cmake .
  301. sudo cmake --build . --target all
  302. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  303. - name: Create CMakeLists.txt for Priority Tests
  304. run: |
  305. cat > CMakeLists.txt << 'EOF'
  306. cmake_minimum_required(VERSION 3.10)
  307. project(TaskSchedulerPriorityTests VERSION 1.0.0)
  308. set(CMAKE_CXX_STANDARD 14)
  309. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  310. # Find required packages
  311. find_package(PkgConfig REQUIRED)
  312. find_package(Threads REQUIRED)
  313. # Include directories
  314. include_directories(${CMAKE_SOURCE_DIR}/src)
  315. include_directories(${CMAKE_SOURCE_DIR}/tests)
  316. # Gather source files
  317. file(GLOB TASKSCHEDULER_SOURCES
  318. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  319. "${CMAKE_SOURCE_DIR}/src/*.c"
  320. )
  321. # Create the priority test executable
  322. add_executable(test_priority
  323. tests/test-scheduler-priority.cpp
  324. ${TASKSCHEDULER_SOURCES}
  325. )
  326. # Link libraries
  327. target_link_libraries(test_priority
  328. gtest
  329. gtest_main
  330. pthread
  331. )
  332. # Compiler definitions for Arduino compatibility and priority support
  333. target_compile_definitions(test_priority PRIVATE
  334. ARDUINO=300
  335. _TASK_PRIORITY
  336. )
  337. # Compiler flags
  338. target_compile_options(test_priority PRIVATE
  339. -Wall
  340. -Wextra
  341. -O2
  342. )
  343. # Enable testing
  344. enable_testing()
  345. add_test(NAME PriorityTests COMMAND test_priority)
  346. EOF
  347. - name: Build priority tests
  348. run: |
  349. cmake .
  350. make -j$(nproc)
  351. - name: Run priority tests
  352. run: |
  353. echo "=== Running Priority Tests ==="
  354. ./test_priority
  355. test-thread-safe:
  356. name: Tests of Thread-Safe Functionality
  357. runs-on: ubuntu-latest
  358. steps:
  359. - name: Checkout
  360. uses: actions/checkout@v4
  361. - name: Install dependencies
  362. run: |
  363. sudo apt-get update
  364. sudo apt-get install -y cmake build-essential libgtest-dev pkg-config
  365. - name: Build and install Google Test
  366. run: |
  367. cd /usr/src/gtest
  368. sudo cmake .
  369. sudo cmake --build . --target all
  370. sudo cp lib/*.a /usr/lib || sudo cp *.a /usr/lib
  371. - name: Create CMakeLists.txt for Thread-Safe Tests
  372. run: |
  373. cat > CMakeLists.txt << 'EOF'
  374. cmake_minimum_required(VERSION 3.10)
  375. project(TaskSchedulerThreadSafeTests VERSION 1.0.0)
  376. set(CMAKE_CXX_STANDARD 14)
  377. set(CMAKE_CXX_STANDARD_REQUIRED ON)
  378. # Find required packages
  379. find_package(PkgConfig REQUIRED)
  380. find_package(Threads REQUIRED)
  381. # Include directories
  382. include_directories(${CMAKE_SOURCE_DIR}/src)
  383. include_directories(${CMAKE_SOURCE_DIR}/tests)
  384. # Gather source files
  385. file(GLOB TASKSCHEDULER_SOURCES
  386. "${CMAKE_SOURCE_DIR}/src/*.cpp"
  387. "${CMAKE_SOURCE_DIR}/src/*.c"
  388. )
  389. # Create the thread-safe test executable
  390. add_executable(test_thread_safe
  391. tests/test-scheduler-thread-safe.cpp
  392. tests/test-queue-impl.cpp
  393. ${TASKSCHEDULER_SOURCES}
  394. )
  395. # Link libraries
  396. target_link_libraries(test_thread_safe
  397. gtest
  398. gtest_main
  399. pthread
  400. )
  401. # Compiler definitions for Arduino compatibility and thread safety
  402. target_compile_definitions(test_thread_safe PRIVATE
  403. ARDUINO=300
  404. _TASK_HEADER_AND_CPP
  405. _TASK_THREAD_SAFE
  406. _TASK_STATUS_REQUEST
  407. _TASK_TIMEOUT
  408. )
  409. # Compiler flags
  410. target_compile_options(test_thread_safe PRIVATE
  411. -Wall
  412. -Wextra
  413. -O2
  414. -pthread
  415. )
  416. # Enable testing
  417. enable_testing()
  418. add_test(NAME ThreadSafeTests COMMAND test_thread_safe)
  419. EOF
  420. - name: Build thread-safe tests
  421. run: |
  422. cmake .
  423. make -j$(nproc)
  424. - name: Run thread-safe tests
  425. run: |
  426. echo "=== Running Thread-Safe Tests ==="
  427. ./test_thread_safe