From a0cc91a10a99f33c19a0a1ed43ad1a87bbdc41ae Mon Sep 17 00:00:00 2001 From: Bartosz Rybarczyk Date: Fri, 28 Aug 2026 22:44:37 +0200 Subject: [PATCH 1/3] Implement ArithmeticAverage function Link TBB library in CMakeLists to enable std::execution policies. --- homework/inner-product/CMakeLists.txt | 4 ++-- homework/inner-product/arithmeticAverage.cpp | 15 +++++++++++++ homework/inner-product/arithmeticAverage.hpp | 5 +++++ homework/inner-product/main.cpp | 4 ++++ homework/inner-product/test.cpp | 22 ++++++++++---------- 5 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 homework/inner-product/arithmeticAverage.cpp create mode 100644 homework/inner-product/arithmeticAverage.hpp create mode 100644 homework/inner-product/main.cpp diff --git a/homework/inner-product/CMakeLists.txt b/homework/inner-product/CMakeLists.txt index 29883dae0..436e17fd0 100644 --- a/homework/inner-product/CMakeLists.txt +++ b/homework/inner-product/CMakeLists.txt @@ -20,8 +20,8 @@ enable_testing() add_executable(${PROJECT_NAME} main.cpp arithmeticAverage.cpp) add_executable(${PROJECT_NAME}-ut test.cpp arithmeticAverage.cpp) - -target_link_libraries(${PROJECT_NAME}-ut gtest_main) +target_link_libraries(${PROJECT_NAME} tbb) +target_link_libraries(${PROJECT_NAME}-ut gtest_main tbb) include(GoogleTest) gtest_discover_tests(${PROJECT_NAME}-ut) diff --git a/homework/inner-product/arithmeticAverage.cpp b/homework/inner-product/arithmeticAverage.cpp new file mode 100644 index 000000000..561a39963 --- /dev/null +++ b/homework/inner-product/arithmeticAverage.cpp @@ -0,0 +1,15 @@ +#include "arithmeticAverage.hpp" +#include +#include + +double ArithmeticAverage(const std::vector& numbersA, const std::vector& numbersB) { + double sum = std::transform_reduce(std::execution::unseq, + begin(numbersA), + end(numbersA), + begin(numbersB), + 0, + std::plus(), + std::plus()); + + return sum / (numbersA.size() + numbersB.size()); +} \ No newline at end of file diff --git a/homework/inner-product/arithmeticAverage.hpp b/homework/inner-product/arithmeticAverage.hpp new file mode 100644 index 000000000..81c6a2cf2 --- /dev/null +++ b/homework/inner-product/arithmeticAverage.hpp @@ -0,0 +1,5 @@ +#pragma once +#include + +double ArithmeticAverage(const std::vector&, const std::vector&); +double Distance(const std::vector&, const std::vector&); \ No newline at end of file diff --git a/homework/inner-product/main.cpp b/homework/inner-product/main.cpp new file mode 100644 index 000000000..5aa117424 --- /dev/null +++ b/homework/inner-product/main.cpp @@ -0,0 +1,4 @@ +int main() +{ + +} \ No newline at end of file diff --git a/homework/inner-product/test.cpp b/homework/inner-product/test.cpp index fdbcafe04..71e3dbd5b 100644 --- a/homework/inner-product/test.cpp +++ b/homework/inner-product/test.cpp @@ -12,15 +12,15 @@ TEST(arithmeticAverageTest, ShouldCalculateArithmeticAverage) { // Write more test case } -TEST(arithmeticAverageTest, ShouldCalculateDistance) { - std::vector first{7, 4, 3}; - std::vector second{17, 6, 2}; - double expected = 10.247; - EXPECT_NEAR(Distance(first, second), expected, epsilon); +// TEST(arithmeticAverageTest, ShouldCalculateDistance) { +// std::vector first{7, 4, 3}; +// std::vector second{17, 6, 2}; +// double expected = 10.247; +// EXPECT_NEAR(Distance(first, second), expected, epsilon); - first = {7, 4, 3, 13}; - second = {17, 6, 2, -2}; - expected = 18.16590212458495; - EXPECT_NEAR(Distance(first, second), expected, 0.00001); - // Write more test case -} +// first = {7, 4, 3, 13}; +// second = {17, 6, 2, -2}; +// expected = 18.16590212458495; +// EXPECT_NEAR(Distance(first, second), expected, 0.00001); +// // Write more test case +// } From 6edbfed9112c449d3958e288a9baa0e2a88d4619 Mon Sep 17 00:00:00 2001 From: Bartosz Rybarczyk Date: Fri, 28 Aug 2026 23:02:09 +0200 Subject: [PATCH 2/3] Implement Distance function Calculate Euclidean distance in n-dimensions --- homework/inner-product/arithmeticAverage.cpp | 26 ++++++++++++++------ homework/inner-product/test.cpp | 22 ++++++++--------- 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/homework/inner-product/arithmeticAverage.cpp b/homework/inner-product/arithmeticAverage.cpp index 561a39963..a7839e9c1 100644 --- a/homework/inner-product/arithmeticAverage.cpp +++ b/homework/inner-product/arithmeticAverage.cpp @@ -1,15 +1,27 @@ #include "arithmeticAverage.hpp" +#include #include #include double ArithmeticAverage(const std::vector& numbersA, const std::vector& numbersB) { - double sum = std::transform_reduce(std::execution::unseq, - begin(numbersA), - end(numbersA), - begin(numbersB), - 0, - std::plus(), - std::plus()); + double sum = std::transform_reduce( + std::execution::unseq, + begin(numbersA), end(numbersA), + begin(numbersB), + 0.0, + std::plus(), + std::plus()); return sum / (numbersA.size() + numbersB.size()); +} + +double Distance(const std::vector& numbersA, const std::vector& numbersB) { + double sumOfSquares = std::transform_reduce( + begin(numbersA), end(numbersA), + begin(numbersB), + 0.0, + std::plus(), + [](const auto first, const auto second) { return (first - second) * (first - second); }); + + return std::sqrt(sumOfSquares); } \ No newline at end of file diff --git a/homework/inner-product/test.cpp b/homework/inner-product/test.cpp index 71e3dbd5b..fdbcafe04 100644 --- a/homework/inner-product/test.cpp +++ b/homework/inner-product/test.cpp @@ -12,15 +12,15 @@ TEST(arithmeticAverageTest, ShouldCalculateArithmeticAverage) { // Write more test case } -// TEST(arithmeticAverageTest, ShouldCalculateDistance) { -// std::vector first{7, 4, 3}; -// std::vector second{17, 6, 2}; -// double expected = 10.247; -// EXPECT_NEAR(Distance(first, second), expected, epsilon); +TEST(arithmeticAverageTest, ShouldCalculateDistance) { + std::vector first{7, 4, 3}; + std::vector second{17, 6, 2}; + double expected = 10.247; + EXPECT_NEAR(Distance(first, second), expected, epsilon); -// first = {7, 4, 3, 13}; -// second = {17, 6, 2, -2}; -// expected = 18.16590212458495; -// EXPECT_NEAR(Distance(first, second), expected, 0.00001); -// // Write more test case -// } + first = {7, 4, 3, 13}; + second = {17, 6, 2, -2}; + expected = 18.16590212458495; + EXPECT_NEAR(Distance(first, second), expected, 0.00001); + // Write more test case +} From c0a868082513c76beadfae0463568374f2a19e2d Mon Sep 17 00:00:00 2001 From: Bartosz Rybarczyk Date: Fri, 28 Aug 2026 23:06:10 +0200 Subject: [PATCH 3/3] Remove ttb due to complie errors --- homework/inner-product/CMakeLists.txt | 3 +-- homework/inner-product/arithmeticAverage.cpp | 2 -- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/homework/inner-product/CMakeLists.txt b/homework/inner-product/CMakeLists.txt index 436e17fd0..dc2f36e0e 100644 --- a/homework/inner-product/CMakeLists.txt +++ b/homework/inner-product/CMakeLists.txt @@ -20,8 +20,7 @@ enable_testing() add_executable(${PROJECT_NAME} main.cpp arithmeticAverage.cpp) add_executable(${PROJECT_NAME}-ut test.cpp arithmeticAverage.cpp) -target_link_libraries(${PROJECT_NAME} tbb) -target_link_libraries(${PROJECT_NAME}-ut gtest_main tbb) +target_link_libraries(${PROJECT_NAME}-ut gtest_main) include(GoogleTest) gtest_discover_tests(${PROJECT_NAME}-ut) diff --git a/homework/inner-product/arithmeticAverage.cpp b/homework/inner-product/arithmeticAverage.cpp index a7839e9c1..f964ccc09 100644 --- a/homework/inner-product/arithmeticAverage.cpp +++ b/homework/inner-product/arithmeticAverage.cpp @@ -1,11 +1,9 @@ #include "arithmeticAverage.hpp" #include -#include #include double ArithmeticAverage(const std::vector& numbersA, const std::vector& numbersB) { double sum = std::transform_reduce( - std::execution::unseq, begin(numbersA), end(numbersA), begin(numbersB), 0.0,