Invocation: consider minimal test setup and verification

__Analysis__: what kind of verifications are sensible to employ
to cover building, wiring and invocation of render nodes?
Notably, a test should cover requirements and observable functionality,
while ''avoiding direct hard coupling to implementation internals...''

__Draft__: the most simple node builder invocation conceivable...
This commit is contained in:
Fischlurch 2024-10-13 03:49:01 +02:00
parent bb9d0107cd
commit 4df4ff2792
6 changed files with 568 additions and 43 deletions

View file

@ -203,8 +203,8 @@ namespace engine {
template<class POL>
class PortBuilderRoot
: protected NodeBuilder<POL>
, util::MoveOnly
{
public:
NodeBuilder<POL>
completePort()
{
@ -318,8 +318,10 @@ namespace engine {
} // slice away the subclass
private:
PortBuilder(_Par&& base)
template<typename FUN>
PortBuilder(_Par&& base, FUN&& fun)
: _Par{move(base)}
, weavingBuilder_{forward<FUN> (fun)}
{ }
friend class PortBuilderRoot<POL>;
@ -332,7 +334,7 @@ namespace engine {
PortBuilderRoot<POL>::invoke (FUN&& fun)
{
using WeavingBuilder_FUN = WeavingBuilder<POL, manifoldSiz<FUN>(), FUN>;
return PortBuilder<POL, WeavingBuilder_FUN>{move(*this)};
return PortBuilder<POL, WeavingBuilder_FUN>{move(*this), forward<FUN> (fun)};
}
/*
template<class POL>

View file

@ -121,7 +121,7 @@ namespace engine {
manifoldSiz()
{
using _F = _ProcFun<FUN>;
auto bound = std::max (_F::FAN_I, _F::FAN_O);
auto constexpr bound = std::max (_F::FAN_I, _F::FAN_O);
static_assert (bound <= 10,
"Limitation of template instances exceeded");
return bound < 3? bound

View file

@ -70,6 +70,9 @@ namespace test {
build_connected_nodes()
{
auto con = prepareNode()
.preparePort()
.invoke(dummyOp)
.completePort()
.build();
UNIMPLEMENTED ("build render nodes linked into a connectivity network");
}

View file

@ -31,12 +31,24 @@
#include "steam/engine/testframe.hpp"
#include <array>
namespace steam {
namespace engine{
namespace test {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Dummy / Placeholder
using SoloArg = std::array<char*, 1>;
/** @todo a placeholder operation to wire a prototypical render node
*/
inline void
dummyOp (SoloArg in, SoloArg out)
{
UNIMPLEMENTED ("a sincerely nonsensical operation");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #1367 : Dummy / Placeholder
/**
* A fake _Domain Ontology_ to describe mocked »render operations« on
* dummy data frames filled with random numbers.

View file

@ -35,7 +35,7 @@ namespace test {
/******************************************************************//**
* @test demonstrate simple access to random number generation,
* as well as the setup of controlled random number sequences.
* as well as the setup of controlled random number sequences.
* @see random.hpp
*/
class Random_test : public Test

View file

@ -8017,9 +8017,7 @@
</node>
<node CREATED="1508539633800" ID="ID_471699110" MODIFIED="1576282358122" TEXT="coverDepth (Zahl)">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
Tiefe, bis zu der dieser Pfad gedeckt ist.
@ -8032,9 +8030,7 @@
</node>
<node CREATED="1508539644775" ID="ID_186144507" MODIFIED="1576282358121" TEXT="[optional] explizite Coverage">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
heap-allozierter expliziter Pfad.
@ -8120,9 +8116,7 @@
<node CREATED="1509476185182" ID="ID_613038974" MODIFIED="1509476196153" TEXT="Callback &#xfc;ber den Baum transportieren"/>
<node CREATED="1509476197413" ID="ID_768936647" MODIFIED="1514328778025">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Ha! das ist eine <b>Monade</b>!!!!!1!11!
@ -8194,9 +8188,7 @@
</node>
<node CREATED="1509501086314" ID="ID_1462237553" MODIFIED="1509501086314">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Das hei&#223;t, wir m&#252;ssen ihn bereits im Aufrufkontext bereit liegen haben
@ -8335,9 +8327,7 @@
<linktarget COLOR="#80c6b3" DESTINATION="ID_1499495468" ENDARROW="Default" ENDINCLINATION="-1812;12745;" ID="Arrow_ID_673178727" SOURCE="ID_1502143527" STARTARROW="None" STARTINCLINATION="4133;-10665;"/>
<node CREATED="1510341374332" ID="ID_483481416" MODIFIED="1511572072346" TEXT="naja...">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
mathematische Monaden sind viel mehr...
@ -8615,9 +8605,7 @@
<node CREATED="1510940088149" ID="ID_791410014" MODIFIED="1512797263192" TEXT="S mu&#xdf; nicht speziell vorbereitet sein (nur konstruierbar)"/>
<node CREATED="1510940199342" ID="ID_1423687617" MODIFIED="1512797263192" TEXT="man zahlt immer den Overhead f&#xfc;r den Stack im Baum-Explorer">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
...selbst wenn man ihn f&#252;r eine triviale Implementierung
@ -9000,9 +8988,7 @@
<node CREATED="1512262291085" FOLDED="true" ID="ID_1532344112" MODIFIED="1512926193413" TEXT="f&#xfc;r jeden Layer">
<node CREATED="1512262299476" ID="ID_102544445" MODIFIED="1512262325001">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
TreeExplorer per <i>slicing move</i>&#160;entfernen
@ -9992,9 +9978,7 @@
</node>
<node CREATED="1512769199597" ID="ID_1928524017" MODIFIED="1512769227486">
<richcontent TYPE="NODE"><html>
<head>
</head>
<head/>
<body>
<p>
Stichwort: <b>virtual base offset</b>
@ -11956,9 +11940,7 @@
<icon BUILTIN="forward"/>
<node CREATED="1514339665248" ID="ID_1142507602" MODIFIED="1514339776889" TEXT="low-level-Operation">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<ul>
<li>
@ -15701,9 +15683,7 @@
</node>
<node CREATED="1523746704479" ID="ID_462392796" MODIFIED="1576282358111" TEXT="...und das ist ausgeschlossen">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
<u>Policy</u>: Unit-Tests d&#252;rfen keine GTK-Abh&#228;ngigkeit haben
@ -48991,9 +48971,7 @@
</node>
<node CREATED="1457120439360" ID="ID_1972741688" MODIFIED="1576282358009" TEXT="ID match ist Aufgabe der Implementierung">
<richcontent TYPE="NOTE"><html>
<head>
</head>
<head/>
<body>
<p>
das ist der wesentliche Kniff,
@ -85785,6 +85763,9 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<node CREATED="1713823944920" ID="ID_1929417005" MODIFIED="1713823954451" TEXT="Node mu&#xdf; Verschaltungs-API bieten"/>
<node CREATED="1713823999457" ID="ID_1445622002" MODIFIED="1713824007500" TEXT="Steuerbarkeit per TurnoutSystem"/>
<node CREATED="1713824070968" ID="ID_1427325952" MODIFIED="1713824271145" TEXT="Struktur TurnoutSystem ableiten"/>
<node CREATED="1728764677697" ID="ID_1857199136" MODIFIED="1728764933507" TEXT="Modell-Struktur-Verifizierbarkeit">
<arrowlink COLOR="#873d58" DESTINATION="ID_1876650367" ENDARROW="Default" ENDINCLINATION="-604;-28;" ID="Arrow_ID_1732704985" STARTARROW="None" STARTINCLINATION="325;29;"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719186374543" ID="ID_1706482104" MODIFIED="1719277437612" TEXT="Test-Ontologie aufbauen">
<arrowlink COLOR="#ff2400" DESTINATION="ID_594112005" ENDARROW="Default" ENDINCLINATION="-136;-44;" ID="Arrow_ID_1657525718" STARTARROW="None" STARTINCLINATION="101;9;"/>
<icon BUILTIN="flag-yellow"/>
@ -85823,6 +85804,11 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="yes"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719625209413" ID="ID_1847666799" MODIFIED="1719625223372" TEXT="per NodeLinkage_test herausfinden...">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728764748678" ID="ID_1876650367" MODIFIED="1728765008297" TEXT="geeignete Ankerpunkte f&#xfc;r Assertions etablieren">
<arrowlink COLOR="#ef0066" DESTINATION="ID_475636936" ENDARROW="Default" ENDINCLINATION="-1187;-101;" ID="Arrow_ID_426827896" STARTARROW="None" STARTINCLINATION="859;48;"/>
<linktarget COLOR="#873d58" DESTINATION="ID_1876650367" ENDARROW="Default" ENDINCLINATION="-604;-28;" ID="Arrow_ID_1732704985" SOURCE="ID_1857199136" STARTARROW="None" STARTINCLINATION="325;29;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1719625243183" ID="ID_1479244509" MODIFIED="1719625248360" TEXT="&#xfc;ber Weiterungen nachdenken">
<icon BUILTIN="hourglass"/>
@ -89209,8 +89195,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
Die Indirektion ist nur notwendig, wenn es einen f&#252;r den Benutzer sichtbaren Lebenszyklus-Zustand gibt; andernfalls gilt es lediglich als Service-Konfiguration und der Client kann sich direkte Referenzen f&#252;r die verwendeten Services ziehen
</p>
</body>
</html>
</richcontent>
</html></richcontent>
</node>
<node CREATED="1728694014136" ID="ID_1610313761" MODIFIED="1728694227860" TEXT="hier f&#xfc;r die Render-Engine nicht relevant">
<richcontent TYPE="NOTE"><html>
@ -89255,8 +89240,7 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
da es offensichtlicher ist, und zwischen Konstruktor und den von diesem erzeugten Services keine architektonische Trennung besteht
</p>
</body>
</html>
</richcontent>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
</node>
@ -89662,6 +89646,517 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728764786662" ID="ID_475636936" MODIFIED="1728765035215" TEXT="Test/Verifizierbarkeit der Resultate">
<linktarget COLOR="#ef0066" DESTINATION="ID_475636936" ENDARROW="Default" ENDINCLINATION="-1187;-101;" ID="Arrow_ID_426827896" SOURCE="ID_1876650367" STARTARROW="None" STARTINCLINATION="859;48;"/>
<icon BUILTIN="yes"/>
<node CREATED="1728768899761" ID="ID_533220304" MODIFIED="1728769142319" TEXT="insgesamt: vor allem das Berechnungsergebnis pr&#xfc;fen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Hier droht die typische Falle des white-box-Testing: da&#223; man auf Implementierungsdetails abstellt &#8212; was ganz besonders gef&#228;hrlich wird, wenn die Implementierung erwartbar eine hohe Koh&#228;sivit&#228;t aufweist. Daher sollte der Hauptfokus darauf gereichtet sein, eine <b>Test-Ontologie</b>&#160; aufzubauen, verm&#246;ge deren der erfolgte Berechnungsvorgang pr&#228;zise ausgeleuchtet werden kann.
</p>
</body>
</html></richcontent>
<icon BUILTIN="yes"/>
</node>
<node CREATED="1728765067388" ID="ID_1708286207" MODIFIED="1728765109597" TEXT="f&#xfc;r eine Node...">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728765130912" ID="ID_1032840307" MODIFIED="1728765140930" TEXT="die Identit&#xe4;t feststellen k&#xf6;nnen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728765172917" ID="ID_33308294" MODIFIED="1728765183676" TEXT="Zahl der Leads und Ports pr&#xfc;fen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1728769243429" ID="ID_1535113263" MODIFIED="1728769249651" TEXT="f&#xfc;r einen Port...">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769266173" ID="ID_664281474" MODIFIED="1728769290143" TEXT="die Identit&#xe4;t der gebundenen Funktion feststellen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728769319538" ID="ID_1257287659" MODIFIED="1728769363223" TEXT="eine reproduzierbare symbolische Aufruf-Spec erheben">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node CREATED="1728771335267" ID="ID_1094389177" MODIFIED="1728771344519" TEXT="insgesamt....">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728771345748" ID="ID_286542606" MODIFIED="1728772561734" TEXT="reproduzierbare pseudo-Random-Eingabedaten">
<icon BUILTIN="yes"/>
<node CREATED="1728776765371" ID="ID_530339700" MODIFIED="1728776784584" TEXT="Basis: der TestFrame">
<icon BUILTIN="idea"/>
<node CREATED="1728776965140" ID="ID_1948564901" MODIFIED="1728776972015" TEXT="geschaffen bereits 2011-11-01"/>
<node CREATED="1728777073629" ID="ID_1232418525" MODIFIED="1728777087836">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
siehe <b><font face="Monospaced">TestFrame_test</font></b>
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="idea"/>
<node CREATED="1728778030637" ID="ID_450784295" MODIFIED="1728778047012" TEXT="hat eine fixierte Gr&#xf6;&#xdf;e von 1k (+Metadata)"/>
<node CREATED="1728777455066" ID="ID_1238676043" MODIFIED="1728777545746" TEXT="Inhalt reproduzierbar, geordnet nach Channel and Seq-No">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
es gibt nur einen festen Seed-Mechanismus, der auf der Kanal- und Sequenz-Nummer beruht
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728777897375" ID="ID_560401601" MODIFIED="1728777958502">
<richcontent TYPE="NODE"><html>
<head/>
<body>
<p>
kann Lifecycle markieren als <font color="#563c31">CREATED, EMITTED, DISCARDED</font>
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728778080366" ID="ID_1631642281" MODIFIED="1728778216760" TEXT="kann Konsistenz und damit Korruption erkennen"/>
<node BACKGROUND_COLOR="#e0ceaa" COLOR="#690f14" CREATED="1728777587128" ID="ID_939285679" MODIFIED="1728786873689" TEXT="fehlt bisher">
<linktarget COLOR="#943e5b" DESTINATION="ID_939285679" ENDARROW="Default" ENDINCLINATION="-1142;-205;" ID="Arrow_ID_1632825391" SOURCE="ID_1372116679" STARTARROW="None" STARTINCLINATION="722;48;"/>
<icon BUILTIN="broken-line"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728778245232" ID="ID_1565084791" MODIFIED="1728780108303" TEXT="ein kontrollierbarer Seeding-Mechanismus">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728777747523" ID="ID_179758750" MODIFIED="1728781968593" TEXT="verwendet bisher boost::random">
<icon BUILTIN="messagebox_warning"/>
</node>
<node COLOR="#5b280f" CREATED="1728777754828" ID="ID_722014986" MODIFIED="1728781295002" TEXT="sollte vielleicht das inzwischen geschaffene lib::Random verwenden?">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
bringt nicht wirklich was, aber zumindest sollte std::random mit kompatiblem Generator verwendet werden
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="button_cancel"/>
</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">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...also zumindest eine globale Variable, die auslesbar und zuweisbar ist.
</p>
<p>
Es fehlt ja generell noch ein Framework f&#252;r Zufallswerte in Tests, so da&#223; jeder Test seinen definiten Seed bekommt, welcher zwar normalerweise zuf&#228;llig, ansonsten aber feststellbar und reproduzierbar sein sollte
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="flag-yellow"/>
</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>
<head/>
<body>
<p>
Das sind sie bereits in der bestehenden Implementierung, und das Prinzip ist auch bereits gut genug; allerdings sollten wir das Schema von std::random verwenden, d.h. jeweils einen Generator und darauf aufbauend eine Distribution
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f8f1cb" COLOR="#a50125" CREATED="1728778599970" ID="ID_360776020" MODIFIED="1728778748251" TEXT="Layout und Alignment k&#xf6;nnten besser sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Das Daten-Array liegt nicht am Anfang, und ist deshalb plattform/implementierungsabh&#228;ngig aligned; das erschwert auch die direkte Interpretation eines Datenblocks als TestFrame....
</p>
</body>
</html>
</richcontent>
<icon BUILTIN="messagebox_warning"/>
<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>
<head/>
<body>
<p>
....und damit sollte man jede beliebige Speicherlocation als Testframe interpretieren k&#246;nnen, ohne diese zu korrumpieren; das impliziert auch, da&#223; der behandelnde Code erkennen kann, ob ein Metadatenblock &#252;berhaupt angelegt wurde &#8212; und wenn das nicht der Fall ist, sollte auch niemals implizit in den Speicher geschrieben werden
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728779023048" ID="ID_1104714285" MODIFIED="1728779233787" TEXT="man sollte die Pr&#xfc;fsumme explizit markieren k&#xf6;nnen">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Dabei ist die Pr&#252;fsumme ein verkn&#252;pfter Hash, und man sollte diese jederzeit berechnen k&#246;nnen; jedoch ein regul&#228;r erstellter TestFrame sollte die Pr&#252;fsumme explizit speichern, und auch f&#252;r beliebigen Dateninhalt sollte sich die Pr&#252;fsumme explizit markiern (speichern) lassen, denn damit werden auch weitergehende Berechnungen auf den Daten m&#246;glich, die vom initialen Seed abweichen
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728778477601" ID="ID_1156423837" MODIFIED="1728778494727" TEXT="direkter Zugang zu den Daten / Iteration">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728778256504" ID="ID_602872488" MODIFIED="1728778284412" TEXT="Hash-Pr&#xfc;fsumme">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728779390394" ID="ID_1699887806" MODIFIED="1728779648647" TEXT="damit weitere Zust&#xe4;nde">
<node CREATED="1728779817892" ID="ID_1916046984" MODIFIED="1728779971755" TEXT="isSane">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
<b>neue Bedeutung</b>: es ist ein TestFrame mit erkennbarem Metadatenblock (auch wenn ansonsten keine der Pr&#252;fsummen mit den Daten zusammenpa&#223;t); es sollte recht unwahrscheinlich sein, da&#223; ein zuf&#228;lliger Datenblock diesen Test besteht.
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728779408099" ID="ID_186109727" MODIFIED="1728779644910" TEXT="isValid">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Es ist ein TestFrame mit g&#252;ltigem Metadaten-Block, und die dort gespeicherte Pr&#252;fsumme wird durch die Daten best&#228;tigt
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728779415747" ID="ID_135096780" MODIFIED="1728779750157" TEXT="isPristine">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
entspricht dem bisherigen isSane() &#8212; d.h. isValid() aber zus&#228;tzlich passen die Daten auf die gespeicherte distinction, und das hei&#223;t, die Daten wurden vom Standard-Schema erzeugt und nicht weiter bearbeitet
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1728777012173" ID="ID_1724213978" MODIFIED="1728777061393" TEXT="bisher sporadisch verwendet f&#xfc;r Buffer-Handling-Tests">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
testframe.hpp (/zLumi/tests/core/steam/engine)
</p>
<ul>
<li>
buffer-metadata-test.cpp (/zLumi/tests/core/steam/engine)
</li>
<li>
buffer-provider-protocol-test.cpp (/zLumi/tests/core/steam/engine)
</li>
<li>
diagnostic-output-slot.hpp (/zLumi/tests/core/steam/play)
</li>
<li>
output-slot-protocol-test.cpp (/zLumi/tests/core/steam/play)
</li>
<li>
testframe.cpp (/zLumi/tests/core/steam/engine)
</li>
<li>
testframe-test.cpp (/zLumi/tests/core/steam/engine)
</li>
<li>
test-rand-ontology.hpp (/zLumi/tests/core/steam/engine)
</li>
<li>
tracking-heap-block-provider-test.cpp (/zLumi/tests/core/steam/engine)
</li>
</ul>
</body>
</html>
</richcontent>
</node>
</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>
<head/>
<body>
<ul>
<li>
h&#228;ngt nur von den Eingabedaten ab
</li>
<li>
f&#252;r jeden Pixel auch durch Direktaufruf der Berechnung reproduzierbar
</li>
<li>
(optional) in jedem Schritt mit einer Instanz-ID verkn&#252;pfbar
</li>
</ul>
</body>
</html></richcontent>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728782135051" ID="ID_391399838" MODIFIED="1728782152864" TEXT="Standard-&#xbb;Operationen&#xab; (in der Test-Ontology)">
<node CREATED="1728782215620" ID="ID_571179061" MODIFIED="1728782226782" TEXT="un&#xe4;r, bin&#xe4;r, ... N-&#xe4;r"/>
<node CREATED="1728782276193" ID="ID_151408357" MODIFIED="1728782369538" TEXT="die Berechnung selber ist eine Hashverkn&#xfc;pfung (boost hash_combine)">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...das bedeutet, sie l&#228;uft auf size_t (oder was dann letztlich die Wortbreite sein wird f&#252;r Lumiera Hash-Vorg&#228;nge) und sie ist <b>nicht kommutativ<i>&#160;</i></b>in den Argumenten
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728782252204" ID="ID_757336693" MODIFIED="1728782549197" TEXT="es wird ein uniformer Seed-Wert f&#xfc;r jeden Datenpunkt mit injiziert">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Jeder Funktionsaufruf ist &#8222;gef&#228;rbt&#8220;, aber ansonsten &#228;quivalent. Das hei&#223;t, ein fester Parameterwert flie&#223;t mit in die Berechnung jedes einzelnen Datenpunktes, und dieser Wert ist an den jeweiligen Aufruf gebunden wird, wodurch auch eine Kette gleichartiger Aufrufe in der Reihenfolge unterscheidbar gemacht werden kann.
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728782874164" ID="ID_1997651851" MODIFIED="1728783179058" TEXT="dieser Seed, zusammen mit den Kenndaten, bildet eine reproduzierbare Identit&#xe4;t">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...zwar handelt es sich stets nur um eine Hash-Verkn&#252;pfung, aber die Arit&#228;t (und ggfs. sp&#228;ter auch noch ein Array-Wertiger Input) kommen als Steuerparameter hinzu. Diese Parameter k&#246;nnen als lesbarer Spec-String ausgegeben werden, und in einen Hash eingerechnet werden, der dann die Funktion markiert und unterscheidbar macht. Wenn ein Seed explizit angegeben wird, dann flie&#223;t er zus&#228;tzlich mit ein, und markiert au&#223;erdem auch die Berechnung an jedem Datenpunkt
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728783188923" ID="ID_1138350224" MODIFIED="1728783420787" TEXT="der Seed k&#xf6;nnte sp&#xe4;ter wie ein Automations-Parameterwert eingebracht werden">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
...sp&#228;ter, wenn ich abschlie&#223;end gekl&#228;rt habe, wie Automation funktionieren soll. Derzeit denke ich, da&#223; solche Funktions-Parameter in einem Tree-walk vor dem eigentlichen pull() der Invocation gesetzt werden, also &#252;ber das Turnout-System. Speziell f&#252;r die Test-Ontology k&#246;nnte man hier auch eine Node-ID oder einen Node-Struktur-Hash einflie&#223;en lassen (wobei mit jetzt aber nicht klar ist, ob diese Idee f&#252;r das Testen &#252;berhaupt von Nutzen ist)
</p>
</body>
</html>
</richcontent>
</node>
</node>
<node CREATED="1728782162715" ID="ID_647461586" MODIFIED="1728783566268" TEXT="Berechnung unabh&#xe4;ngig pro Datenpunkt">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Ich will also eine laterale Vermischung der Daten vermeiden; erst &#252;ber die Pr&#252;fsumme des Ergebnis-Datenblocks werden die einzelnen Datenpunkte zusammengef&#252;hrt; theoretisch w&#228;re es dadurch sogar m&#246;glich, die Korruption einzelner Datenpunkte zu erkennen, indem man die intendierte Berechnungskette explizit gecodet nochmal ausf&#252;hrt und dann die Ergebnisdaten vergleicht.
</p>
</body>
</html>
</richcontent>
</node>
<node CREATED="1728783585707" ID="ID_288581450" MODIFIED="1728783674793" TEXT="f&#xfc;r jede Berechnung gibt es eine human-readable spec">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Also einen String, der die Operation mit Parametrisierung und Seed darstellt. Aufbauend darauf l&#228;&#223;t sich dann auch eine Node-Spec generieren
</p>
</body>
</html></richcontent>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728772511968" ID="ID_1684753208" MODIFIED="1728772544309" TEXT="EventLog zuschaltbar f&#xfc;r jeden Schritt">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728783687904" ID="ID_1950844233" MODIFIED="1728783803478" TEXT="die Behandlung soll im Kontext zuschaltbar sein">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
d.h. das EventLog liegt in einem Singleton, und wenn es da ist, dann hinterl&#228;&#223;t jeder Funktionsaufruf einen Log-Eintrag, so da&#223; sich der gesamte Berechnungsweg mit allen Aufruf-Reihenfolgen nachvollziehen und verifizieren l&#228;&#223;t
</p>
</body>
</html>
</richcontent>
</node>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728785502988" ID="ID_1973895762" MODIFIED="1728785648725" TEXT="Prototyping-1">
<linktarget COLOR="#ed384d" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-1324;220;" ID="Arrow_ID_95845616" SOURCE="ID_623146928" STARTARROW="None" STARTINCLINATION="481;51;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#ccb59b" COLOR="#6e2a38" CREATED="1728787061205" ID="ID_1090922930" MODIFIED="1728787084161" TEXT="das wird jetzt der &#xbb;Butter-bei-die-Fische&#xab;-Testfall">
<font ITALIC="true" NAME="SansSerif" SIZE="14"/>
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728785663035" ID="ID_1585637379" MODIFIED="1728785801243" TEXT="Integration des einfachst-m&#xf6;glichen Builder-Terms">
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785697448" ID="ID_1129960489" MODIFIED="1728785739456" TEXT="kein Lead &#x2259; Generator-Node">
<icon BUILTIN="yes"/>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728785719979" ID="ID_1934199369" MODIFIED="1728785743179" TEXT="frei stehende Dummy-Funktion verwenden">
<icon BUILTIN="pencil"/>
<node COLOR="#435e98" CREATED="1728787111148" ID="ID_1061748863" MODIFIED="1728787143959" TEXT="minimaler Node-Builder geht durch den Compiler">
<icon BUILTIN="ksmiletris"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785768422" ID="ID_1775907930" MODIFIED="1728785783907" TEXT="ProcNode als Ergebnis bekommen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785785350" ID="ID_1997976250" MODIFIED="1728785795791" TEXT="1:1-Verdrahtung durchf&#xfc;rhen">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728785803611" ID="ID_1231385520" MODIFIED="1728785816791" TEXT="minimale Verifikationen aufbauen">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785829235" ID="ID_59153641" MODIFIED="1728785837551" TEXT="Zahl der Leads / Ports">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785840998" ID="ID_663732870" MODIFIED="1728785852800" TEXT="Funktions-ID generieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785867907" ID="ID_394739045" MODIFIED="1728785872687" TEXT="Spec generieren">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785876033" ID="ID_424140873" MODIFIED="1728785881465" TEXT="Spec der Funktion">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785882504" ID="ID_607531791" MODIFIED="1728785893760" TEXT="Spec aus dem Turnout">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728786023206" ID="ID_827177241" MODIFIED="1728786051330" TEXT="Node-pull()">
<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>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785939337" ID="ID_642847753" MODIFIED="1728785947978" TEXT="einfachste Berechnung direkt verifizieren">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728785953219" ID="ID_1772786102" MODIFIED="1728785967294" TEXT="Prototyping-2">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728786122944" ID="ID_1755127890" MODIFIED="1728786134527" TEXT="TestFrame und Frame-Nummern einf&#xfc;hren">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728786146493" ID="ID_1993277373" MODIFIED="1728786261724" TEXT="Einstieg in das Turnout-System kl&#xe4;ren">
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786158476" ID="ID_287270915" MODIFIED="1728786258902" TEXT="Parameter definieren">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786171058" ID="ID_1300765185" MODIFIED="1728786272700" TEXT="Buffer bereitstellen und entgegennehmen">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728786238817" ID="ID_318249772" MODIFIED="1728786266440" TEXT="Aufrufpfad auf TestFrame umstellen">
<icon BUILTIN="hourglass"/>
</node>
</node>
<node BACKGROUND_COLOR="#d2beaf" COLOR="#5c4d6e" CREATED="1728786202710" ID="ID_503859904" MODIFIED="1728786220493" TEXT="Berechnungs-Verifikation aufbauen">
<icon BUILTIN="hourglass"/>
<node BACKGROUND_COLOR="#fdfdcf" COLOR="#ff0000" CREATED="1728786300177" ID="ID_317306309" MODIFIED="1728786323798" TEXT="Formale Anordnung in der Test-Ontology festlegen">
<icon BUILTIN="flag-pink"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786339907" ID="ID_1615772928" MODIFIED="1728786355508" TEXT="generische Funktion per hash_combine bereitstellen">
<icon BUILTIN="flag-yellow"/>
</node>
<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="#eee5c3" COLOR="#990000" CREATED="1728786385349" ID="ID_442258905" MODIFIED="1728786701217" TEXT="Umbau TestFrame">
<arrowlink COLOR="#713558" DESTINATION="ID_257931093" ENDARROW="Default" ENDINCLINATION="-239;12;" ID="Arrow_ID_121875527" STARTARROW="None" STARTINCLINATION="-1098;-101;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728786417609" ID="ID_1581017843" MODIFIED="1728786427298" TEXT="Test-Hilfsmittel: TestFrame">
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786430299" ID="ID_257931093" LINK="#ID_594112005" MODIFIED="1728786713175" TEXT="Refactoring f&#xfc;r Node-Invocation (#1367 | #1372)">
<linktarget COLOR="#713558" DESTINATION="ID_257931093" ENDARROW="Default" ENDINCLINATION="-239;12;" ID="Arrow_ID_121875527" SOURCE="ID_442258905" STARTARROW="None" STARTINCLINATION="-1098;-101;"/>
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728786565516" ID="ID_1372116679" MODIFIED="1728786873689" TEXT="&#xdc;berlegungen zum notwendigen Ausbau">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
TestFrame wurde zwar schon 2011 angelegt, soll nun (2024) aber auch die Basis f&#252;r eine Test-Ontology werden; die Analyse ergab, da&#223; die vorhandene Funktionalit&#228;t hierf&#252;r lediglich ma&#223;voll erweitert werden mu&#223;:
</p>
<ul>
<li>
das Datenlayout im Speicher sollte konsistenter sein
</li>
<li>
wir brauchen einen dedizierten Metadaten-Block, der aber optional ist
</li>
<li>
die Zufallsberechnung bleibt inhaltlich komplett gleich, aber wird umgestellt auf std::random
</li>
<li>
zus&#228;tzlich wird noch eine Hashberechnung &#252;ber die konkreten Datenwerte hinzugef&#252;gt
</li>
</ul>
</body>
</html></richcontent>
<arrowlink COLOR="#943e5b" DESTINATION="ID_939285679" ENDARROW="Default" ENDINCLINATION="-1142;-205;" ID="Arrow_ID_1632825391" STARTARROW="None" STARTINCLINATION="722;48;"/>
</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>
<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"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728787025826" ID="ID_1972770219" MODIFIED="1728787040943" TEXT="Accessor und Iteration">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728786962056" ID="ID_231763184" MODIFIED="1728787040943" TEXT="Verifikations-Methoden">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1728786973094" ID="ID_899991782" MODIFIED="1728786978286" TEXT="Datenpr&#xfc;fsumme"/>
<node CREATED="1728786979373" ID="ID_772580400" MODIFIED="1728786987393" TEXT="Metadaten-Erkennung"/>
<node CREATED="1728786988308" ID="ID_103079985" MODIFIED="1728786992576" TEXT="Pr&#xe4;dikate">
<node CREATED="1728779817892" ID="ID_882765451" MODIFIED="1728779971755" TEXT="isSane">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
<b>neue Bedeutung</b>: es ist ein TestFrame mit erkennbarem Metadatenblock (auch wenn ansonsten keine der Pr&#252;fsummen mit den Daten zusammenpa&#223;t); es sollte recht unwahrscheinlich sein, da&#223; ein zuf&#228;lliger Datenblock diesen Test besteht.
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1728779408099" ID="ID_1517743638" MODIFIED="1728779644910" TEXT="isValid">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
Es ist ein TestFrame mit g&#252;ltigem Metadaten-Block, und die dort gespeicherte Pr&#252;fsumme wird durch die Daten best&#228;tigt
</p>
</body>
</html></richcontent>
</node>
<node CREATED="1728779415747" ID="ID_1413902264" MODIFIED="1728779750157" TEXT="isPristine">
<richcontent TYPE="NOTE"><html>
<head/>
<body>
<p>
entspricht dem bisherigen isSane() &#8212; d.h. isValid() aber zus&#228;tzlich passen die Daten auf die gespeicherte distinction, und das hei&#223;t, die Daten wurden vom Standard-Schema erzeugt und nicht weiter bearbeitet
</p>
</body>
</html></richcontent>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
</node>
<node CREATED="1719968038589" HGAP="38" ID="ID_177982013" MODIFIED="1719968051367" TEXT="Feststellungen" VSHIFT="30">
<icon BUILTIN="forward"/>
@ -89820,6 +90315,19 @@ Date:&#160;&#160;&#160;Thu Apr 20 18:53:17 2023 +0200<br/>
<icon BUILTIN="help"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1719964797735" ID="ID_742525092" MODIFIED="1719964805319" TEXT="minimale Repr&#xe4;sentation">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785389611" ID="ID_1739123990" MODIFIED="1728785407014" TEXT="durch einen Builder-Term">
<icon BUILTIN="idea"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785412252" ID="ID_840817870" MODIFIED="1728785425910" TEXT="mit Binden einer Processing-Function">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1728785339793" HGAP="96" ID="ID_1367192130" MODIFIED="1728785358620" TEXT="eine reine Quell-Node" VSHIFT="-13">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1728785462721" ID="ID_623146928" MODIFIED="1728785648725" TEXT="Prototyping des Aufrufs">
<arrowlink COLOR="#ed384d" DESTINATION="ID_1973895762" ENDARROW="Default" ENDINCLINATION="-1324;220;" ID="Arrow_ID_95845616" STARTARROW="None" STARTINCLINATION="481;51;"/>
<icon BUILTIN="pencil"/>
</node>
</node>
</node>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1719185943913" ID="ID_393811539" MODIFIED="1719185992634" TEXT="was ist die Identit&#xe4;t einer Node?">