Skip to content
Snippets Groups Projects
Commit 49add3cb authored by Stauder, Lucas's avatar Stauder, Lucas
Browse files

update for 2024

parent b66f21d5
No related branches found
No related tags found
No related merge requests found
...@@ -3,64 +3,62 @@ project(Uebung03) ...@@ -3,64 +3,62 @@ project(Uebung03)
set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD 14)
add_library(common OBJECT add_executable(Uebung03
src/strequal.c src/main.c
src/strequal.h
src/array_operations.c src/array_operations.c
src/array_operations.h src/array_operations.h
src/parse_numbers.c src/parse_numbers.c
src/parse_numbers.h src/parse_numbers.h
src/sieve_of_eratosthenes.c src/sieve_of_eratosthenes.c
src/sieve_of_eratosthenes.h src/sieve_of_eratosthenes.h
)
add_executable(Uebung03 src/main.c
src/strequal.c src/strequal.c
src/strequal.h 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) Include(FetchContent)
FetchContent_Declare( FetchContent_Declare(
Catch2 googletest
GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG v3.4.0 GIT_TAG v1.15.2
) )
FetchContent_MakeAvailable(Catch2) set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
FetchContent_MakeAvailable(googletest)
# Build Tests # Build Tests
enable_testing() enable_testing()
add_executable(test_array_ops add_executable(test_array_ops
$<TARGET_OBJECTS:common> src/array_operations.c
src/array_operations.h
src/array_operations.test.cpp src/array_operations.test.cpp
) )
add_executable(test_strequal add_executable(test_strequal
$<TARGET_OBJECTS:common> src/strequal.c
src/strequal.h
src/strequal.test.cpp src/strequal.test.cpp
) )
add_executable(test_parse_numbers add_executable(test_parse_numbers
$<TARGET_OBJECTS:common> src/parse_numbers.c
src/parse_numbers.h
src/parse_numbers.test.cpp src/parse_numbers.test.cpp
) )
add_executable(test_sieve add_executable(test_sieve
$<TARGET_OBJECTS:common> src/sieve_of_eratosthenes.c
src/sieve_of_eratosthenes.h
src/sieve_of_eratosthenes.test.cpp src/sieve_of_eratosthenes.test.cpp
) )
target_link_libraries(test_array_ops PRIVATE Catch2::Catch2WithMain) target_link_libraries(test_array_ops PRIVATE GTest::gtest_main)
target_link_libraries(test_strequal PRIVATE Catch2::Catch2WithMain) target_link_libraries(test_strequal PRIVATE GTest::gtest_main)
target_link_libraries(test_parse_numbers PRIVATE Catch2::Catch2WithMain) target_link_libraries(test_parse_numbers PRIVATE GTest::gtest_main)
target_link_libraries(test_sieve PRIVATE Catch2::Catch2WithMain) target_link_libraries(test_sieve PRIVATE GTest::gtest_main)
target_include_directories(test_array_ops PRIVATE src/) target_include_directories(test_array_ops PRIVATE src/)
target_include_directories(test_strequal PRIVATE src/) target_include_directories(test_strequal PRIVATE src/)
target_include_directories(test_parse_numbers PRIVATE src/) target_include_directories(test_parse_numbers PRIVATE src/)
target_include_directories(test_sieve PRIVATE src/) target_include_directories(test_sieve PRIVATE src/)
add_test(test_array_ops env CTEST_OUTPUT_ON_FAILURE=1 ./test_array_ops) include(GoogleTest)
add_test(test_strequal env CTEST_OUTPUT_ON_FAILURE=1 ./test_strequal) gtest_discover_tests(test_array_ops)
add_test(test_parse_numbers env CTEST_OUTPUT_ON_FAILURE=1 ./test_parse_numbers) gtest_discover_tests(test_strequal)
add_test(test_sieve env CTEST_OUTPUT_ON_FAILURE=1 ./test_sieve) gtest_discover_tests(test_parse_numbers)
gtest_discover_tests(test_sieve)
extern "C" { extern "C" {
#include "array_operations.h" #include "array_operations.h"
} }
#include <catch2/benchmark/catch_benchmark.hpp> #include <gtest/gtest.h>
#include <catch2/catch_test_macros.hpp>
TEST_CASE("find_min_max") { TEST(array_operations, findMinMax) {
int minidx = -1; int minidx = -1;
int maxidx = -1; int maxidx = -1;
const int testArray1[] = {9, 0, 2, 3}; const int testArray1[] = {9, 0, 2, 3};
findMinMax(&minidx, &maxidx, testArray1, 4); findMinMax(&minidx, &maxidx, testArray1, 4);
REQUIRE(minidx == 1); EXPECT_EQ(minidx, 1);
REQUIRE(maxidx == 0); EXPECT_EQ(maxidx, 0);
minidx = -1; minidx = -1;
maxidx = -1; maxidx = -1;
const int testArray2[] = {9, 12, 2, 3}; const int testArray2[] = {9, 12, 2, 3};
findMinMax(&minidx, &maxidx, testArray2, 4); findMinMax(&minidx, &maxidx, testArray2, 4);
REQUIRE(minidx == 2); EXPECT_EQ(minidx, 2);
REQUIRE(maxidx == 1); EXPECT_EQ(maxidx, 1);
minidx = -1; minidx = -1;
maxidx = -1; maxidx = -1;
const int testArray3[] = {0, 12, 2, 3}; const int testArray3[] = {0, 12, 2, 3};
findMinMax(&minidx, &maxidx, testArray3, 4); findMinMax(&minidx, &maxidx, testArray3, 4);
REQUIRE(minidx == 0); EXPECT_EQ(minidx, 0);
REQUIRE(maxidx == 1); EXPECT_EQ(maxidx, 1);
minidx = -1; minidx = -1;
maxidx = -1; maxidx = -1;
const int testArray4[] = {0, 12, 2, -2}; const int testArray4[] = {0, 12, 2, -2};
findMinMax(&minidx, &maxidx, testArray4, 4); findMinMax(&minidx, &maxidx, testArray4, 4);
REQUIRE(minidx == 3); EXPECT_EQ(minidx, 3);
REQUIRE(maxidx == 1); EXPECT_EQ(maxidx, 1);
minidx = -1; minidx = -1;
maxidx = -1; maxidx = -1;
const int testArray5[] = {9, -2, 2, -2}; const int testArray5[] = {9, -2, 2, -2};
findMinMax(&minidx, &maxidx, testArray5, 4); findMinMax(&minidx, &maxidx, testArray5, 4);
REQUIRE(minidx == 1); EXPECT_EQ(minidx, 1);
REQUIRE(maxidx == 0); EXPECT_EQ(maxidx, 0);
minidx = -1; minidx = -1;
maxidx = -1; maxidx = -1;
const int testArray6[] = {0, 12, 2, 22}; const int testArray6[] = {0, 12, 2, 22};
findMinMax(&minidx, &maxidx, testArray6, 4); findMinMax(&minidx, &maxidx, testArray6, 4);
REQUIRE(minidx == 0); EXPECT_EQ(minidx, 0);
REQUIRE(maxidx == 3); EXPECT_EQ(maxidx, 3);
} }
TEST_CASE("limit") { TEST(array_operations, limit) {
int testArray[] = {9, 0, -12, 18, -18}; int testArray[] = {9, 0, -12, 18, -18};
const int result[] = {9, 0, -10, 10, -10}; const int result[] = {9, 0, -10, 10, -10};
limit(testArray, 5, 10); limit(testArray, 5, 10);
for (int i = 0; i < 5; ++i) { for (int i = 0; i < 5; ++i) {
CHECK(testArray[i] == result[i]); EXPECT_EQ(testArray[i], result[i]);
} }
} }
extern "C" { extern "C" {
#include "parse_numbers.h" #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; uint32_t parsed = 42;
REQUIRE(parse_uint(&parsed, "0")); EXPECT_TRUE(parse_uint(&parsed, "0"));
CHECK(parsed == 0); EXPECT_EQ(parsed, 0);
parsed = 42; parsed = 42;
REQUIRE(parse_uint(&parsed, "0000")); EXPECT_TRUE(parse_uint(&parsed, "0000"));
CHECK(parsed == 0); EXPECT_EQ(parsed, 0);
REQUIRE(parse_uint(&parsed, "1")); EXPECT_TRUE(parse_uint(&parsed, "1"));
CHECK(parsed == 1); EXPECT_EQ(parsed, 1);
REQUIRE(parse_uint(&parsed, "10")); EXPECT_TRUE(parse_uint(&parsed, "10"));
CHECK(parsed == 10); EXPECT_EQ(parsed, 10);
REQUIRE(parse_uint(&parsed, "19")); EXPECT_TRUE(parse_uint(&parsed, "19"));
CHECK(parsed == 19); EXPECT_EQ(parsed, 19);
REQUIRE(parse_uint(&parsed, "0342520")); EXPECT_TRUE(parse_uint(&parsed, "0342520"));
CHECK(parsed == 342520); EXPECT_EQ(parsed, 342520);
parsed = 0; parsed = 0;
REQUIRE(parse_uint(&parsed, "342520")); EXPECT_TRUE(parse_uint(&parsed, "342520"));
CHECK(parsed == 342520); EXPECT_EQ(parsed, 342520);
REQUIRE(parse_uint(&parsed, "4294967295")); EXPECT_TRUE(parse_uint(&parsed, "4294967295"));
CHECK(parsed == 4294967295); EXPECT_EQ(parsed, 4294967295);
parsed = 0; parsed = 0;
REQUIRE(parse_uint(&parsed, "0004294967295")); EXPECT_TRUE(parse_uint(&parsed, "0004294967295"));
CHECK(parsed == 4294967295); EXPECT_EQ(parsed, 4294967295);
} }
TEST_CASE("invalid_chars_in_number") { TEST(parse_uint, invalid_numbers) {
uint32_t parsed = 42; uint32_t parsed = 42;
REQUIRE_FALSE(parse_uint(&parsed, "")); EXPECT_FALSE(parse_uint(&parsed, ""));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, " 0")); EXPECT_FALSE(parse_uint(&parsed, " 0"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "-12")); EXPECT_FALSE(parse_uint(&parsed, "-12"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, " 12")); EXPECT_FALSE(parse_uint(&parsed, " 12"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "12 ")); EXPECT_FALSE(parse_uint(&parsed, "12 "));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "23 212")); EXPECT_FALSE(parse_uint(&parsed, "23 212"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "235$")); EXPECT_FALSE(parse_uint(&parsed, "235$"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
} }
TEST_CASE("too_large_numbers") { TEST(parse_uint, overflow) {
uint32_t parsed = 42; uint32_t parsed = 42;
REQUIRE_FALSE(parse_uint(&parsed, "10000000000000")); EXPECT_FALSE(parse_uint(&parsed, "10000000000000"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "10000000000")); EXPECT_FALSE(parse_uint(&parsed, "10000000000"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "4294967296")); EXPECT_FALSE(parse_uint(&parsed, "4294967296"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "04294967296")); EXPECT_FALSE(parse_uint(&parsed, "04294967296"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
REQUIRE_FALSE(parse_uint(&parsed, "18446744073709551617")); EXPECT_FALSE(parse_uint(&parsed, "18446744073709551617"));
CHECK(parsed == 42); EXPECT_EQ(parsed, 42);
} }
extern "C" { extern "C" {
#include "sieve_of_eratosthenes.h" #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]; bool primes[1000];
sieve_of_eratosthenes(primes, 1000); sieve_of_eratosthenes(primes, 1000);
REQUIRE(primes[2]); EXPECT_TRUE(primes[2]);
REQUIRE(primes[3]); EXPECT_TRUE(primes[3]);
REQUIRE(primes[5]); EXPECT_TRUE(primes[5]);
REQUIRE(primes[11]); EXPECT_TRUE(primes[11]);
REQUIRE(primes[19]); EXPECT_TRUE(primes[19]);
REQUIRE(primes[43]); EXPECT_TRUE(primes[43]);
REQUIRE(primes[53]); EXPECT_TRUE(primes[53]);
REQUIRE(primes[67]); EXPECT_TRUE(primes[67]);
REQUIRE(primes[79]); EXPECT_TRUE(primes[79]);
REQUIRE(primes[97]); EXPECT_TRUE(primes[97]);
REQUIRE(primes[997]); EXPECT_TRUE(primes[997]);
REQUIRE(primes[947]); EXPECT_TRUE(primes[947]);
REQUIRE_FALSE(primes[1]); EXPECT_FALSE(primes[1]);
REQUIRE_FALSE(primes[4]); EXPECT_FALSE(primes[4]);
REQUIRE_FALSE(primes[15]); EXPECT_FALSE(primes[15]);
REQUIRE_FALSE(primes[91]); EXPECT_FALSE(primes[91]);
REQUIRE_FALSE(primes[42]); EXPECT_FALSE(primes[42]);
REQUIRE_FALSE(primes[33]); EXPECT_FALSE(primes[33]);
REQUIRE_FALSE(primes[998]); EXPECT_FALSE(primes[998]);
REQUIRE_FALSE(primes[999]); EXPECT_FALSE(primes[999]);
} }
extern "C" { extern "C" {
#include "strequal.h" #include "strequal.h"
} }
#include <catch2/catch_test_macros.hpp> #include <gtest/gtest.h>
TEST_CASE("Strings_equal") { TEST(strequal, Strings_equal) {
REQUIRE(strequal("Darmstadt", "Darmstadt")); EXPECT_TRUE(strequal("Darmstadt", "Darmstadt"));
REQUIRE(strequal("C ist TOLL", "C ist TOLL")); EXPECT_TRUE(strequal("C ist TOLL", "C ist TOLL"));
REQUIRE(strequal(" C ist TOLL!", " C ist TOLL!")); EXPECT_TRUE(strequal(" C ist TOLL!", " C ist TOLL!"));
REQUIRE(strequal("!\"§$%&", "!\"§$%&")); EXPECT_TRUE(strequal("!\"§$%&", "!\"§$%&"));
REQUIRE(strequal("", "")); EXPECT_TRUE(strequal("", ""));
} }
TEST_CASE("Strings_not_equal") { TEST(strequal, Strings_not_equal) {
REQUIRE_FALSE(strequal("Darmstadt", "DaRmStAdT")); EXPECT_FALSE(strequal("Darmstadt", "DaRmStAdT"));
REQUIRE_FALSE(strequal("C ist TOLL", "c iST toll")); EXPECT_FALSE(strequal("C ist TOLL", "c iST toll"));
REQUIRE_FALSE(strequal(" C ist TOLL!", " c iST toll!")); EXPECT_FALSE(strequal(" C ist TOLL!", " c iST toll!"));
REQUIRE_FALSE(strequal("Darmstadt", "Berlin")); EXPECT_FALSE(strequal("Darmstadt", "Berlin"));
REQUIRE_FALSE(strequal("Darmstadt", "Darmstadt ")); EXPECT_FALSE(strequal("Darmstadt", "Darmstadt "));
REQUIRE_FALSE(strequal(" ", "")); EXPECT_FALSE(strequal(" ", ""));
} }
TEST_CASE("Strings_equal_i") { TEST(strequali, Strings_equal_i) {
REQUIRE(strequal("Darmstadt", "Darmstadt")); EXPECT_TRUE(strequal("Darmstadt", "Darmstadt"));
REQUIRE(strequal("C ist TOLL", "C ist TOLL")); EXPECT_TRUE(strequal("C ist TOLL", "C ist TOLL"));
REQUIRE(strequal(" C ist TOLL!", " C ist TOLL!")); EXPECT_TRUE(strequal(" C ist TOLL!", " C ist TOLL!"));
REQUIRE(strequal("!\"§$%&", "!\"§$%&")); EXPECT_TRUE(strequal("!\"§$%&", "!\"§$%&"));
REQUIRE(strequali("Darmstadt", "DaRmStAdT")); EXPECT_TRUE(strequali("Darmstadt", "DaRmStAdT"));
REQUIRE(strequali("C ist TOLL", "c iST toll")); EXPECT_TRUE(strequali("C ist TOLL", "c iST toll"));
REQUIRE(strequali(" C ist TOLL!", " c iST toll!")); EXPECT_TRUE(strequali(" C ist TOLL!", " c iST toll!"));
REQUIRE(strequali("", "")); EXPECT_TRUE(strequali("", ""));
} }
TEST_CASE("Strings_not_equal_i") { TEST(strequali, Strings_not_equal_i) {
REQUIRE_FALSE(strequali("Darmstadt", "Berlin")); EXPECT_FALSE(strequali("Darmstadt", "Berlin"));
REQUIRE_FALSE(strequali("Darmstadt", "Darmstadt ")); EXPECT_FALSE(strequali("Darmstadt", "Darmstadt "));
REQUIRE_FALSE(strequali(" ", "")); EXPECT_FALSE(strequali(" ", ""));
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment