diff --git a/tests/library/several-builder-test.cpp b/tests/library/several-builder-test.cpp index b407e6683..4d5c818f3 100644 --- a/tests/library/several-builder-test.cpp +++ b/tests/library/several-builder-test.cpp @@ -32,6 +32,7 @@ #include "lib/test/test-coll.hpp" #include "lib/test/test-helper.hpp" #include "lib/test/diagnostic-output.hpp"////////////////TODO +#include "lib/allocation-cluster.hpp" #include "lib/iter-explorer.hpp" #include "lib/format-util.hpp" #include "lib/util.hpp" @@ -604,6 +605,34 @@ namespace test{ CHECK (0 == TrackingAllocator::numAlloc()); CHECK (0 == TrackingAllocator::use_count()); CHECK (0 == TrackingAllocator::checksum()); + + AllocationCluster clu; + { + auto builder = makeSeveral() + .withAllocator(clu) + .reserve(5) + .fillElm(5); + + size_t buffSiz = sizeof(Dummy) * builder.capacity(); + size_t headerSiz = sizeof(ArrayBucket); + expectedAlloc = headerSiz + buffSiz; +SHOW_EXPR(expectedAlloc) +SHOW_EXPR(builder.size()) +SHOW_EXPR(builder.capacity()) +SHOW_EXPR(clu.numExtents()) +SHOW_EXPR(clu.numBytes()) + builder.append (Dummy{23}); +SHOW_EXPR(builder.capacity()) + + buffSiz = sizeof(Dummy) * builder.capacity(); +SHOW_EXPR(buffSiz) +SHOW_EXPR(buffSiz + expectedAlloc) +SHOW_EXPR(buffSiz + headerSiz) +SHOW_EXPR(builder.size()) +SHOW_EXPR(builder.capacity()) +SHOW_EXPR(clu.numExtents()) +SHOW_EXPR(clu.numBytes()) + } } }; diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 8a73c492a..341f2a9fa 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -83545,7 +83545,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + @@ -83563,7 +83563,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + @@ -83689,6 +83689,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ @@ -84009,8 +84010,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
denn dort rufen wir den Destruktor-Funktor explizit auf, anstatt den Destruktor von ArrayBucket aufzurufe

- - +
@@ -84020,8 +84020,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...denn auch am Ende bleibt ein use-cnt übrig, obwohl doch in diesem Fall letztlich der Destruktor des Funktors aufgerufen werden sollte, wenngleich auch bereits nach der de-Allokation (!)

- -
+ @@ -84031,8 +84030,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...deshalb habe ich da so sonderbar darum herum gecodet. Ich dachte mir, kein Problem, ArrayBucket ist ja sowiso ein POD. Und dann bin ich »eingeknickt« und habe doch eine std::function genommen. Und deren Destruktor muß aufgerufen werden

- -
+
@@ -84047,8 +84045,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
weil vor jeder regulären Änderung der Checksumme auch ein Log-Aufruf steht. Und die Log-Einträge sehen allesamt korrekt und balanaciert aus

- - +
@@ -84070,8 +84067,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - +
@@ -84081,8 +84077,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...fälschlicherweise der laufende Allokations-Counter verwendet

- -
+
@@ -84107,8 +84102,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
...konkret, ich plane einen Satz an Steuer-Flags, und auf dieser Basis dann die Belegung weiterer Storage; im einfachsten Fall gibt es keinen Spread, keinen Deleter und einen Standard-Offset; es muß dann nur die Element-Zahl und Kapazität gespeichert werden.

- - +
@@ -84152,6 +84146,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ @@ -84613,13 +84608,29 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - - + - + + + + + + + + + + +

+ versteckte Inkonsistenz mit der Deleter-Behandlung aufgedeckt +

+ +
+ +
+
+ +