Skip to content

Commit

Permalink
Merge pull request #2 from Me-Phew/dev
Browse files Browse the repository at this point in the history
ci: fix test case after verifying tests configuration
  • Loading branch information
Me-Phew authored Nov 15, 2024
2 parents d13c3fb + 6c33803 commit 27dd544
Show file tree
Hide file tree
Showing 17 changed files with 291 additions and 33 deletions.
25 changes: 15 additions & 10 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -24,25 +26,28 @@ jobs:
- name: Install Node dependencies
run: npm install

- name: Bump version and push tag
if: github.ref == 'refs/heads/main'
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
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

- name: Compile project for Linux using CMake
run: cmake --preset linux-release && cmake --build --preset linux-release-build

- name: Run tests
run: cd ./build/linux-release && ctest -C Debug -T test --output-on-failure

- name: Compile project for Windows using CMake
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'
id: tag_version
uses: mathieudutour/github-tag-action@v6.2
with:
github_token: ${{ secrets.GITHUB_TOKEN }}

- name: Prepare build artifacts
run: |
cp ./build/linux-release/${{ env.PROJECT_NAME }} ./${{ env.PROJECT_NAME }}-${{ steps.tag_version.outputs.new_tag }}-linux-x64
Expand Down
4 changes: 4 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[submodule "extern/googletest"]
path = extern/googletest
url = https://github.com/google/googletest.git
branch = v1.15.x
34 changes: 31 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,44 @@
cmake_minimum_required(VERSION 3.10)
cmake_minimum_required(VERSION 3.14)

project(MergeSort)

include_directories(src/app src/merge_sorter)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(SOURCES src/main.cpp src/app/app.cpp src/merge_sorter/merge_sorter.cpp)
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
src/utils/random_number_generator/random_number_generator.cpp
)

add_executable(MergeSort ${SOURCES})
target_link_libraries(MergeSort PRIVATE merge_sorter)

# Compile with all warnings, treat warnings as errors
if (MSVC)
add_compile_options(/W4 /WX)
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)

option(PACKAGE_TESTS "Build the tests" ON)
if(PACKAGE_TESTS)
enable_testing()
include(GoogleTest)
add_subdirectory(tests)
endif()
6 changes: 3 additions & 3 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -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"
}
},
Expand Down
1 change: 1 addition & 0 deletions extern/googletest
Submodule googletest added at b514bd
8 changes: 2 additions & 6 deletions lefthook.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
pre-commit:
commands:
build:
run: npm run build

generate-docs:
root: /
run: doxygen && ./docs/doxygen/latex/make.bat
test:
run: npm run test

commit-msg:
commands:
Expand Down
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
"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)\""
},
"devDependencies": {
Expand Down
48 changes: 38 additions & 10 deletions src/app/app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@

#include "app.hpp"
#include "../merge_sorter/merge_sorter.hpp"
#include <array_utils/array_utils.hpp>
#include <random_number_generator/random_number_generator.hpp>

std::istream& operator>>(std::istream& iStream, MenuOption& menuOption) {
int num;
Expand All @@ -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: ";

Expand All @@ -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;
Expand Down Expand Up @@ -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() {
Expand Down
9 changes: 9 additions & 0 deletions src/app/app.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ enum MenuOption {
INSERT_ITEM = 1,

DISPLAY_ARRAY,
GENERATE_RANDOM_ARRAY,
SHUFFLE_ARRAY,
REVERSE_ARRAY,
SORT_ARRAY,
CLEAR_ARRAY,

Expand Down Expand Up @@ -50,6 +53,12 @@ class App {

static void handleDisplayArray();

static void handleGenerateRandomArray();

static void handleShuffleArray();

static void handleReverseArray();

static void handleClearArray();

static void handleSortArray();
Expand Down
10 changes: 10 additions & 0 deletions src/merge_sorter/merge_sorter.hpp
Original file line number Diff line number Diff line change
@@ -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

Expand Down
46 changes: 46 additions & 0 deletions src/utils/array_utils/array_utils.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @file array_utils.cpp
* @author Mateusz Basiaga (basmateusz@wp.pl)
* @brief
* @date 2024-11-14
*
* @copyright Copyright (c) 2024
*
*/

#include <vector>
#include <random>
#include <algorithm>
#include <iostream>

void displayArray(std::vector<int> 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<int>& arr) {
std::random_device randomDevice;
std::mt19937 generator(randomDevice());

std::shuffle(arr.begin(), arr.end(), generator);
}

void reverseArray(std::vector<int>& 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;
}
}
22 changes: 22 additions & 0 deletions src/utils/array_utils/array_utils.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/**
* @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

#include <vector>

void displayArray(std::vector<int>);

void randomlyShuffleArray(std::vector<int>&);

void reverseArray(std::vector<int>&);

#endif /* ARRAY_UTILS_HPP */
30 changes: 30 additions & 0 deletions src/utils/random_number_generator/random_number_generator.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/**
* @file random_number_generator.cpp
* @author Mateusz Basiaga (basmateusz@wp.pl)
* @brief
* @date 2024-11-14
*
* @copyright Copyright (c) 2024
*
*/

#include<cstdlib>
#include<ctime>

#include <random_number_generator/random_number_generator.hpp>

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;
}
25 changes: 25 additions & 0 deletions src/utils/random_number_generator/random_number_generator.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/**
* @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

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 */
Loading

0 comments on commit 27dd544

Please sign in to comment.