From 1169b6272edda7f795eff5f35ecefd8941ca318f Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Tue, 11 Jun 2024 23:53:38 +0200 Subject: [PATCH] Library: test coverage for some ''special'' builder usages --- src/lib/several-builder.hpp | 7 +++ tests/library/several-builder-test.cpp | 77 ++++++++++++++++++-------- wiki/thinkPad.ichthyo.mm | 18 ++++++ 3 files changed, 79 insertions(+), 23 deletions(-) diff --git a/src/lib/several-builder.hpp b/src/lib/several-builder.hpp index 9180996c7..01237d580 100644 --- a/src/lib/several-builder.hpp +++ b/src/lib/several-builder.hpp @@ -586,6 +586,13 @@ namespace lib { .appendAll (ili); } + template + SeveralBuilder + makeSeveral() + { + return SeveralBuilder{}; + } + } // namespace lib #endif /*LIB_SEVERAL_BUILDER_H*/ diff --git a/tests/library/several-builder-test.cpp b/tests/library/several-builder-test.cpp index dacd31f6a..0603c9e4c 100644 --- a/tests/library/several-builder-test.cpp +++ b/tests/library/several-builder-test.cpp @@ -42,6 +42,7 @@ using ::test::Test; using std::vector; +using std::array; using std::rand; using lib::explore; @@ -139,31 +140,61 @@ namespace test{ void check_Builder() { - SeveralBuilder builder; - CHECK (isnil (builder)); + { // Scenario-1 : Baseclass and arbitrary subclass elements + SeveralBuilder builder; + CHECK (isnil (builder)); + + builder.emplace>() + .emplace>(1); + CHECK (2 == builder.size()); + builder.fillElm(2); + CHECK (4 == builder.size()); + builder.fillElm(3, 5); + CHECK (7 == builder.size()); + + Several elms = builder.build(); + CHECK ( isnil(builder)); + CHECK (not isnil(elms)); + CHECK (7 == elms.size()); + CHECK (elms[0].getVal() == (3+1)*3); // indeed a Num<3> with default-seed ≡ 3 + CHECK (elms[0].calc(1) == 3 + 1 + (3+3+3)); // indeed called the overridden calc() operation + CHECK (elms[1].getVal() == (2+1)*1); // indeed a Num<2> with seed ≡ 1 + CHECK (elms[1].calc(1) == 2 + 1 + (1+1)); // indeed the overridden calc() picking from the Array(1,1) + CHECK (isLimited (1, elms[2].getVal(), 100'000'000)); // indeed a Dummy with default random seed + CHECK (isLimited (1, elms[3].getVal(), 100'000'000)); // and this one too, since we filled in two instances + CHECK (elms[4].getVal() == 5); // followed by tree instances Dummy(5) + CHECK (elms[5].getVal() == 5); + CHECK (elms[6].getVal() == 5); + CHECK (elms[6].calc(1) == 5+1); // indeed invoking the base implementation of calc() + } - builder.emplace>() - .emplace>(1); - CHECK (2 == builder.size()); - builder.fillElm(2); - CHECK (4 == builder.size()); - builder.fillElm(3, 5); - CHECK (7 == builder.size()); + { // Scenario-2 : unrelated element types + SeveralBuilder builder; + + auto urgh = array{"Urgh"}; + auto phi = (1+sqrtf(5))/2; + + builder.append (urgh, phi, -1); // can emplace arbitrary data + CHECK (3 == builder.size()); + + Several elms = builder.build(); // WARNING: data accessed by wild cast to interface type + CHECK (3 == elms.size()); + CHECK (elms[0] == * reinterpret_cast ("Urgh")); + CHECK (elms[1] == * reinterpret_cast (&phi)); + CHECK (elms[2] == uint32_t(-1)); + } - Several elms = builder.build(); - CHECK ( isnil(builder)); - CHECK (not isnil(elms)); - CHECK (7 == elms.size()); - CHECK (elms[0].getVal() == (3+1)*3); // indeed a Num<3> with default-seed ≡ 3 - CHECK (elms[0].calc(1) == 3 + 1 + (3+3+3)); // indeed called the overridden calc() operation - CHECK (elms[1].getVal() == (2+1)*1); // indeed a Num<2> with seed ≡ 1 - CHECK (elms[1].calc(1) == 2 + 1 + (1+1)); // indeed the overridden calc() picking from the Array(1,1) - CHECK (isLimited (1, elms[2].getVal(), 100'000'000)); // indeed a Dummy with default random seed - CHECK (isLimited (1, elms[3].getVal(), 100'000'000)); // and this one too, since we filled in two instances - CHECK (elms[4].getVal() == 5); // followed by tree instances Dummy(5) - CHECK (elms[5].getVal() == 5); - CHECK (elms[6].getVal() == 5); - CHECK (elms[6].calc(1) == 5+1); // indeed invoking the base implementation of calc() + { // Scenario-3 : copy values from iterator + SeveralBuilder builder; + + VecI seq = getTestSeq_int (10); + builder.appendAll (seq); + CHECK (10 == builder.size()); + + auto elms = builder.build(); + CHECK (10 == elms.size()); + CHECK (join (elms,"-") == "0-1-2-3-4-5-6-7-8-9"_expect); + } } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index a9be8133f..a01e374fe 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -83104,6 +83104,24 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + +

+ ...also ist das keine gute Idee, da verwirrend +

+ + +
+ +
+