From 0dcd7e44b314358df25d3eae93fc34f98c74fd70 Mon Sep 17 00:00:00 2001 From: Christoph Lehmann <christoph.lehmann@ufz.de> Date: Wed, 7 Feb 2024 11:33:25 +0100 Subject: [PATCH] [T] Added unit tests --- Tests/CMakeLists.txt | 7 ++ Tests/ProcessLib/Graph/TestGet.cpp | 155 +++++++++++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 Tests/ProcessLib/Graph/TestGet.cpp diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 37424555842..366bef26927 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -59,6 +59,8 @@ if(NOT OGS_BUILD_WHEEL) endif() endif() +append_source_files(TEST_SOURCES ProcessLib/Graph) + if(OGS_BUILD_GUI) append_source_files(TEST_SOURCES FileIO_Qt) endif() @@ -82,6 +84,11 @@ endif() ogs_add_executable(testrunner ${TEST_SOURCES}) +target_sources(testrunner + PRIVATE + ProcessLib/Graph/TestGet.cpp +) + target_link_libraries( testrunner PRIVATE $<$<NOT:$<BOOL:${OGS_BUILD_WHEEL}>>:ApplicationsLib> diff --git a/Tests/ProcessLib/Graph/TestGet.cpp b/Tests/ProcessLib/Graph/TestGet.cpp new file mode 100644 index 00000000000..344fadb644c --- /dev/null +++ b/Tests/ProcessLib/Graph/TestGet.cpp @@ -0,0 +1,155 @@ +/** + * \file + * \copyright + * Copyright (c) 2012-2024, OpenGeoSys Community (http://www.opengeosys.org) + * Distributed under a Modified BSD License. + * See accompanying file LICENSE.txt or + * http://www.opengeosys.org/project/license + * + */ + +#include <gtest/gtest.h> + +#include "BaseLib/StrongType.h" +#include "ProcessLib/Graph/Get.h" + +TEST(ProcessLib_Graph_Get, ReadSingleTuple) +{ + namespace PG = ProcessLib::Graph; + std::tuple<char, double, int> const t{'a', 5.5, 3}; + + // check same values + EXPECT_EQ('a', PG::get<char>(t)); + EXPECT_EQ(5.5, PG::get<double>(t)); + EXPECT_EQ(3, PG::get<int>(t)); + + // check same addresses + EXPECT_EQ(&std::get<char>(t), &PG::get<char>(t)); + EXPECT_EQ(&std::get<double>(t), &PG::get<double>(t)); + EXPECT_EQ(&std::get<int>(t), &PG::get<int>(t)); +} + +TEST(ProcessLib_Graph_Get, WriteSingleTuple) +{ + namespace PG = ProcessLib::Graph; + std::tuple<char, double, int> t{'a', 5.5, 3}; + + PG::get<char>(t) = 'b'; + PG::get<double>(t) = 6.25; + PG::get<int>(t) = 5; + + // check with std::get + EXPECT_EQ('b', std::get<char>(t)); + EXPECT_EQ(6.25, std::get<double>(t)); + EXPECT_EQ(5, std::get<int>(t)); +} + +TEST(ProcessLib_Graph_Get, ReadTwoTuples) +{ + namespace PG = ProcessLib::Graph; + + using S1 = BaseLib::StrongType<int, struct S1Tag>; + using S2 = BaseLib::StrongType<double, struct S2Tag>; + + std::tuple<char, S1> const t1{'a', 2}; + std::tuple<S2, int> const t2{5.5, 4}; + + // check same values + EXPECT_EQ('a', PG::get<char>(t1, t2)); + EXPECT_EQ(2, *PG::get<S1>(t1, t2)); + EXPECT_EQ(5.5, *PG::get<S2>(t1, t2)); + EXPECT_EQ(4, PG::get<int>(t1, t2)); + + // order does not matter + EXPECT_EQ('a', PG::get<char>(t2, t1)); + EXPECT_EQ(2, *PG::get<S1>(t2, t1)); + EXPECT_EQ(5.5, *PG::get<S2>(t2, t1)); + EXPECT_EQ(4, PG::get<int>(t2, t1)); + + // check same addresses + EXPECT_EQ(&std::get<char>(t1), &PG::get<char>(t1, t2)); + EXPECT_EQ(&std::get<S1>(t1), &PG::get<S1>(t1, t2)); + EXPECT_EQ(&std::get<S2>(t2), &PG::get<S2>(t1, t2)); + EXPECT_EQ(&std::get<int>(t2), &PG::get<int>(t1, t2)); +} + +TEST(ProcessLib_Graph_Get, WriteTwoTuples) +{ + namespace PG = ProcessLib::Graph; + + using S1 = BaseLib::StrongType<int, struct S1Tag>; + using S2 = BaseLib::StrongType<double, struct S2Tag>; + + std::tuple<char, S1> t1{'a', 2}; + std::tuple<S2, int> t2{5.5, 4}; + + PG::get<char>(t1, t2) = 'c'; + PG::get<S1>(t2, t1) = S1{7}; + PG::get<S2>(t1, t2) = S2{6.5}; + PG::get<int>(t2, t1) = 9; + + // check with std::get + EXPECT_EQ('c', std::get<char>(t1)); + EXPECT_EQ(7, *std::get<S1>(t1)); + EXPECT_EQ(6.5, *std::get<S2>(t2)); + EXPECT_EQ(9, std::get<int>(t2)); +} + +TEST(ProcessLib_Graph_Get, ReadMultipleTuples) +{ + namespace PG = ProcessLib::Graph; + + using S1 = BaseLib::StrongType<int, struct S1Tag>; + using S2 = BaseLib::StrongType<double, struct S2Tag>; + using S3 = BaseLib::StrongType<char, struct S3Tag>; + + std::tuple<char, S1> const t1{'a', 2}; + std::tuple<S2> const t2{5.5}; + std::tuple<> const t3; + std::tuple<std::string, S3, int> const t4{"str", 'x', 4}; + + // check same values + EXPECT_EQ('a', PG::get<char>(t1, t2, t3, t4)); + EXPECT_EQ(2, *PG::get<S1>(t3, t1, t2, t4)); + EXPECT_EQ(5.5, *PG::get<S2>(t4, t1, t3, t2)); + EXPECT_EQ(4, PG::get<int>(t1, t4, t3, t2)); + EXPECT_EQ("str", PG::get<std::string>(t3, t4, t1, t2)); + EXPECT_EQ('x', *PG::get<S3>(t4, t3, t1, t2)); + + // check same addresses + EXPECT_EQ(&std::get<char>(t1), &PG::get<char>(t1, t2, t3, t4)); + EXPECT_EQ(&std::get<S1>(t1), &PG::get<S1>(t3, t4, t1, t2)); + EXPECT_EQ(&std::get<S2>(t2), &PG::get<S2>(t1, t3, t2, t4)); + EXPECT_EQ(&std::get<int>(t4), &PG::get<int>(t1, t4, t2, t3)); + EXPECT_EQ(&std::get<S3>(t4), &PG::get<S3>(t2, t4, t1, t3)); + EXPECT_EQ(&std::get<std::string>(t4), + &PG::get<std::string>(t2, t3, t1, t4)); +} + +TEST(ProcessLib_Graph_Get, WriteMultipleTuples) +{ + namespace PG = ProcessLib::Graph; + + using S1 = BaseLib::StrongType<int, struct S1Tag>; + using S2 = BaseLib::StrongType<double, struct S2Tag>; + using S3 = BaseLib::StrongType<char, struct S3Tag>; + + std::tuple<char, S1> t1{'a', 2}; + std::tuple<S2> t2{5.5}; + std::tuple<> t3; + std::tuple<std::string, S3, int> t4{"str", 'x', 4}; + + PG::get<char>(t1, t2, t3, t4) = 'c'; + PG::get<S1>(t3, t1, t2, t4) = S1{5}; + PG::get<S2>(t4, t1, t3, t2) = S2{7.5}; + PG::get<int>(t1, t4, t3, t2) = 11; + PG::get<std::string>(t3, t4, t1, t2) = "rts"; + PG::get<S3>(t4, t3, t1, t2) = S3{'y'}; + + EXPECT_EQ('c', std::get<char>(t1)); + EXPECT_EQ(5, *std::get<S1>(t1)); + EXPECT_EQ(7.5, *std::get<S2>(t2)); + EXPECT_EQ(11, std::get<int>(t4)); + EXPECT_EQ("rts", std::get<std::string>(t4)); + EXPECT_EQ('y', *std::get<S3>(t4)); +} -- GitLab