Invocation: switch TestFrame data generation to the new random framework

Based on the recent work it is now possible to generate reproducible yet randomly distributed data content.
A new `TestFrame::reseed()` operation is introduced, which attaches to the `lib::defaultGen`

Using the linear-congruential engine for the actual data generation.
This commit is contained in:
Fischlurch 2024-11-18 02:45:37 +01:00
parent 806db414dd
commit 4ca9eb8d46
4 changed files with 291 additions and 92 deletions

View file

@ -190,7 +190,7 @@ namespace test {
CHECK ( testData(3,51).isSane());
CHECK ( testData(3,49).isSane());
resetTestFrames();
TestFrame::reseed();
CHECK ( testData(3,50).isSane());
}

View file

@ -19,9 +19,10 @@
#include "lib/error.hpp"
#include "lib/random.hpp"
#include "steam/engine/testframe.hpp"
#include "lib/nocopy.hpp"
#include "lib/util.hpp"
#include <boost/random/linear_congruential.hpp>
#include <climits>
#include <cstring>
#include <memory>
#include <vector>
@ -32,33 +33,78 @@ namespace steam {
namespace engine {
namespace test {
using lib::HashVal;
using std::vector;
using std::memcpy;
using lib::rani;
typedef boost::rand48 PseudoRandom;
/** @note using a random-congruential engine to generate the payload data */
using PseudoRandom = lib::RandomSequencer<std::minstd_rand>;
namespace error = lumiera::error;
namespace { // hidden local support facilities....
/**
* Offset to set the seed values of »families« apart.
* The data in the test frames is generated from a distinctive ID-seed,
* which is controlled by the _family_ and the _seq-No_ within each family.
* The seeds for consecutive frames are spread apart by the #dataSeed,
* and the SEQUENCE_SPREAD constant acts as minimum spread. While seed
* values can wrap within the 64bit number range, this generation scheme
* makes it very unlikely that neighbouring frames end up with the same seed.
*/
const size_t SEQUENCE_SPREAD = 100;
HashVal
drawSeed (lib::Random& srcGen)
{
return srcGen.distribute(
std::uniform_int_distribution<HashVal>{SEQUENCE_SPREAD
,std::numeric_limits<HashVal>::max()-SEQUENCE_SPREAD});
}
/** @internal a static seed hash used to anchor the data distinction ID-seeds */
HashVal dataSeed{drawSeed(lib::entropyGen)};
/** @internal helper for generating unique test frames.
* This "discriminator" is used as a random seed when
* filling the test frame data buffers. It is generated
* to be different on adjacent frames of the same series,
* as well as to differ to all near by neighbouring channels.
* This "discriminator" is used as a random seed when filling the test frame data buffers.
* It is generated to be very likely different on adjacent frames of the same series,
* as well as to differ to all nearby neighbouring channels.
* @param seq the sequence number of the frame within the channel
* @param family the channel this frame belongs to
*/
uint64_t
generateDistinction(uint seq, uint family)
{
// random offset, but fixed per executable run
static uint base(10 + rani(990)); /////////////////////////////////////////////////////////////////////TICKET #1372 this is not reproducible!!
// use the family as stepping
return (seq+1) * (base+family);
return (seq+1) * (dataSeed+family);
}
class DistinctNucleus
: public lib::SeedNucleus
, util::MoveOnly
{
uint64_t const& fixPoint_;
public:
DistinctNucleus(uint64_t const& anchor)
: fixPoint_{anchor}
{ }
uint64_t
getSeed() override
{
return fixPoint_;
}
};
/** @internal build a PRNG starting from the referred fixed seed */
auto
buildDataGenFrom (uint64_t const& anchor)
{
DistinctNucleus seed{anchor};
return PseudoRandom{seed};
}
@ -155,11 +201,23 @@ namespace test {
{
return accessTestFrame (seqNr,chanNr);
}
/**
* @remark this function should be invoked at the start of any test
* which requires reproducible data values in the TestFrame.
* It generates a new base seed to distinguish individual data frames.
* The seed is drawn from the \ref lib::defaultGen, and thus will be
* reproducible if the latter has been reseeded beforehand.
* @warning after invoking reseed(), the validity of previously generated
* frames can no longer be verified.
*/
void
resetTestFrames()
TestFrame::reseed()
{
testFrames.reset(0);
testFrames.reset();
drawSeed (lib::defaultGen);
}
@ -194,7 +252,7 @@ namespace test {
{
if (DISCARDED == stage_)
throw new error::Logic ("target TestFrame is already dead");
if (this != &o)
if (not util::isSameAdr (this, o))
{
distinction_ = o.distinction_;
stage_ = CREATED;
@ -246,9 +304,9 @@ namespace test {
bool
TestFrame::verifyData() const
{
PseudoRandom gen(distinction_);
auto gen = buildDataGenFrom (distinction_);
for (uint i=0; i<BUFFSIZ; ++i)
if (data()[i] != char(gen() % CHAR_MAX))
if (data()[i] != char(gen.i(CHAR_MAX)))
return false;
return true;
}
@ -256,9 +314,9 @@ namespace test {
void
TestFrame::buildData()
{
PseudoRandom gen(distinction_);
auto gen = buildDataGenFrom (distinction_);
for (uint i=0; i<BUFFSIZ; ++i)
data()[i] = char(gen() % CHAR_MAX);
data()[i] = char(gen.i(CHAR_MAX));
}

View file

@ -21,6 +21,7 @@
#include "lib/integral.hpp"
#include "lib/hash-value.h"
#include <array>
@ -66,6 +67,9 @@ namespace test {
std::byte buffer_[sizeof(_Arr)];
public:
/** discard all cached #testData and recalibrate data generation */
static void reseed();
~TestFrame();
TestFrame (uint seq=0, uint family=0);
TestFrame (TestFrame const&);
@ -114,11 +118,6 @@ namespace test {
TestFrame& testData (uint chanNr, uint seqNr);
/** discards all the TestFrame instances and
* initialises an empty table of test frames */
void resetTestFrames();
}}} // namespace steam::engine::test
#endif

View file

@ -17563,9 +17563,7 @@
</node>
<node CREATED="1541088402105" ID="ID_857510555" MODIFIED="1576282358101" TEXT="feste L&#xe4;ngenvorgabe">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
d.h. das Text-Label bekommt ggfs. eine L&#228;ngenbeschr&#228;nkung.
@ -18015,9 +18013,7 @@
<node CREATED="1654447901661" ID="ID_988465077" MODIFIED="1654448124509" TEXT="Kind">
<node CREATED="1654447908464" ID="ID_1051744069" MODIFIED="1654447973665" TEXT="MARK">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
ein Marker, ein Pin, Position,....
@ -18832,9 +18828,7 @@
</node>
<node CREATED="1664312522879" ID="ID_568381694" MODIFIED="1664312946309" TEXT="denn der erste Draw erfolgt nach der Zuteilung einer Allokation">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
zwar machen wir im Ctor zuletzt ein show_all(), welches dann erst diese Layout-Berechnung anst&#246;&#223;t. Aber zum Zeitpunkt der Allokations-Zuteilung f&#252;r das Container-Widget (ElementBox selber) haben die nested-children noch keine Allokation bekommen; zwar gelten sie schon als &quot;mapped&quot; und &quot;realized&quot;, aber offensichtlich f&#252;hrt eine &#196;nderung des visible()-Status dazu, da&#223; das damit ausgeblendete Kind-Widget schon gleich gar nicht gezeichnet wird
@ -19140,9 +19134,7 @@
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1664834635582" ID="ID_611375985" MODIFIED="1664834740525">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
...weil der Constraint ja <i>gelockert </i>sein k&#246;nnte
@ -19842,9 +19834,7 @@
<icon BUILTIN="button_cancel"/>
<node CREATED="1661703897467" ID="ID_1062096597" MODIFIED="1661704080771" TEXT="L&#xe4;nge und Fenster-Spec in Timeline-Zeit">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
egal ob nun absolut oder relativ, aber die Lumiera Time-Koordinaten sind gemein. Das ist nicht die &#187;wall clock time&#171;
@ -21177,9 +21167,7 @@
</node>
<node CREATED="1575220620374" ID="ID_1278909200" MODIFIED="1575220767695" TEXT="genau das hab ich trickreich vermieden">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
durch die L&#246;sung mit dem &quot;Einh&#228;keln&quot; via tempor&#228;r durchgereichtem Lambda!
@ -23790,9 +23778,7 @@
</node>
<node CREATED="1672706942567" ID="ID_525512704" MODIFIED="1672707389514">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
...damit w&#252;rde eine std::function konstruiert,
@ -40081,9 +40067,7 @@
<node CREATED="1541860198222" ID="ID_847832000" MODIFIED="1557498707233" TEXT="absolute">
<node CREATED="1544126105472" ID="ID_1636490570" MODIFIED="1576282358023" TEXT="relative-absolute">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
a fixed absolute number of tick&#160;units,
@ -42417,9 +42401,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
aus praktischen Gr&#252;nden erfolgt die Rechnung in FSecs, und das ist hier nicht gef&#228;hrlich, weil der Nenner dieses Wertes in der Metrik-Berechnung nur mit den Pixeln in Ber&#252;hrung kommt
@ -43907,9 +43889,7 @@
<node CREATED="1668394096760" ID="ID_1339569720" MODIFIED="1668394109114" TEXT="1000 Durchl&#xe4;ufe &#xfc;ber dieses Array"/>
<node CREATED="1668394109774" ID="ID_552943244" MODIFIED="1668395370694" TEXT="Ergebnis in Akkumulator summiert">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Extrem wichtig. Und auch wichtig: mit diesem Akkumulator nachher noch etwas machen (z.B. ausgeben). Sonst merkt der Compiler da&#223; das kein beobachtbarer Effekt ist, und entfernt die Addition, und dann in einigen F&#228;llen auch den eigentlichen Funktionsaufruf
@ -45842,9 +45822,7 @@
<icon BUILTIN="idea"/>
<node CREATED="1523021679960" ID="ID_1386792927" MODIFIED="1557498707234">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
(GlobalCtx)-&gt;<b>InteractionDirector</b>&#160;(=Model Root)
@ -46178,9 +46156,7 @@
<node CREATED="1664669510416" ID="ID_407846931" MODIFIED="1664669525650" TEXT="da wir nicht ohne Weiteres custom-Widget-Klassen schaffen k&#xf6;nnen"/>
<node CREATED="1664669526998" ID="ID_692508044" MODIFIED="1664669597733">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
dann immer besser noch ein: <font face="Monospaced" color="#3006cf">frame#element</font>
@ -46324,9 +46300,7 @@
</node>
<node CREATED="1448078748448" ID="ID_1000763850" MODIFIED="1576282358015" TEXT="Nachrichten l&#xf6;schen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
mark &quot;clearMsg&quot;
@ -46392,9 +46366,7 @@
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
was haben alle UI-Elemente wirklich gemeinsam?
@ -56312,7 +56284,8 @@
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
</node>
<node CREATED="1731845750385" ID="ID_810712062" MODIFIED="1731845774415" TEXT="Abstraktions-Framework">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731845750385" FOLDED="true" ID="ID_810712062" MODIFIED="1731888364117" TEXT="Abstraktions-Framework">
<icon BUILTIN="forward"/>
<node CREATED="1731845775617" ID="ID_1139075257" MODIFIED="1731845790075" TEXT="Basis ist &lt;random&gt;"/>
<node CREATED="1731845922430" ID="ID_1112739568" MODIFIED="1731845927401" TEXT="Anforderungen">
<node CREATED="1731845928234" ID="ID_625386997" MODIFIED="1731845944583" TEXT="soll den eigentlichen Grenerator einh&#xfc;llen/verbergen"/>
@ -56815,12 +56788,33 @@
</html></richcontent>
<arrowlink COLOR="#943e5b" DESTINATION="ID_939285679" ENDARROW="Default" ENDINCLINATION="-1142;-205;" ID="Arrow_ID_1632825391" STARTARROW="None" STARTINCLINATION="1971;131;"/>
</node>
<node CREATED="1728786907104" ID="ID_142347061" MODIFIED="1728786910403" TEXT="Umbauten">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786911759" ID="ID_1026206450" MODIFIED="1728787040941" TEXT="Basis-Seed in globale Variable">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728786907104" ID="ID_142347061" MODIFIED="1731900709058" TEXT="Umbauten">
<icon BUILTIN="pencil"/>
<node COLOR="#338800" CREATED="1728786911759" ID="ID_1026206450" MODIFIED="1731900644399" TEXT="Basis-Seed in globale Variable">
<icon BUILTIN="button_ok"/>
<node COLOR="#338800" CREATED="1731895116455" ID="ID_1175003078" MODIFIED="1731900549018" TEXT="reseed-Operation">
<icon BUILTIN="button_ok"/>
<node CREATED="1731895124870" ID="ID_548107647" MODIFIED="1731895133160" TEXT="mu&#xdf; auch alle bestehenden Testdaten verwerfen"/>
<node CREATED="1731895133805" ID="ID_723269136" MODIFIED="1731895164276" TEXT="mit dem Seed &#xe4;ndert sich die distinction_ und damit die korrekten Datenwerte"/>
</node>
<node COLOR="#338800" CREATED="1731900530433" ID="ID_1117088425" MODIFIED="1731900545903" TEXT="den Basis-Seed mit einem minimal-Spread aufbauen">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1731900560669" ID="ID_553408936" MODIFIED="1731900581648" TEXT="diesen aber ansonsten aus dem default / oder entropy-Generator ziehen">
<icon BUILTIN="button_ok"/>
</node>
</node>
<node COLOR="#338800" CREATED="1728786927964" ID="ID_1668223251" MODIFIED="1731900643427" TEXT="PRNG auf std::rand umstellen">
<icon BUILTIN="button_ok"/>
<node COLOR="#435e98" CREATED="1731900504708" ID="ID_1029442698" MODIFIED="1731900521390" TEXT="verwende aber den leichtgewichtigen linear-congruental-PRNG">
<icon BUILTIN="idea"/>
</node>
<node COLOR="#338800" CREATED="1731900601655" ID="ID_1029222798" MODIFIED="1731900615355" TEXT="speziellen SeedNucleus, der die distinction-ID durchreicht">
<icon BUILTIN="button_ok"/>
</node>
<node COLOR="#338800" CREATED="1731900619383" ID="ID_473149833" MODIFIED="1731900641035" TEXT="mu&#xdf; den Generator jeweils nur f&#xfc;r einen Generationslauf erzeugen (Hilfsfunktion)">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786927964" ID="ID_1668223251" MODIFIED="1728787040942" TEXT="PRNG auf std::rand umstellen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786946155" ID="ID_1878547941" MODIFIED="1728787040942" TEXT="Datenlayout und Alignment">
<icon BUILTIN="flag-yellow"/>
@ -56987,7 +56981,7 @@
<node COLOR="#435e98" CREATED="1729979325607" ID="ID_677674501" MODIFIED="1729979344958" TEXT="useFrameTable"/>
</node>
</node>
<node COLOR="#338800" CREATED="1730904143330" ID="ID_25783469" MODIFIED="1731864866245" TEXT="#1378 controlled random seed for tests">
<node COLOR="#338800" CREATED="1730904143330" FOLDED="true" ID="ID_25783469" MODIFIED="1731864866245" TEXT="#1378 controlled random seed for tests">
<linktarget COLOR="#1a30c0" DESTINATION="ID_25783469" ENDARROW="Default" ENDINCLINATION="-284;-1132;" ID="Arrow_ID_1665212260" SOURCE="ID_31813522" STARTARROW="None" STARTINCLINATION="-287;22;"/>
<linktarget COLOR="#4514c4" DESTINATION="ID_25783469" ENDARROW="Default" ENDINCLINATION="6546;452;" ID="Arrow_ID_1019579428" SOURCE="ID_1500320757" STARTARROW="None" STARTINCLINATION="1769;146;"/>
<icon BUILTIN="button_ok"/>
@ -57189,7 +57183,7 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731119762690" ID="ID_1637478235" MODIFIED="1731447189143" TEXT="Zufalls-Generator in lib::test::Test">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731119762690" FOLDED="true" ID="ID_1637478235" MODIFIED="1731447189143" TEXT="Zufalls-Generator in lib::test::Test">
<icon BUILTIN="forward"/>
<node CREATED="1731119858173" ID="ID_1447736454" MODIFIED="1731119870919" TEXT="verwendet einen eingebetteten SeedNucleus"/>
<node COLOR="#5b280f" CREATED="1731120003113" ID="ID_1177767927" MODIFIED="1731176382320" TEXT="jeder Aufruf erzeugt ein neues RandomSequencer-Objekt">
@ -57332,7 +57326,7 @@
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731424663557" ID="ID_1548490877" MODIFIED="1731864831498" TEXT="std::rand() ersetzen">
<icon BUILTIN="yes"/>
<node COLOR="#435e98" CREATED="1731424676911" ID="ID_432733421" MODIFIED="1731447182287" TEXT="was wird ben&#xf6;tigt?">
<node COLOR="#435e98" CREATED="1731424676911" FOLDED="true" ID="ID_432733421" MODIFIED="1731447182287" TEXT="was wird ben&#xf6;tigt?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node CREATED="1731424690509" ID="ID_1222355432" MODIFIED="1731424715317" TEXT="test::randStr()"/>
@ -57393,7 +57387,7 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1731430747958" ID="ID_909943227" MODIFIED="1731430752006" TEXT="Zielvorgabe">
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1731430747958" FOLDED="true" ID="ID_909943227" MODIFIED="1731430752006" TEXT="Zielvorgabe">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
<node CREATED="1731430755615" ID="ID_1824063380" MODIFIED="1731430926339" TEXT="drop-in-Replacement f&#xfc;r Modulo">
@ -57443,7 +57437,7 @@
<node COLOR="#338800" CREATED="1731434548714" ID="ID_1401652131" MODIFIED="1731466845015" TEXT="rand() % MAX abl&#xf6;sen in Tests">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#690f14" CREATED="1731466845496" ID="ID_108595980" MODIFIED="1731864819581" TEXT="Tests scheitern nach Umstellung">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#690f14" CREATED="1731466845496" FOLDED="true" ID="ID_108595980" MODIFIED="1731864819581" TEXT="Tests scheitern nach Umstellung">
<icon BUILTIN="broken-line"/>
<node COLOR="#435e98" CREATED="1731466868785" ID="ID_1204988400" MODIFIED="1731516821863" TEXT="Rational_test">
<richcontent TYPE="NOTE"><html>
@ -57751,7 +57745,7 @@
</node>
</node>
<node COLOR="#435e98" CREATED="1731467207226" ID="ID_977237610" MODIFIED="1731624884569" TEXT="TrackingHeapBlockProvider_test">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731467220749" ID="ID_1574698883" MODIFIED="1731624803495" TEXT="ASSERTION">
<node BACKGROUND_COLOR="#c8c0b6" COLOR="#435e98" CREATED="1731467220749" FOLDED="true" ID="ID_1574698883" MODIFIED="1731624803495" TEXT="ASSERTION">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -57809,17 +57803,20 @@
<node CREATED="1731519949320" ID="ID_240715659" MODIFIED="1731519987357" TEXT="Call-Path: simpleExample() &#x27f6; provider.releaseBuffer(testBuff)"/>
<node CREATED="1731520006047" ID="ID_577977745" MODIFIED="1731520016425" TEXT="Debugger">
<node CREATED="1731529842821" ID="ID_304693119" MODIFIED="1731529854030" TEXT="nebenbei bemerkt: TypeHandler verwendet eine identity">
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1731529855307" ID="ID_1862852828" MODIFIED="1731529863928" TEXT="wozu wird die verwendet?">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731529855307" ID="ID_1862852828" MODIFIED="1731888853878" TEXT="wozu wird die verwendet?">
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1731529995641" ID="ID_570070738" MODIFIED="1731530005496" TEXT="Aua: f&#xfc;r hash_value">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731529995641" ID="ID_570070738" MODIFIED="1731888858118" TEXT="Aua: f&#xfc;r hash_value">
<icon BUILTIN="broken-line"/>
</node>
<node CREATED="1731530923708" ID="ID_1704286619" MODIFIED="1731530935278" TEXT="Problem best&#xe4;tigt: flie&#xdf;t in die Key-Identity ein"/>
<node CREATED="1731530923708" ID="ID_1704286619" MODIFIED="1731888525839" TEXT="Problem best&#xe4;tigt: flie&#xdf;t in die Key-Identity ein">
<icon BUILTIN="messagebox_warning"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731529864690" ID="ID_1980255586" MODIFIED="1731529881765" TEXT="die baut nur auf dem Typ der Funktoren auf">
</node>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731529864690" ID="ID_1980255586" MODIFIED="1731888903713" TEXT="die baut nur auf dem Typ der Funktoren auf">
<arrowlink COLOR="#db1b5e" DESTINATION="ID_524425117" ENDARROW="Default" ENDINCLINATION="-155;-286;" ID="Arrow_ID_1312365808" STARTARROW="None" STARTINCLINATION="90;249;"/>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1731529882792" ID="ID_206400237" MODIFIED="1731529889643" TEXT="das ist rein-logisch zu wenig"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1731529890448" ID="ID_1813009572" MODIFIED="1731529914846" TEXT="wir br&#xe4;uchten einen Hash des konkreten Funktors">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1731529890448" ID="ID_1813009572" MODIFIED="1731888517739" TEXT="wir br&#xe4;uchten einen Hash des konkreten Funktors">
<icon BUILTIN="yes"/>
</node>
</node>
@ -57999,7 +57996,7 @@
<arrowlink COLOR="#73384b" DESTINATION="ID_1574698883" ENDARROW="Default" ENDINCLINATION="-9;41;" ID="Arrow_ID_1250752825" STARTARROW="None" STARTINCLINATION="34;4;"/>
</node>
</node>
<node COLOR="#338800" CREATED="1731455444796" ID="ID_784243083" MODIFIED="1731864793958" TEXT="Concurrent Tests umstellen">
<node COLOR="#338800" CREATED="1731455444796" FOLDED="true" ID="ID_784243083" MODIFIED="1731864793958" TEXT="Concurrent Tests umstellen">
<icon BUILTIN="button_ok"/>
<node BACKGROUND_COLOR="#c8c0b6" CREATED="1731728363475" ID="ID_1473702684" MODIFIED="1731864804416" TEXT="problematisch">
<icon BUILTIN="info"/>
@ -90363,6 +90360,111 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node COLOR="#338800" CREATED="1728698877565" ID="ID_211834061" MODIFIED="1728698892557" TEXT="Cache-Provider f&#xe4;llt automatisch auf den MemoryProvider zur&#xfc;ck">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731889300949" ID="ID_1155189828" MODIFIED="1731889310449" TEXT="unklar: Thema Buffer-Typ">
<icon BUILTIN="flag-pink"/>
<icon BUILTIN="messagebox_warning"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1731888445853" ID="ID_524425117" MODIFIED="1731888903713" TEXT="Buffer-Provider : Inkonsistenzen bzl. TypeHandler-Idenity">
<linktarget COLOR="#db1b5e" DESTINATION="ID_524425117" ENDARROW="Default" ENDINCLINATION="-155;-286;" ID="Arrow_ID_1312365808" SOURCE="ID_1980255586" STARTARROW="None" STARTINCLINATION="90;249;"/>
<icon BUILTIN="broken-line"/>
<node CREATED="1731888560357" ID="ID_753867507" MODIFIED="1731888579238" TEXT="es ist eine chained-Hash-ID">
<icon BUILTIN="info"/>
</node>
<node CREATED="1731888580499" ID="ID_632177828" MODIFIED="1731888598920">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
aber diese baut nur auf dem <b>Typ</b>&#160;der Funktoren auf
</p>
</body>
</html></richcontent>
<node CREATED="1731888601401" ID="ID_1137017696" MODIFIED="1731888654044" TEXT="das ist zu wenig &#x2014; Laufzeit-Binding ist relevant"/>
<node CREATED="1731888615141" ID="ID_1126512651" MODIFIED="1731890089971" TEXT="speziell Funktions-Pointer k&#xf6;nnten zu falschem Aliasing f&#xfc;hren">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
es k&#246;nnte passieren, da&#223; wir lediglich die Hash-ID generiern f&#252;r generische Signaturen wie z.B. size_t(string); alle Funktoren mit dieser Signatur w&#228;ren dann identisch
</p>
</body>
</html></richcontent>
<arrowlink COLOR="#df0449" DESTINATION="ID_373306612" ENDARROW="Default" ENDINCLINATION="-44;-51;" ID="Arrow_ID_937144137" STARTARROW="None" STARTINCLINATION="151;7;"/>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1731888739152" ID="ID_1688258063" MODIFIED="1731888756900" TEXT="Frage: welche Informationsbasis ist gegeben?">
<font NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="help"/>
<node CREATED="1731888757919" ID="ID_182408684" MODIFIED="1731888834785">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
eine <b>stabile</b>&#160;Charakteriseierung wird ben&#246;gigt
</p>
</body>
</html></richcontent>
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...bedeutet: eine Speicher-Adresse k&#246;nnte bereits zu spezifisch sein....
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1731889931661" ID="ID_1395902368" MODIFIED="1731889940288" TEXT="es geht um zwei Belange">
<node CREATED="1731889941660" ID="ID_650277364" MODIFIED="1731889948910" TEXT="der Buffer mu&#xdf; gro&#xdf; genug sein"/>
<node CREATED="1731889949959" ID="ID_1771707287" MODIFIED="1731889961215" TEXT="es mu&#xdf; u.U ein passender Inlay-Typ erzeugt werden">
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1731889967768" ID="ID_373306612" MODIFIED="1731890085619" TEXT="hier w&#xfc;rde dieses Problem u.U relevant">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
irgendwie binden wir hier einen Handler ein, der &#187;hinten rum&#171; am Lib-Plugin h&#228;ngt und daf&#252;r einen (privaten) Datentyp konstruiert &#10233; <b>diese</b>&#160; Info mu&#223; in den Prototyp eingehen
</p>
</body>
</html>
</richcontent>
<linktarget COLOR="#df0449" DESTINATION="ID_373306612" ENDARROW="Default" ENDINCLINATION="-44;-51;" ID="Arrow_ID_937144137" SOURCE="ID_1126512651" STARTARROW="None" STARTINCLINATION="151;7;"/>
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1731889562472" ID="ID_1782397614" MODIFIED="1731889575163" TEXT="welche Typ-Information wird ben&#xf6;tigt?">
<icon BUILTIN="help"/>
<node CREATED="1731889584979" ID="ID_966020586" MODIFIED="1731889616225" TEXT="Fest steht: der Aufruf braucht passende Buffer (Allokation)">
<icon BUILTIN="info"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731889618623" ID="ID_768812789" MODIFIED="1731889647842" TEXT="dieser Zusammenhang mu&#xdf; auf Builder-Level-3 gekl&#xe4;rt werden">
<icon BUILTIN="bell"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1731889660185" ID="ID_1751478781" MODIFIED="1731889709324" TEXT="irgendwo in dem Lib-Plugn gib es eine Assotiation">
<icon BUILTIN="hourglass"/>
<node CREATED="1731889686746" ID="ID_5123490" MODIFIED="1731889696552" TEXT="konkreter Buffer-Typ"/>
<node CREATED="1731889697236" ID="ID_1573431621" MODIFIED="1731889706151" TEXT="StreamType / ImplType?"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1731890121591" HGAP="46" ID="ID_1319945622" MODIFIED="1731890346832" TEXT="wird relevant in dem Moment wo wir aufrufen wollen...." VSHIFT="-1">
<linktarget COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" SOURCE="ID_447051297" STARTARROW="None" STARTINCLINATION="745;112;"/>
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238837562" HGAP="148" ID="ID_610272532" MODIFIED="1731890424341" STYLE="bubble" TEXT="ungel&#xf6;st: Buffer-Typisierung" VSHIFT="44">
<edge COLOR="#ff5d00" STYLE="sharp_linear"/>
<arrowlink COLOR="#fe512a" DESTINATION="ID_1884956005" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_538032456" STARTARROW="None" STARTINCLINATION="-805;76;"/>
<icon BUILTIN="bell"/>
<node CREATED="1721239003353" ID="ID_1445103400" MODIFIED="1731889907429" STYLE="fork" TEXT="wer verwaltet diese Info generisch?">
<font NAME="SansSerif" SIZE="8"/>
</node>
<node CREATED="1721239003353" ID="ID_1561511907" MODIFIED="1731889878331" STYLE="fork" TEXT="wie bekommen wir eine passende Allokation?">
<font NAME="SansSerif" SIZE="8"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fed3ac" COLOR="#990033" CREATED="1731889726616" ID="ID_1814790289" MODIFIED="1731889761047" TEXT="zu kl&#xe4;ren: wer instruiert den BufferProvider?">
<icon BUILTIN="help"/>
</node>
</node>
</node>
</node>
</node>
</node>
@ -90389,7 +90491,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1722385177230" ID="ID_795154055" MODIFIED="1722385231890" TEXT="das LocalTag wird aber nur an einer Stelle (top-Level) gebraucht"/>
<node COLOR="#5b280f" CREATED="1722385605151" ID="ID_519028808" MODIFIED="1722470379074" TEXT="Markieren des Output-Slot">
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1722389530744" ID="ID_1277418704" MODIFIED="1722389536610" TEXT="zu unterscheiden">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1722389530744" ID="ID_1277418704" MODIFIED="1731889232427" TEXT="zu unterscheiden">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1722389538361" ID="ID_35436842" MODIFIED="1722389799354" TEXT="der resultSlot (auf jeder Ebene)">
<richcontent TYPE="NOTE"><html>
@ -90425,7 +90527,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
<node CREATED="1722391173771" ID="ID_720199848" MODIFIED="1722391182384" TEXT="und das alles f&#xfc;r einen einzigen Spezialfall"/>
<node BACKGROUND_COLOR="#fafe99" COLOR="#fa002a" CREATED="1722391186291" ID="ID_93208083" MODIFIED="1722392597788">
<node BACKGROUND_COLOR="#e0b94b" COLOR="#b5056f" CREATED="1722391186291" ID="ID_93208083" MODIFIED="1731890294391">
<richcontent TYPE="NODE"><html>
<head/>
<body>
@ -90455,9 +90557,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1722445400526" ID="ID_270562222" MODIFIED="1722445411968" TEXT="daf&#xfc;r ist nur ein einziger Eingriff in shed() notwendig"/>
</node>
</node>
<node CREATED="1728653092345" ID="ID_670416401" MODIFIED="1728653095731" TEXT="Fazit">
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1728653092345" ID="ID_670416401" MODIFIED="1731889222877" TEXT="Fazit">
<font BOLD="true" NAME="SansSerif" SIZE="12"/>
<icon BUILTIN="forward"/>
<node CREATED="1728653097295" ID="ID_1497905125" MODIFIED="1728653116584" TEXT="der Ausgabepuffer wird direkt &#xfc;ber den Aufruf herausgef&#xfc;hrt"/>
<node CREATED="1728653130694" ID="ID_1242564198" MODIFIED="1728653148596" TEXT="das ganze Konzept des OutputBufferProvider wird damit hinf&#xe4;llig"/>
<node COLOR="#5b280f" CREATED="1728653130694" ID="ID_1242564198" MODIFIED="1731889213046" TEXT="das ganze Konzept des OutputBufferProvider wird damit hinf&#xe4;llig">
<icon BUILTIN="button_cancel"/>
</node>
<node CREATED="1728653149728" ID="ID_478319632" MODIFIED="1728653219457" TEXT="unabh&#xe4;ngig davon bleibt Dependency-Injection notwendig f&#xfc;r Cache und Buffer-Service">
<arrowlink COLOR="#626f93" DESTINATION="ID_1607895967" ENDARROW="Default" ENDINCLINATION="54;426;" ID="Arrow_ID_1301744172" STARTARROW="None" STARTINCLINATION="720;24;"/>
</node>
@ -92162,7 +92268,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
<node CREATED="1728781231984" ID="ID_283829609" MODIFIED="1728781974281" TEXT="w&#xfc;nschenswert">
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728780706437" ID="ID_1189363469" MODIFIED="1728781989516" TEXT="der Runtime-Basis-Seed sollte kontrollierbar sein">
<node COLOR="#435e98" CREATED="1728780706437" ID="ID_1189363469" MODIFIED="1731900746368" TEXT="der Runtime-Basis-Seed sollte kontrollierbar sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -92174,7 +92280,27 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</p>
</body>
</html></richcontent>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="yes"/>
<node CREATED="1731892905040" ID="ID_1699520990" MODIFIED="1731892912937" TEXT="bisher ist der Seed statisch-global"/>
<node COLOR="#435e98" CREATED="1731892914045" ID="ID_1339262498" MODIFIED="1731900841736" TEXT="m&#xfc;&#xdf;te diesen vom Test-Seed her kontrollieren k&#xf6;nnen">
<icon BUILTIN="yes"/>
</node>
<node COLOR="#435e98" CREATED="1731900755115" ID="ID_220644730" LINK="#ID_1175003078" MODIFIED="1731900880658" TEXT="implizit gel&#xf6;st">
<icon BUILTIN="idea"/>
<node CREATED="1731900760730" ID="ID_1666579021" MODIFIED="1731900803874" TEXT="TestFrame::reseed() - Operation">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
wirft auch den internen Daten-Cache weg und re-seeded den Basis-Hash, auf dem die Distinction-ID dann aufbaut
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1731900805220" ID="ID_1253309363" MODIFIED="1731900819630" TEXT="diese reseed() zieht aus dem defaultGen"/>
<node CREATED="1731900821242" ID="ID_1140389439" MODIFIED="1731900831764" TEXT="den kann man somit vorher gezielt seeden"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728781144210" ID="ID_51267004" MODIFIED="1728781989516" TEXT="Standard Generator-Sequenzen auf jeder Stufe sind unabh&#xe4;ngig hierarchisch">
<richcontent TYPE="NOTE"><html>
@ -92199,6 +92325,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1731894841452" ID="ID_1246150422" MODIFIED="1731894867857" TEXT="Storage besser als Deque (damit Adressen stabil bleiben)"/>
<node CREATED="1728778765874" ID="ID_1342398369" MODIFIED="1728778778502" TEXT="der Metadatenblock sollte am Ende sein"/>
<node CREATED="1728778790871" ID="ID_92579679" MODIFIED="1728779021706" TEXT="Metadaten sollten optional sein">
<richcontent TYPE="NOTE"><html>
@ -92298,6 +92425,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731890664306" ID="ID_127090859" MODIFIED="1731890736163" TEXT="wird schon f&#xfc;r erste Tests im Vorgriff ben&#xf6;tigt">
<arrowlink COLOR="#911932" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="-554;-1251;" ID="Arrow_ID_1343565956" STARTARROW="None" STARTINCLINATION="-195;12;"/>
<icon BUILTIN="yes"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728771355851" ID="ID_1533221865" MODIFIED="1728772550469" TEXT="Berechnungsweg komplett deterministic and pure">
<richcontent TYPE="NOTE"><html>
@ -92654,6 +92785,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728786069167" ID="ID_1584473368" MODIFIED="1728786088974" TEXT="Aufruf-Pfad durchimplementieren">
<icon BUILTIN="flag-pink"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1731890254602" ID="ID_447051297" MODIFIED="1731890346832" TEXT="brauche Buffer">
<arrowlink COLOR="#bb4c6b" DESTINATION="ID_1319945622" ENDARROW="Default" ENDINCLINATION="-663;35;" ID="Arrow_ID_542692149" STARTARROW="None" STARTINCLINATION="745;112;"/>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785939337" ID="ID_642847753" MODIFIED="1728785947978" TEXT="einfachste Berechnung direkt verifizieren">
<icon BUILTIN="flag-yellow"/>
@ -92689,12 +92824,13 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786359782" ID="ID_525505656" MODIFIED="1728786374933" TEXT="Spec und Seed generieren und verarbeiten">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728786385349" ID="ID_442258905" MODIFIED="1730900564912" TEXT="Umbau TestFrame">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728786385349" ID="ID_442258905" MODIFIED="1731890736163" TEXT="Umbau TestFrame">
<arrowlink COLOR="#713558" DESTINATION="ID_257931093" ENDARROW="Default" ENDINCLINATION="-2466;135;" ID="Arrow_ID_121875527" STARTARROW="None" STARTINCLINATION="-2154;-229;"/>
<linktarget COLOR="#77313e" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="381;-48;" ID="Arrow_ID_1047269362" SOURCE="ID_936086670" STARTARROW="None" STARTINCLINATION="-36;80;"/>
<linktarget COLOR="#6f2328" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="366;-47;" ID="Arrow_ID_1067356199" SOURCE="ID_683548249" STARTARROW="None" STARTINCLINATION="5;52;"/>
<linktarget COLOR="#911932" DESTINATION="ID_442258905" ENDARROW="Default" ENDINCLINATION="-554;-1251;" ID="Arrow_ID_1343565956" SOURCE="ID_127090859" STARTARROW="None" STARTINCLINATION="-195;12;"/>
<icon BUILTIN="pencil"/>
<node CREATED="1730900637026" ID="ID_1500320757" MODIFIED="1731864860121" TEXT="brauche Einflu&#xdf; auf den PRNG">
<node COLOR="#338800" CREATED="1730900637026" ID="ID_1500320757" MODIFIED="1731890421828" TEXT="brauche Einflu&#xdf; auf den PRNG">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
@ -92704,6 +92840,8 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</body>
</html></richcontent>
<arrowlink COLOR="#4514c4" DESTINATION="ID_25783469" ENDARROW="Default" ENDINCLINATION="6546;452;" ID="Arrow_ID_1019579428" STARTARROW="None" STARTINCLINATION="1769;146;"/>
<icon BUILTIN="button_ok"/>
<node COLOR="#474398" CREATED="1731890427683" HGAP="89" ID="ID_616909963" MODIFIED="1731890459593" TEXT="Seed f&#xfc;r Testf&#xe4;lle &#x27f9; defaultGen verwenden" VSHIFT="10"/>
</node>
<node CREATED="1730900645921" ID="ID_1469990348" MODIFIED="1730901263434" TEXT="brauche Umstellung des Headers">
<richcontent TYPE="NOTE"><html>
@ -93636,6 +93774,10 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<linktarget COLOR="#fe512a" DESTINATION="ID_635840106" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_902176330" SOURCE="ID_1159160517" STARTARROW="None" STARTINCLINATION="-772;102;"/>
<icon BUILTIN="bell"/>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1721238814245" ID="ID_1884956005" MODIFIED="1731890424341" TEXT="Aufgabe: Buffer-Typ/Prototyp im Buffer-Provider">
<linktarget COLOR="#fe512a" DESTINATION="ID_1884956005" ENDARROW="Default" ENDINCLINATION="1101;-48;" ID="Arrow_ID_538032456" SOURCE="ID_610272532" STARTARROW="None" STARTINCLINATION="-805;76;"/>
<icon BUILTIN="bell"/>
</node>
</node>
<node BACKGROUND_COLOR="#e2caa2" COLOR="#990000" CREATED="1729956600896" ID="ID_1648467568" MODIFIED="1729956915005" STYLE="fork" TEXT="Ergebnis">
<edge COLOR="#b14253" STYLE="sharp_linear"/>