From 47c97cfce8b07f06efec3df10b59b96440ad3a76 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 10:59:38 +0100 Subject: [PATCH 01/18] feat: add random array generation, shuffle and reverse --- CMakeLists.txt | 8 +++- src/app/app.cpp | 48 +++++++++++++++---- src/app/app.hpp | 9 ++++ src/utils/array_utils/array_utils.cpp | 36 ++++++++++++++ src/utils/array_utils/array_utils.hpp | 12 +++++ .../random_number_generator.cpp | 20 ++++++++ .../random_number_generator.hpp | 15 ++++++ 7 files changed, 136 insertions(+), 12 deletions(-) create mode 100644 src/utils/array_utils/array_utils.cpp create mode 100644 src/utils/array_utils/array_utils.hpp create mode 100644 src/utils/random_number_generator/random_number_generator.cpp create mode 100644 src/utils/random_number_generator/random_number_generator.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 66cc881..5322d74 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,9 +2,13 @@ cmake_minimum_required(VERSION 3.10) project(MergeSort) -include_directories(src/app src/merge_sorter) +include_directories(src/app src/merge_sorter src/utils) -set(SOURCES src/main.cpp src/app/app.cpp src/merge_sorter/merge_sorter.cpp) +set(SOURCES src/main.cpp src/app/app.cpp + src/merge_sorter/merge_sorter.cpp + src/utils/array_utils/array_utils.cpp + src/utils/random_number_generator/random_number_generator.cpp + ) add_executable(MergeSort ${SOURCES}) diff --git a/src/app/app.cpp b/src/app/app.cpp index 68b61da..e5d46b3 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -14,6 +14,8 @@ #include "app.hpp" #include "../merge_sorter/merge_sorter.hpp" +#include +#include std::istream& operator>>(std::istream& iStream, MenuOption& menuOption) { int num; @@ -34,11 +36,14 @@ int App::mainMenu() { std::cout << "---ZARZĄDZANIE LISTĄ---\n"; std::cout << "2. Wyświetl zawrtość\n"; - std::cout << "3. Posortuj\n"; - std::cout << "4. Wyczyść\n\n"; + std::cout << "3. Wypełnij losowymi elementami\n"; + std::cout << "4. Pomieszaj zawartość\n"; + std::cout << "5. Odwróć kolejność elementów\n"; + std::cout << "6. Posortuj\n"; + std::cout << "7. Wyczyść\n\n"; std::cout << "---OPCJE---\n"; - std::cout << "5. Wyjdź\n\n"; + std::cout << "8. Wyjdź\n\n"; std::cout << "Wybierz działanie: "; @@ -60,6 +65,15 @@ int App::mainMenu() { case DISPLAY_ARRAY: handleDisplayArray(); break; + case GENERATE_RANDOM_ARRAY: + handleGenerateRandomArray(); + break; + case SHUFFLE_ARRAY: + handleShuffleArray(); + break; + case REVERSE_ARRAY: + handleReverseArray(); + break; case SORT_ARRAY: handleSortArray(); break; @@ -97,17 +111,31 @@ void App::handleInsertItem() { } void App::handleDisplayArray() { - std::cout << "["; + displayArray(array); +} - for (auto it = array.begin(); it != array.end(); ++it) { - std::cout << *it; +void App::handleGenerateRandomArray() { + std::cout << "Podaj ilość elementów: "; + int count; + std::cin >> count; - if (it != array.end() - 1) { - std::cout << ", "; - } + array.clear(); + + for (int i = 0; i < count; ++i) { + array.push_back(RandomNumberGenerator::getRandomNumber(-99, 99)); } - std::cout << "]\n"; + std::cout << "Wygenerowano listę\n"; +} + +void App::handleShuffleArray() { + randomlyShuffleArray(array); + std::cout << "Wymieszano listę\n"; +} + +void App::handleReverseArray() { + reverseArray(array); + std::cout << "Odwrócono listę\n"; } void App::handleClearArray() { diff --git a/src/app/app.hpp b/src/app/app.hpp index 4a5f769..4fe9351 100644 --- a/src/app/app.hpp +++ b/src/app/app.hpp @@ -20,6 +20,9 @@ enum MenuOption { INSERT_ITEM = 1, DISPLAY_ARRAY, + GENERATE_RANDOM_ARRAY, + SHUFFLE_ARRAY, + REVERSE_ARRAY, SORT_ARRAY, CLEAR_ARRAY, @@ -50,6 +53,12 @@ class App { static void handleDisplayArray(); + static void handleGenerateRandomArray(); + + static void handleShuffleArray(); + + static void handleReverseArray(); + static void handleClearArray(); static void handleSortArray(); diff --git a/src/utils/array_utils/array_utils.cpp b/src/utils/array_utils/array_utils.cpp new file mode 100644 index 0000000..ff30f83 --- /dev/null +++ b/src/utils/array_utils/array_utils.cpp @@ -0,0 +1,36 @@ +#include +#include +#include +#include + +void displayArray(std::vector arr) { + std::cout << "["; + + for (auto it = arr.begin(); it != arr.end(); ++it) { + std::cout << *it; + + if (it != arr.end() - 1) { + std::cout << ", "; + } + } + + std::cout << "]\n"; +} + +void randomlyShuffleArray(std::vector& arr) { + std::random_device randomDevice; + std::mt19937 generator(randomDevice()); + + std::shuffle(arr.begin(), arr.end(), generator); +} + +void reverseArray(std::vector& arr) { + for (int i = 0; i < arr.size() / 2; i++) { + //std::swap(arr[i], arr[arrSize - i - 1]); + int temp = arr[i]; + + int swappedElementIndex = arr.size() - i - 1; + arr[i] = arr[swappedElementIndex]; + arr[swappedElementIndex] = temp; + } +} diff --git a/src/utils/array_utils/array_utils.hpp b/src/utils/array_utils/array_utils.hpp new file mode 100644 index 0000000..02c8e78 --- /dev/null +++ b/src/utils/array_utils/array_utils.hpp @@ -0,0 +1,12 @@ +#ifndef ARRAY_UTILS_HPP +#define ARRAY_UTILS_HPP + +#include + +void displayArray(std::vector); + +void randomlyShuffleArray(std::vector&); + +void reverseArray(std::vector&); + +#endif /* ARRAY_UTILS_HPP */ diff --git a/src/utils/random_number_generator/random_number_generator.cpp b/src/utils/random_number_generator/random_number_generator.cpp new file mode 100644 index 0000000..858a60f --- /dev/null +++ b/src/utils/random_number_generator/random_number_generator.cpp @@ -0,0 +1,20 @@ +#include +#include + +#include + +bool RandomNumberGenerator::isSeeded = false; + +void RandomNumberGenerator::seed() { + if (!isSeeded) { + std::srand(std::time(NULL)); + isSeeded = true; + } +} + +int RandomNumberGenerator::getRandomNumber(int min, int max) { + RandomNumberGenerator::seed(); + + int range = max - min; + return std::rand() % range; +} diff --git a/src/utils/random_number_generator/random_number_generator.hpp b/src/utils/random_number_generator/random_number_generator.hpp new file mode 100644 index 0000000..ff4aceb --- /dev/null +++ b/src/utils/random_number_generator/random_number_generator.hpp @@ -0,0 +1,15 @@ +#ifndef RANDOM_NUMBER_GENERATOR_HPP +#define RANDOM_NUMBER_GENERATOR_HPP + +class RandomNumberGenerator { +private: + static bool isSeeded; + + /// @brief Inicjalizuje generator liczb losowych. + static void seed(); + +public: + static int getRandomNumber(int min, int max); +}; + +#endif /* RANDOM_NUMBER_GENERATOR_HPP */ From c677f18d48cd120f87e270c30e336fae89766a54 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 11:02:13 +0100 Subject: [PATCH 02/18] chore: raise required CMake version --- CMakeLists.txt | 2 +- CMakePresets.json | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5322d74..4a5574d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.10) +cmake_minimum_required(VERSION 3.14) project(MergeSort) diff --git a/CMakePresets.json b/CMakePresets.json index 7c39dd8..6224420 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -4,12 +4,12 @@ { "name": "GCC 13.1.0 x86_64-w64-mingw32 (mingw64)", "displayName": "GCC 13.1.0 x86_64-w64-mingw32 (mingw64)", - "description": "Using compilers: C = C:\\msys64\\mingw64\\bin\\gcc.exe, CXX = C:\\msys64\\mingw64\\bin\\g++.exe", + "description": "Using compilers: C = C:\\msys64\\ucrt64\\bin\\gcc.exe, CXX = C:\\msys64\\ucrt64\\bin\\g++.exe", "binaryDir": "${sourceDir}/build/${presetName}", "cacheVariables": { "CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}", - "CMAKE_C_COMPILER": "C:/msys64/mingw64/bin/gcc.exe", - "CMAKE_CXX_COMPILER": "C:/msys64/mingw64/bin/g++.exe", + "CMAKE_C_COMPILER": "C:/msys64/ucrt64/bin/gcc.exe", + "CMAKE_CXX_COMPILER": "C:/msys64/ucrt64/bin/g++.exe", "CMAKE_BUILD_TYPE": "Debug" } }, From 2bdc0df32ace9b6235d7157a4f9f3895b57656c5 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 11:08:48 +0100 Subject: [PATCH 03/18] chore: set required CXX version --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a5574d..30ada6c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.14) project(MergeSort) +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + include_directories(src/app src/merge_sorter src/utils) set(SOURCES src/main.cpp src/app/app.cpp From 894196ddcb763e4be2c4c1045292856aca339874 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 15:58:37 +0100 Subject: [PATCH 04/18] test: configure GoogleTest --- .gitmodules | 4 ++++ CMakeLists.txt | 15 +++++++++++++++ extern/googletest | 1 + tests/CMakeLists.txt | 30 ++++++++++++++++++++++++++++++ tests/test__merge_sorter.cpp | 22 ++++++++++++++++++++++ 5 files changed, 72 insertions(+) create mode 100644 .gitmodules create mode 160000 extern/googletest create mode 100644 tests/CMakeLists.txt create mode 100644 tests/test__merge_sorter.cpp diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..fc14c5d --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "extern/googletest"] + path = extern/googletest + url = https://github.com/google/googletest.git + branch = v1.15.x diff --git a/CMakeLists.txt b/CMakeLists.txt index 30ada6c..f019226 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,16 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) include_directories(src/app src/merge_sorter src/utils) +# Create merge_sorter library +add_library(merge_sorter + src/merge_sorter/merge_sorter.cpp +) + +target_include_directories(merge_sorter PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/src/merge_sorter +) + +# Main executable set(SOURCES src/main.cpp src/app/app.cpp src/merge_sorter/merge_sorter.cpp src/utils/array_utils/array_utils.cpp @@ -14,6 +24,7 @@ set(SOURCES src/main.cpp src/app/app.cpp ) add_executable(MergeSort ${SOURCES}) +target_link_libraries(MergeSort PRIVATE merge_sorter) # Compile with all warnings, treat warnings as errors if (MSVC) @@ -21,3 +32,7 @@ if (MSVC) else() add_compile_options(-Wall -Wextra -pedantic -Werror) endif() + +enable_testing() +include(GoogleTest) +add_subdirectory(tests) diff --git a/extern/googletest b/extern/googletest new file mode 160000 index 0000000..b514bdc --- /dev/null +++ b/extern/googletest @@ -0,0 +1 @@ +Subproject commit b514bdc898e2951020cbdca1304b75f5950d1f59 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..a5ef980 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,30 @@ +add_subdirectory("${PROJECT_SOURCE_DIR}/extern/googletest" "extern/googletest") + +mark_as_advanced( + BUILD_GMOCK BUILD_GTEST BUILD_SHARED_LIBS + gmock_build_tests gtest_build_samples gtest_build_tests + gtest_disable_pthreads gtest_force_shared_crt gtest_hide_internal_symbols +) + +set_target_properties(gtest PROPERTIES FOLDER extern) +set_target_properties(gtest_main PROPERTIES FOLDER extern) +set_target_properties(gmock PROPERTIES FOLDER extern) +set_target_properties(gmock_main PROPERTIES FOLDER extern) + +macro(package_add_test TESTNAME) + # create an executable in which the tests will be stored + add_executable(${TESTNAME} ${ARGN}) + # link the Google test infrastructure, mocking library, and a default main function to + # the test executable. Remove g_test_main if writing your own main function. + target_link_libraries(${TESTNAME} gtest gmock gtest_main merge_sorter) + # gtest_discover_tests replaces gtest_add_tests, + # see https://cmake.org/cmake/help/v3.10/module/GoogleTest.html for more options to pass to it + gtest_discover_tests(${TESTNAME} + # set a working directory so your project root so that you can find test data via paths relative to the project root + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + PROPERTIES VS_DEBUGGER_WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + ) + set_target_properties(${TESTNAME} PROPERTIES FOLDER tests) +endmacro() + +package_add_test(TestMergeSorter test__merge_sorter.cpp) diff --git a/tests/test__merge_sorter.cpp b/tests/test__merge_sorter.cpp new file mode 100644 index 0000000..f5bf19f --- /dev/null +++ b/tests/test__merge_sorter.cpp @@ -0,0 +1,22 @@ +/** + * @file test_defaults.cpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + +#include "gtest/gtest.h" +#include +#include + +#include "merge_sorter.hpp" + +TEST(TestMergeSorter, SortsBasicArray) { + std::vector test_array = { 3, 2, 1 }; + MergeSorter::sortArray(test_array); + + ASSERT_THAT(test_array, testing::ElementsAre(1, 2, 3)); +} From af4c62f2a1a4650faaf7b5cf6e882d8f6f94349e Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 16:37:41 +0100 Subject: [PATCH 05/18] chore: run tests on pre-commit hook --- lefthook.yml | 3 +++ package-lock.json | 2 +- package.json | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lefthook.yml b/lefthook.yml index 5b56771..77a5ab3 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -1,5 +1,8 @@ pre-commit: commands: + test: + run: npm run test + build: run: npm run build diff --git a/package-lock.json b/package-lock.json index f1b5747..8088ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "programowanie-zaawansowane-template", + "name": "merge-sort", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/package.json b/package.json index 1f8b1af..003a177 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "type": "module", "scripts": { "prepare": "lefthook install", + "test": "cmake --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cmake --build --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cd \"build/GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && ctest -C Debug -T test --output-on-failure", "build": "cmake --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cmake --build --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\"" }, "devDependencies": { From 3095ad03621e86d9c2e723401b94b465668068d5 Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 16:45:57 +0100 Subject: [PATCH 06/18] ci: add tests to ci workflow --- .github/workflows/ci.yaml | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 66fb82c..52802af 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -24,6 +24,15 @@ jobs: - name: Install Node dependencies run: npm install + - name: Install CMake and ninja + uses: lukka/get-cmake@latest + + - name: Install MinGW + uses: egor-tensin/setup-mingw@v2 + + - name: Run tests + run: npm run test + - name: Bump version and push tag if: github.ref == 'refs/heads/main' id: tag_version @@ -31,12 +40,6 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} - - name: Install CMake and ninja - uses: lukka/get-cmake@latest - - - name: Install MinGW - uses: egor-tensin/setup-mingw@v2 - - name: Compile project for Windows using CMake run: cmake --preset windows-release && cmake --build --preset windows-release-build From 36c73b58d35f53bf256fb3402f6da6dd453caf3d Mon Sep 17 00:00:00 2001 From: Mateusz Date: Thu, 14 Nov 2024 16:50:24 +0100 Subject: [PATCH 07/18] chore: add missing copyright comments --- src/merge_sorter/merge_sorter.hpp | 10 ++++++++++ src/utils/array_utils/array_utils.cpp | 10 ++++++++++ src/utils/array_utils/array_utils.hpp | 10 ++++++++++ .../random_number_generator.cpp | 10 ++++++++++ .../random_number_generator.hpp | 10 ++++++++++ 5 files changed, 50 insertions(+) diff --git a/src/merge_sorter/merge_sorter.hpp b/src/merge_sorter/merge_sorter.hpp index 250d880..dd2aaee 100644 --- a/src/merge_sorter/merge_sorter.hpp +++ b/src/merge_sorter/merge_sorter.hpp @@ -1,3 +1,13 @@ +/** + * @file merge_sorter.hpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef MERGE_SORTER_HPP #define MERGE_SORTER_HPP diff --git a/src/utils/array_utils/array_utils.cpp b/src/utils/array_utils/array_utils.cpp index ff30f83..e1990c9 100644 --- a/src/utils/array_utils/array_utils.cpp +++ b/src/utils/array_utils/array_utils.cpp @@ -1,3 +1,13 @@ +/** + * @file array_utils.cpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include #include diff --git a/src/utils/array_utils/array_utils.hpp b/src/utils/array_utils/array_utils.hpp index 02c8e78..6c953cb 100644 --- a/src/utils/array_utils/array_utils.hpp +++ b/src/utils/array_utils/array_utils.hpp @@ -1,3 +1,13 @@ +/** + * @file array_utils.hpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef ARRAY_UTILS_HPP #define ARRAY_UTILS_HPP diff --git a/src/utils/random_number_generator/random_number_generator.cpp b/src/utils/random_number_generator/random_number_generator.cpp index 858a60f..12ece3b 100644 --- a/src/utils/random_number_generator/random_number_generator.cpp +++ b/src/utils/random_number_generator/random_number_generator.cpp @@ -1,3 +1,13 @@ +/** + * @file random_number_generator.cpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + #include #include diff --git a/src/utils/random_number_generator/random_number_generator.hpp b/src/utils/random_number_generator/random_number_generator.hpp index ff4aceb..817ca3e 100644 --- a/src/utils/random_number_generator/random_number_generator.hpp +++ b/src/utils/random_number_generator/random_number_generator.hpp @@ -1,3 +1,13 @@ +/** + * @file random_number_generator.hpp + * @author Mateusz Basiaga (basmateusz@wp.pl) + * @brief + * @date 2024-11-14 + * + * @copyright Copyright (c) 2024 + * + */ + #ifndef RANDOM_NUMBER_GENERATOR_HPP #define RANDOM_NUMBER_GENERATOR_HPP From a0adf2b2ed1e6285c8258d4b8c64c4c82de80e18 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 22:45:40 +0100 Subject: [PATCH 08/18] test: force GoogleTest to use dynamic runtime library --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index f019226..32c91c6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,6 +33,9 @@ else() add_compile_options(-Wall -Wextra -pedantic -Werror) endif() +# Force Google Test to use dynamic runtime library +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + enable_testing() include(GoogleTest) add_subdirectory(tests) From e97cdcf478a722c4512bc2fb259e89d192681c98 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 22:46:17 +0100 Subject: [PATCH 09/18] chore: update file name in copyright comment --- tests/test__merge_sorter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test__merge_sorter.cpp b/tests/test__merge_sorter.cpp index f5bf19f..feaa409 100644 --- a/tests/test__merge_sorter.cpp +++ b/tests/test__merge_sorter.cpp @@ -1,5 +1,5 @@ /** - * @file test_defaults.cpp + * @file test_merge_sorter.cpp * @author Mateusz Basiaga (basmateusz@wp.pl) * @brief * @date 2024-11-14 From 654f2548b1632bcb7cdb5bf2db5c73ff5186c2f8 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 22:46:38 +0100 Subject: [PATCH 10/18] chore: improve test task --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 003a177..11c1f89 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "type": "module", "scripts": { "prepare": "lefthook install", + "pretest": "cmake -S . -B \"build/GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\"", "test": "cmake --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cmake --build --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cd \"build/GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && ctest -C Debug -T test --output-on-failure", "build": "cmake --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\" && cmake --build --preset \"GCC 13.1.0 x86_64-w64-mingw32 (mingw64)\"" }, From 88aca5fc4f953127abd85275e94c9a9c4638fda1 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 22:50:24 +0100 Subject: [PATCH 11/18] chore: remove build step (test step should now be enough) --- lefthook.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/lefthook.yml b/lefthook.yml index 77a5ab3..3b62d8f 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -3,9 +3,6 @@ pre-commit: test: run: npm run test - build: - run: npm run build - generate-docs: root: / run: doxygen && ./docs/doxygen/latex/make.bat From 4563f32b617b65283f8c773b65c987045d2e21a7 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 22:51:49 +0100 Subject: [PATCH 12/18] chore: remove documentation generation step --- lefthook.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/lefthook.yml b/lefthook.yml index 3b62d8f..67ac840 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -3,10 +3,6 @@ pre-commit: test: run: npm run test - generate-docs: - root: / - run: doxygen && ./docs/doxygen/latex/make.bat - commit-msg: commands: validate_commit_message: From 72d4e9d2c56deb94e5d8d168c49a16c8b2962c06 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 23:42:02 +0100 Subject: [PATCH 13/18] ci: run tests directly --- .github/workflows/ci.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 52802af..fb16d92 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -30,8 +30,14 @@ jobs: - name: Install MinGW uses: egor-tensin/setup-mingw@v2 + - name: Compile project for Linux using CMake + run: cmake --preset linux-release && cmake --build --preset linux-release-build + - name: Run tests - run: npm run test + run: cd ./build/linux-release/${{ env.PROJECT_NAME }} && ctest -C Debug -T test --output-on-failure + + - name: Compile project for Windows using CMake + run: cmake --preset windows-release && cmake --build --preset windows-release-build - name: Bump version and push tag if: github.ref == 'refs/heads/main' @@ -40,12 +46,6 @@ jobs: with: github_token: ${{ secrets.GITHUB_TOKEN }} - - name: Compile project for Windows using CMake - run: cmake --preset windows-release && cmake --build --preset windows-release-build - - - name: Compile project for Linux using CMake - run: cmake --preset linux-release && cmake --build --preset linux-release-build - - name: Prepare build artifacts run: | cp ./build/linux-release/${{ env.PROJECT_NAME }} ./${{ env.PROJECT_NAME }}-${{ steps.tag_version.outputs.new_tag }}-linux-x64 From 8914258cea15df97d5323f32f314b8d52392bc32 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 23:45:35 +0100 Subject: [PATCH 14/18] ci: ensure submodules are checked out in ci --- .github/workflows/ci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fb16d92..4948b95 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -12,6 +12,8 @@ jobs: steps: - name: Get latest code uses: actions/checkout@v4 + with: + submodules: 'recursive' - name: Install packages run: sudo apt update && sudo apt install -y graphviz From be9d1276edd9e30b8664056e3f516bc37892e5c5 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 23:49:42 +0100 Subject: [PATCH 15/18] ci: correct directory path --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4948b95..aab6f87 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -36,7 +36,7 @@ jobs: run: cmake --preset linux-release && cmake --build --preset linux-release-build - name: Run tests - run: cd ./build/linux-release/${{ env.PROJECT_NAME }} && ctest -C Debug -T test --output-on-failure + run: cd ./build/linux-release && ctest -C Debug -T test --output-on-failure - name: Compile project for Windows using CMake run: cmake --preset windows-release && cmake --build --preset windows-release-build From 1578039167dd29a18b0a250b29256aca04b2f4e8 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Thu, 14 Nov 2024 23:58:30 +0100 Subject: [PATCH 16/18] ci: skip tests for windows target --- .github/workflows/ci.yaml | 2 +- CMakeLists.txt | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index aab6f87..c55bf3e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -39,7 +39,7 @@ jobs: run: cd ./build/linux-release && ctest -C Debug -T test --output-on-failure - name: Compile project for Windows using CMake - run: cmake --preset windows-release && cmake --build --preset windows-release-build + run: cmake -DPACKAGE_TESTS=OFF --preset windows-release && cmake --build --preset windows-release-build - name: Bump version and push tag if: github.ref == 'refs/heads/main' diff --git a/CMakeLists.txt b/CMakeLists.txt index 32c91c6..7034a0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,6 +36,9 @@ endif() # Force Google Test to use dynamic runtime library set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) -enable_testing() -include(GoogleTest) -add_subdirectory(tests) +option(PACKAGE_TESTS "Build the tests" ON) +if(PACKAGE_TESTS) + enable_testing() + include(GoogleTest) + add_subdirectory(tests) +endif() From 4e6832045182c07f8de43380e8f9d7b16398a0dc Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Fri, 15 Nov 2024 00:01:50 +0100 Subject: [PATCH 17/18] ci: verify tests configuration --- tests/test__merge_sorter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test__merge_sorter.cpp b/tests/test__merge_sorter.cpp index feaa409..b761363 100644 --- a/tests/test__merge_sorter.cpp +++ b/tests/test__merge_sorter.cpp @@ -18,5 +18,5 @@ TEST(TestMergeSorter, SortsBasicArray) { std::vector test_array = { 3, 2, 1 }; MergeSorter::sortArray(test_array); - ASSERT_THAT(test_array, testing::ElementsAre(1, 2, 3)); + ASSERT_THAT(test_array, testing::ElementsAre(1, 4, 3)); } From 6c33803d086dbffec54e7d778e4bb0e13bc5dbc7 Mon Sep 17 00:00:00 2001 From: Me-Phew Date: Fri, 15 Nov 2024 00:05:32 +0100 Subject: [PATCH 18/18] ci: fix test case after verifying tests configuration --- tests/test__merge_sorter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test__merge_sorter.cpp b/tests/test__merge_sorter.cpp index b761363..feaa409 100644 --- a/tests/test__merge_sorter.cpp +++ b/tests/test__merge_sorter.cpp @@ -18,5 +18,5 @@ TEST(TestMergeSorter, SortsBasicArray) { std::vector test_array = { 3, 2, 1 }; MergeSorter::sortArray(test_array); - ASSERT_THAT(test_array, testing::ElementsAre(1, 4, 3)); + ASSERT_THAT(test_array, testing::ElementsAre(1, 2, 3)); }