diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d9d5e2..f75d91e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,5 +25,26 @@ add_executable(${PROJECT_NAME} ${SOURCES}) target_link_libraries(${PROJECT_NAME} PRIVATE randomizer_lib) +# Add compiler warnings only for GCC and Clang +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(randomizer_lib PRIVATE + -Wall + -Wextra + -Wshadow + -Wconversion + -Wpedantic + -Werror + ) + target_compile_options(${PROJECT_NAME} PRIVATE + -Wall + -Wextra + -Wshadow + -Wconversion + -Wpedantic + -Werror + ) +endif() + + enable_testing() add_subdirectory(tests) \ No newline at end of file diff --git a/src/prngs/linear_congruential_generator.cpp b/src/prngs/linear_congruential_generator.cpp index 2326522..350165e 100644 --- a/src/prngs/linear_congruential_generator.cpp +++ b/src/prngs/linear_congruential_generator.cpp @@ -84,7 +84,7 @@ double LinearCongruentialGenerator::generateUnitNormalRandomValue() { } // Normalize the random value to [0, 1) - double normalized_value = static_cast(random_value - m_minimum_value) / range; + double normalized_value = static_cast(random_value - m_minimum_value) / static_cast(range); return normalized_value; } diff --git a/src/prngs/prng.cpp b/src/prngs/prng.cpp index f56beff..507e27e 100644 --- a/src/prngs/prng.cpp +++ b/src/prngs/prng.cpp @@ -46,7 +46,8 @@ double PseudoRandomNumberGenerator::generateFloatingPointRandomValue(float min, } int64_t PseudoRandomNumberGenerator::generateIntegerRandomValue(int32_t min, int32_t max) { - int64_t random_val = generateUnitNormalRandomValue(); - int64_t scaled_value = min + (random_val * (max - min)); + double random_val = generateUnitNormalRandomValue(); + double random_val_magnitude = random_val * (max - min); + int64_t scaled_value = static_cast(min + random_val_magnitude); return scaled_value; } \ No newline at end of file diff --git a/src/prngs/xorshift.cpp b/src/prngs/xorshift.cpp index 241f8c3..947fed1 100644 --- a/src/prngs/xorshift.cpp +++ b/src/prngs/xorshift.cpp @@ -48,7 +48,7 @@ double XORShift::generateUnitNormalRandomValue() { } // Normalize the random value to [0, 1) - double normalized_value = static_cast(random_value - m_minimum_value) / range; + double normalized_value = static_cast(random_value - m_minimum_value) / static_cast(range); return normalized_value; } diff --git a/src/runner.cpp b/src/runner.cpp index a899932..6541a04 100644 --- a/src/runner.cpp +++ b/src/runner.cpp @@ -303,7 +303,7 @@ ProgramRunner::ProgramStatus ProgramRunner::iterate() { case ProgramBehaviour::GenerateFloating: { this->iteration++; - float random_float = this->prng->generateFloatingPointRandomValue( + double random_float = this->prng->generateFloatingPointRandomValue( std::get(this->min.value_or(0.0f)), std::get(this->max.value_or(1.0f)) ); @@ -313,7 +313,7 @@ ProgramRunner::ProgramStatus ProgramRunner::iterate() { case ProgramBehaviour::GenerateInteger: { this->iteration++; - int32_t random_int = this->prng->generateIntegerRandomValue( + int64_t random_int = this->prng->generateIntegerRandomValue( std::get(this->min.value_or(0)), std::get(this->max.value_or(1)) ); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 57af17c..a9db20c 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -20,5 +20,16 @@ add_executable(RandomizerTests ${TEST_SOURCES}) # Link to GoogleTest and the library for the randomizer code target_link_libraries(RandomizerTests PRIVATE gtest gtest_main randomizer_lib) +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") + target_compile_options(RandomizerTests PRIVATE + -Wall + -Wextra + -Wshadow + -Wconversion + -Wpedantic + -Werror + ) +endif() + include(GoogleTest) gtest_discover_tests(RandomizerTests)