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