From acbc42e3e6e21260ac2d597e9d4c88bd9dd1cc0f Mon Sep 17 00:00:00 2001 From: kai Date: Sat, 29 Mar 2025 14:52:12 +0100 Subject: [PATCH] add all methods + tests --- lab02/fib/src/compute.cpp | 2 + lab02/fib/src/compute2.cpp | 25 ++++++++++++ lab02/fib/src/computeNew.cpp | 22 +++++++++++ lab02/fib/src/test_stuff.cc | 73 ++++++++++++++++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 lab02/fib/src/compute2.cpp create mode 100644 lab02/fib/src/computeNew.cpp diff --git a/lab02/fib/src/compute.cpp b/lab02/fib/src/compute.cpp index 1127181..70b482c 100644 --- a/lab02/fib/src/compute.cpp +++ b/lab02/fib/src/compute.cpp @@ -3,6 +3,7 @@ #include #include #include +#include int fib(int n) { if (n < 2) @@ -44,3 +45,4 @@ Matrix compute(const Matrix &s, const std::vector &v) { } return m; } + diff --git a/lab02/fib/src/compute2.cpp b/lab02/fib/src/compute2.cpp new file mode 100644 index 0000000..eabd5a4 --- /dev/null +++ b/lab02/fib/src/compute2.cpp @@ -0,0 +1,25 @@ +#include "matrix.h" +#include +#include +#include + +int fib2(int i) { +if (i == 0) { +return 0; +} else if (i == 1) { +return 1; +} else { +return fib2(i - 1) + fib2(i - 2); +} +} +Matrix compute2(const Matrix& s, const std::vector& v) { +Matrix m(s.dim()); +const int n = v.size(); +for (int j = 0; j < n; ++j) { +for (int i = 0; i < n; ++i) { +double val = static_cast(fib2(v[j] % 256)); +m(j, i) = s(j, i) * (sin(val) * tan(val) / sqrt(cos(val) + 2)); +} +} +return m; +} diff --git a/lab02/fib/src/computeNew.cpp b/lab02/fib/src/computeNew.cpp new file mode 100644 index 0000000..63c24c1 --- /dev/null +++ b/lab02/fib/src/computeNew.cpp @@ -0,0 +1,22 @@ +#include "matrix.h" +#include +#include +#include +#include + +constexpr std::array lookupTable = { + 0.0, 0.8222403186860677, 0.8222403186860677, -1.5787300242524172, -0.020016262234217718, 2.1451183132222993, -4.940042066178768, 0.11409507657148513, -1.0604830926169537, -0.3074259803136817, 31.766208383302768, 0.9151534216757803, 0.16333595403676757, 0.16949512185916804, 4.5543599070187406e-05, 0.1757957713418539, 0.18224021532829443, 1.0206149092922863, -17.814542276286655, -0.20918076066994673, -1.6213971271904437, 0.3168557058165431, 2.298722897010151, 0.23686197492476985, -2.086362829745931, -0.3881868942002799, -2.461117527398634, 0.2808435566118653, 1.5819909021264011, 0.18830714860806283, -3.9783311640939956, -0.7223836412497261, -0.8639724628881527, 0.0027677492169528905, -1.0303485832123693, -1.230575195462486, -1.45754407514109, 0.0023462043707461705, -1.7453680716455173, -2.1290409071270853, -0.5251182747080108, 0.16466950650652515, -0.04385364901718776, -0.09269399902874279, 0.0052966445389224254, -0.15938094474318504, -0.2440476196026588, 0.6058083982842931, -4.095160159163112, 0.5228302544273172, -0.2944149703898431, -0.0914706601652273, 0.0343847919919084, -0.00374146357960608, -0.03269530501366555, 0.008326304813702903, -0.08998858152591463, -0.1753231596613382, 0.35059963365479513, -1.582851175470022, 2.093789103171035, -0.0181535233234956, -4.548501978245147, 29.55052845809529, 0.01936746685187523, 3.1521208201441255, 1.4657757926693418, -0.35010475431933086, -0.34162920251204093, 2.9770086129136403e-05, -0.33326757588611455, -0.325018905514724, 1.3297039478954402, 4.2812466550630734, 0.040135899514659124, -6.823980420549866, -1.896232407731212, -0.22067093110457817, 0.362095020184007, -0.5492657903414403, -8.263813069231747e-05, 0.3839613240456214, 0.005732116510943663, 1.0068069901920167, -0.06661408684607055, 0.16505937587347172, -0.10618985842084362, -0.1548539438950448, 0.35134836733238417, -1.9850782320522917, 2.3201973898487434, -0.8614531626702128, 0.6680745565561412, -0.00044550347885444647, -0.39763818064051737, 0.7578655614877392, 0.6072237200360099, 0.003178329575514224, -1.212826954378079, -1.4769326433996612, -172.52806598178202, -0.5347454349381718, -19.190923961699053, -0.7917514182651304, 0.2819302722074698, 0.05458474508581716, 0.019872869052966566, 0.008222147618604445, 0.09756055641361473, 0.7227958766703475, -1.4410095077924745, -9.972144169933975, 0.77699771545969, -4.53513322683293, -0.18352603012839258, 0.0017072712007560583, -0.23257515516939736, -0.10763881722478827, 0.884626439996002, -0.4810037394118251, -1.369797203450087, -0.5288521774897473, -2.9101872323475186, 0.22727177754107092, -0.34542092073980846, -1.8050778597271122, -2.619459073093681, 0.20132946664538756, 0.26819837253349504, 1.762278187625015, -0.011986063261174138, 0.24469190367516808, 1.0086060475978966, -3.165218395481177, 4.189103518135543, -2.5760814095593942, -0.013859290579366626, 1.4352697196307378, -1.2608389085452532, -4.198328999769481, 0.1439300331481971, 0.34262172197897917, 0.0168015128985714, 0.18580678551855231, 1.4365641854331133, -4.79841926852741, -3.4019533078572475, -0.01590191501468279, 1.759259558519459, -1.0228945308454913, 0.29676927098386374, -0.09248853701134174, -0.8115494202333414, 0.21410452959908136, -6.956781842218232, 1.0938240947751094, 8.314261325910216, 0.09374743357102927, 0.07071517812352679, -3.4713782052240494, 0.051182474782728866, -1.2962746253140673, 2.204810869689383, 0.42653001839592647, 0.15888109869643205, -2.2502390908963252, -0.5636032756994527, 0.0012139954702342257, -161.44964948195522, 0.0022234794467720603, -0.002981746927564041, -0.013589893337736567, -0.02176301438843992, 0.041053147217568434, -0.2535229180317107, -0.33498174636117795, 1.0769953736629612, 6.899966717364552, 0.0827438107746741, 0.07067578121842849, 7.848050576848035, -2.7861390728504825, 0.0013635934995610396, -1.153162937055766, -6.3915800646950816, -0.031171002889077308, 0.27503561575602464, -0.694782893937455, -0.2045488357018786, -1.3814287827861556, 0.2639397999144297, -1.6283372950295938, 0.03857424446734361, 0.3272148908804416, 0.21928953507794532, 1.2939133941195287, -0.26723965240335223, 0.0777139485862296, -1.37710795567683, -2.1373511044382387, -0.42382559169444095, 0.21966996134691846, 1.5086628407480521e-05, 0.22392450662682784, 0.12739930332047994, 1.511939818848616, 3.1675580990874033, -0.33854805156070844, -3.193060131852421, 0.08157921242282763, 0.005207776703273675, -1.644268309315312, -0.4910608493321238, 0.12568653862630152, -1.1324160197145394, -0.042293254578116724, 0.3565189224930081, 0.8199298840209298, 2.9100467396337413, 0.14328425483708107, -2.7351863856444307, -0.3118936323791283, -2.3652167108089786, 0.3364739591631545, 0.00601840488067479, 11.828244785427081, 0.1124143840824127, 1.0545971966119048, 0.2759813103079656, -0.23352307906228556, -1.5576719903385443, -13.76407981937769, 0.08754583137498555, 1.810930803449213, 0.5382555408863076, -0.002576694765818232, -0.8612366710787147, -0.07277140430056403, 0.26460751353648865, 0.057583427346797084, -6.1626683426032765, -0.16257003129521286, -5.460375467613629, -2.6137508557003617, 0.7780098599544784, 1.2899685286178642, -1.1290019883416802, -0.0969477560271896, 2.6188550083461326, 9.939111102377229, -1.8964522816616587, -6.9572063958158665, -0.21874194287663265, 0.8151204126824054, -0.2744708906370598, -0.0006656271583815087}; + +Matrix computeNew(const Matrix &s, const std::vector &v) +{ + Matrix m(s.dim()); + const int n = v.size(); + for (int j = 0; j < n; ++j) + { + for (int i = 0; i < n; ++i) + { + m(j, i) = s(j, i) * lookupTable[v[j] % 256]; + } + } + return m; +} diff --git a/lab02/fib/src/test_stuff.cc b/lab02/fib/src/test_stuff.cc index 72362f2..163fbff 100644 --- a/lab02/fib/src/test_stuff.cc +++ b/lab02/fib/src/test_stuff.cc @@ -1,6 +1,8 @@ #include #include "matrix.h" #include "compute.cpp" +#include "compute2.cpp" +#include "computeNew.cpp" TEST(MatrixVectorTest, ComputeTest) { std::vector v = {10, 2, 20}; @@ -38,3 +40,74 @@ TEST(MatrixVectorTest, ComputeTest) { } } +TEST(MatrixVectorTest, Compute2Test) { + std::vector v = {10, 2, 20}; + Matrix m(3, 3); + + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + m(i, y) = 1; + } + } + + Matrix expected(3, 3); + for (int i = 0; i < 3; i++) { + expected(0, i) = 31.7662; + } + for (int i = 0; i < 3; i++) { + expected(1, i) = 0.82224; + } + for (int i = 0; i < 3; i++) { + expected(2, i) = -1.6214; + } + + auto erg = compute2(m, v); + + // Erwartete Ergebnisse für die Multiplikation von Matrix und Vektor + EXPECT_EQ(v[0], 10); + EXPECT_EQ(v[1], 2); + EXPECT_EQ(v[2], 20); + + // Testen, ob das Ergebnis der Matrix korrekt ist + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + EXPECT_NEAR(erg(i,y), expected(i, y), 0.1); // Falls es sich um eine einfache Summation handelt + } + } +} + +TEST(MatrixVectorTest, ComputeNewTest) { + std::vector v = {10, 2, 20}; + Matrix m(3, 3); + + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + m(i, y) = 1; + } + } + + Matrix expected(3, 3); + for (int i = 0; i < 3; i++) { + expected(0, i) = 31.7662; + } + for (int i = 0; i < 3; i++) { + expected(1, i) = 0.82224; + } + for (int i = 0; i < 3; i++) { + expected(2, i) = -1.6214; + } + + auto erg = computeNew(m, v); + + // Erwartete Ergebnisse für die Multiplikation von Matrix und Vektor + EXPECT_EQ(v[0], 10); + EXPECT_EQ(v[1], 2); + EXPECT_EQ(v[2], 20); + + // Testen, ob das Ergebnis der Matrix korrekt ist + for (int i = 0; i < 3; i++) { + for (int y = 0; y < 3; y++) { + EXPECT_NEAR(erg(i,y), expected(i, y), 0.1); // Falls es sich um eine einfache Summation handelt + } + } +}