From 49add3cb08e5d2f40a2274ce054a5de8c6b37d6c Mon Sep 17 00:00:00 2001 From: Lucas Stauder <git@lucas-stauder.de> Date: Thu, 14 Nov 2024 09:37:51 +0000 Subject: [PATCH] update for 2024 --- CMakeLists.txt | 56 +++++++++--------- src/array_operations.test.cpp | 35 ++++++------ src/parse_numbers.test.cpp | 92 +++++++++++++++--------------- src/sieve_of_eratosthenes.test.cpp | 46 +++++++-------- src/strequal.test.cpp | 54 +++++++++--------- 5 files changed, 140 insertions(+), 143 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60a80dc..3218950 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,64 +3,62 @@ project(Uebung03) set(CMAKE_CXX_STANDARD 14) -add_library(common OBJECT - src/strequal.c - src/strequal.h +add_executable(Uebung03 + src/main.c src/array_operations.c src/array_operations.h src/parse_numbers.c src/parse_numbers.h src/sieve_of_eratosthenes.c src/sieve_of_eratosthenes.h -) - -add_executable(Uebung03 src/main.c src/strequal.c src/strequal.h - src/array_operations.c - src/array_operations.h - src/parse_numbers.c - src/parse_numbers.h - src/sieve_of_eratosthenes.c - src/sieve_of_eratosthenes.h) +) -# Fetch Catch2 +# Fetch GoogleTest Include(FetchContent) FetchContent_Declare( - Catch2 - GIT_REPOSITORY https://github.com/catchorg/Catch2.git - GIT_TAG v3.4.0 + googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG v1.15.2 ) -FetchContent_MakeAvailable(Catch2) +set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) +FetchContent_MakeAvailable(googletest) + # Build Tests enable_testing() add_executable(test_array_ops - $<TARGET_OBJECTS:common> + src/array_operations.c + src/array_operations.h src/array_operations.test.cpp ) add_executable(test_strequal - $<TARGET_OBJECTS:common> + src/strequal.c + src/strequal.h src/strequal.test.cpp ) add_executable(test_parse_numbers - $<TARGET_OBJECTS:common> + src/parse_numbers.c + src/parse_numbers.h src/parse_numbers.test.cpp ) add_executable(test_sieve - $<TARGET_OBJECTS:common> + src/sieve_of_eratosthenes.c + src/sieve_of_eratosthenes.h src/sieve_of_eratosthenes.test.cpp ) -target_link_libraries(test_array_ops PRIVATE Catch2::Catch2WithMain) -target_link_libraries(test_strequal PRIVATE Catch2::Catch2WithMain) -target_link_libraries(test_parse_numbers PRIVATE Catch2::Catch2WithMain) -target_link_libraries(test_sieve PRIVATE Catch2::Catch2WithMain) +target_link_libraries(test_array_ops PRIVATE GTest::gtest_main) +target_link_libraries(test_strequal PRIVATE GTest::gtest_main) +target_link_libraries(test_parse_numbers PRIVATE GTest::gtest_main) +target_link_libraries(test_sieve PRIVATE GTest::gtest_main) target_include_directories(test_array_ops PRIVATE src/) target_include_directories(test_strequal PRIVATE src/) target_include_directories(test_parse_numbers PRIVATE src/) target_include_directories(test_sieve PRIVATE src/) -add_test(test_array_ops env CTEST_OUTPUT_ON_FAILURE=1 ./test_array_ops) -add_test(test_strequal env CTEST_OUTPUT_ON_FAILURE=1 ./test_strequal) -add_test(test_parse_numbers env CTEST_OUTPUT_ON_FAILURE=1 ./test_parse_numbers) -add_test(test_sieve env CTEST_OUTPUT_ON_FAILURE=1 ./test_sieve) +include(GoogleTest) +gtest_discover_tests(test_array_ops) +gtest_discover_tests(test_strequal) +gtest_discover_tests(test_parse_numbers) +gtest_discover_tests(test_sieve) diff --git a/src/array_operations.test.cpp b/src/array_operations.test.cpp index 7d51830..982c137 100644 --- a/src/array_operations.test.cpp +++ b/src/array_operations.test.cpp @@ -1,61 +1,60 @@ extern "C" { #include "array_operations.h" } -#include <catch2/benchmark/catch_benchmark.hpp> -#include <catch2/catch_test_macros.hpp> +#include <gtest/gtest.h> -TEST_CASE("find_min_max") { +TEST(array_operations, findMinMax) { int minidx = -1; int maxidx = -1; const int testArray1[] = {9, 0, 2, 3}; findMinMax(&minidx, &maxidx, testArray1, 4); - REQUIRE(minidx == 1); - REQUIRE(maxidx == 0); + EXPECT_EQ(minidx, 1); + EXPECT_EQ(maxidx, 0); minidx = -1; maxidx = -1; const int testArray2[] = {9, 12, 2, 3}; findMinMax(&minidx, &maxidx, testArray2, 4); - REQUIRE(minidx == 2); - REQUIRE(maxidx == 1); + EXPECT_EQ(minidx, 2); + EXPECT_EQ(maxidx, 1); minidx = -1; maxidx = -1; const int testArray3[] = {0, 12, 2, 3}; findMinMax(&minidx, &maxidx, testArray3, 4); - REQUIRE(minidx == 0); - REQUIRE(maxidx == 1); + EXPECT_EQ(minidx, 0); + EXPECT_EQ(maxidx, 1); minidx = -1; maxidx = -1; const int testArray4[] = {0, 12, 2, -2}; findMinMax(&minidx, &maxidx, testArray4, 4); - REQUIRE(minidx == 3); - REQUIRE(maxidx == 1); + EXPECT_EQ(minidx, 3); + EXPECT_EQ(maxidx, 1); minidx = -1; maxidx = -1; const int testArray5[] = {9, -2, 2, -2}; findMinMax(&minidx, &maxidx, testArray5, 4); - REQUIRE(minidx == 1); - REQUIRE(maxidx == 0); + EXPECT_EQ(minidx, 1); + EXPECT_EQ(maxidx, 0); minidx = -1; maxidx = -1; const int testArray6[] = {0, 12, 2, 22}; findMinMax(&minidx, &maxidx, testArray6, 4); - REQUIRE(minidx == 0); - REQUIRE(maxidx == 3); + EXPECT_EQ(minidx, 0); + EXPECT_EQ(maxidx, 3); } -TEST_CASE("limit") { +TEST(array_operations, limit) { int testArray[] = {9, 0, -12, 18, -18}; const int result[] = {9, 0, -10, 10, -10}; limit(testArray, 5, 10); for (int i = 0; i < 5; ++i) { - CHECK(testArray[i] == result[i]); + EXPECT_EQ(testArray[i], result[i]); } -} \ No newline at end of file +} diff --git a/src/parse_numbers.test.cpp b/src/parse_numbers.test.cpp index 956cfcb..7186b15 100644 --- a/src/parse_numbers.test.cpp +++ b/src/parse_numbers.test.cpp @@ -1,82 +1,82 @@ extern "C" { #include "parse_numbers.h" } -#include <catch2/catch_test_macros.hpp> +#include <gtest/gtest.h> -TEST_CASE("valid_numbers") { +TEST(parse_uint, valid_numbers) { uint32_t parsed = 42; - REQUIRE(parse_uint(&parsed, "0")); - CHECK(parsed == 0); + EXPECT_TRUE(parse_uint(&parsed, "0")); + EXPECT_EQ(parsed, 0); parsed = 42; - REQUIRE(parse_uint(&parsed, "0000")); - CHECK(parsed == 0); + EXPECT_TRUE(parse_uint(&parsed, "0000")); + EXPECT_EQ(parsed, 0); - REQUIRE(parse_uint(&parsed, "1")); - CHECK(parsed == 1); + EXPECT_TRUE(parse_uint(&parsed, "1")); + EXPECT_EQ(parsed, 1); - REQUIRE(parse_uint(&parsed, "10")); - CHECK(parsed == 10); + EXPECT_TRUE(parse_uint(&parsed, "10")); + EXPECT_EQ(parsed, 10); - REQUIRE(parse_uint(&parsed, "19")); - CHECK(parsed == 19); + EXPECT_TRUE(parse_uint(&parsed, "19")); + EXPECT_EQ(parsed, 19); - REQUIRE(parse_uint(&parsed, "0342520")); - CHECK(parsed == 342520); + EXPECT_TRUE(parse_uint(&parsed, "0342520")); + EXPECT_EQ(parsed, 342520); parsed = 0; - REQUIRE(parse_uint(&parsed, "342520")); - CHECK(parsed == 342520); + EXPECT_TRUE(parse_uint(&parsed, "342520")); + EXPECT_EQ(parsed, 342520); - REQUIRE(parse_uint(&parsed, "4294967295")); - CHECK(parsed == 4294967295); + EXPECT_TRUE(parse_uint(&parsed, "4294967295")); + EXPECT_EQ(parsed, 4294967295); parsed = 0; - REQUIRE(parse_uint(&parsed, "0004294967295")); - CHECK(parsed == 4294967295); + EXPECT_TRUE(parse_uint(&parsed, "0004294967295")); + EXPECT_EQ(parsed, 4294967295); } -TEST_CASE("invalid_chars_in_number") { +TEST(parse_uint, invalid_numbers) { uint32_t parsed = 42; - REQUIRE_FALSE(parse_uint(&parsed, "")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, " 0")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, " 0")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "-12")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "-12")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, " 12")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, " 12")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "12 ")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "12 ")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "23 212")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "23 212")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "235$")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "235$")); + EXPECT_EQ(parsed, 42); } -TEST_CASE("too_large_numbers") { +TEST(parse_uint, overflow) { uint32_t parsed = 42; - REQUIRE_FALSE(parse_uint(&parsed, "10000000000000")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "10000000000000")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "10000000000")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "10000000000")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "4294967296")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "4294967296")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "04294967296")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "04294967296")); + EXPECT_EQ(parsed, 42); - REQUIRE_FALSE(parse_uint(&parsed, "18446744073709551617")); - CHECK(parsed == 42); + EXPECT_FALSE(parse_uint(&parsed, "18446744073709551617")); + EXPECT_EQ(parsed, 42); } diff --git a/src/sieve_of_eratosthenes.test.cpp b/src/sieve_of_eratosthenes.test.cpp index 1728e8e..0abe5b6 100644 --- a/src/sieve_of_eratosthenes.test.cpp +++ b/src/sieve_of_eratosthenes.test.cpp @@ -1,30 +1,30 @@ extern "C" { #include "sieve_of_eratosthenes.h" } -#include <catch2/catch_test_macros.hpp> +#include <gtest/gtest.h> -TEST_CASE("Test_Sieve") { +TEST(sieve_of_eratosthenes, primes) { bool primes[1000]; sieve_of_eratosthenes(primes, 1000); - REQUIRE(primes[2]); - REQUIRE(primes[3]); - REQUIRE(primes[5]); - REQUIRE(primes[11]); - REQUIRE(primes[19]); - REQUIRE(primes[43]); - REQUIRE(primes[53]); - REQUIRE(primes[67]); - REQUIRE(primes[79]); - REQUIRE(primes[97]); - REQUIRE(primes[997]); - REQUIRE(primes[947]); + EXPECT_TRUE(primes[2]); + EXPECT_TRUE(primes[3]); + EXPECT_TRUE(primes[5]); + EXPECT_TRUE(primes[11]); + EXPECT_TRUE(primes[19]); + EXPECT_TRUE(primes[43]); + EXPECT_TRUE(primes[53]); + EXPECT_TRUE(primes[67]); + EXPECT_TRUE(primes[79]); + EXPECT_TRUE(primes[97]); + EXPECT_TRUE(primes[997]); + EXPECT_TRUE(primes[947]); - REQUIRE_FALSE(primes[1]); - REQUIRE_FALSE(primes[4]); - REQUIRE_FALSE(primes[15]); - REQUIRE_FALSE(primes[91]); - REQUIRE_FALSE(primes[42]); - REQUIRE_FALSE(primes[33]); - REQUIRE_FALSE(primes[998]); - REQUIRE_FALSE(primes[999]); -} \ No newline at end of file + EXPECT_FALSE(primes[1]); + EXPECT_FALSE(primes[4]); + EXPECT_FALSE(primes[15]); + EXPECT_FALSE(primes[91]); + EXPECT_FALSE(primes[42]); + EXPECT_FALSE(primes[33]); + EXPECT_FALSE(primes[998]); + EXPECT_FALSE(primes[999]); +} diff --git a/src/strequal.test.cpp b/src/strequal.test.cpp index 3099c47..21d3447 100644 --- a/src/strequal.test.cpp +++ b/src/strequal.test.cpp @@ -1,40 +1,40 @@ extern "C" { #include "strequal.h" } -#include <catch2/catch_test_macros.hpp> +#include <gtest/gtest.h> -TEST_CASE("Strings_equal") { - REQUIRE(strequal("Darmstadt", "Darmstadt")); - REQUIRE(strequal("C ist TOLL", "C ist TOLL")); - REQUIRE(strequal(" C ist TOLL!", " C ist TOLL!")); - REQUIRE(strequal("!\"§$%&", "!\"§$%&")); - REQUIRE(strequal("", "")); +TEST(strequal, Strings_equal) { + EXPECT_TRUE(strequal("Darmstadt", "Darmstadt")); + EXPECT_TRUE(strequal("C ist TOLL", "C ist TOLL")); + EXPECT_TRUE(strequal(" C ist TOLL!", " C ist TOLL!")); + EXPECT_TRUE(strequal("!\"§$%&", "!\"§$%&")); + EXPECT_TRUE(strequal("", "")); } -TEST_CASE("Strings_not_equal") { - REQUIRE_FALSE(strequal("Darmstadt", "DaRmStAdT")); - REQUIRE_FALSE(strequal("C ist TOLL", "c iST toll")); - REQUIRE_FALSE(strequal(" C ist TOLL!", " c iST toll!")); +TEST(strequal, Strings_not_equal) { + EXPECT_FALSE(strequal("Darmstadt", "DaRmStAdT")); + EXPECT_FALSE(strequal("C ist TOLL", "c iST toll")); + EXPECT_FALSE(strequal(" C ist TOLL!", " c iST toll!")); - REQUIRE_FALSE(strequal("Darmstadt", "Berlin")); - REQUIRE_FALSE(strequal("Darmstadt", "Darmstadt ")); - REQUIRE_FALSE(strequal(" ", "")); + EXPECT_FALSE(strequal("Darmstadt", "Berlin")); + EXPECT_FALSE(strequal("Darmstadt", "Darmstadt ")); + EXPECT_FALSE(strequal(" ", "")); } -TEST_CASE("Strings_equal_i") { - REQUIRE(strequal("Darmstadt", "Darmstadt")); - REQUIRE(strequal("C ist TOLL", "C ist TOLL")); - REQUIRE(strequal(" C ist TOLL!", " C ist TOLL!")); - REQUIRE(strequal("!\"§$%&", "!\"§$%&")); +TEST(strequali, Strings_equal_i) { + EXPECT_TRUE(strequal("Darmstadt", "Darmstadt")); + EXPECT_TRUE(strequal("C ist TOLL", "C ist TOLL")); + EXPECT_TRUE(strequal(" C ist TOLL!", " C ist TOLL!")); + EXPECT_TRUE(strequal("!\"§$%&", "!\"§$%&")); - REQUIRE(strequali("Darmstadt", "DaRmStAdT")); - REQUIRE(strequali("C ist TOLL", "c iST toll")); - REQUIRE(strequali(" C ist TOLL!", " c iST toll!")); - REQUIRE(strequali("", "")); + EXPECT_TRUE(strequali("Darmstadt", "DaRmStAdT")); + EXPECT_TRUE(strequali("C ist TOLL", "c iST toll")); + EXPECT_TRUE(strequali(" C ist TOLL!", " c iST toll!")); + EXPECT_TRUE(strequali("", "")); } -TEST_CASE("Strings_not_equal_i") { - REQUIRE_FALSE(strequali("Darmstadt", "Berlin")); - REQUIRE_FALSE(strequali("Darmstadt", "Darmstadt ")); - REQUIRE_FALSE(strequali(" ", "")); +TEST(strequali, Strings_not_equal_i) { + EXPECT_FALSE(strequali("Darmstadt", "Berlin")); + EXPECT_FALSE(strequali("Darmstadt", "Darmstadt ")); + EXPECT_FALSE(strequali(" ", "")); } -- GitLab