diff --git a/tests/vault/gear/test-chain-load-test.cpp b/tests/vault/gear/test-chain-load-test.cpp index 5ac7e8091..660523c58 100644 --- a/tests/vault/gear/test-chain-load-test.cpp +++ b/tests/vault/gear/test-chain-load-test.cpp @@ -227,9 +227,9 @@ namespace test { node->calculate(); CHECK (exHash == node->hash); - // explicitly compute the hash using boost::hash + // explicitly compute the hash (formula taken from boost) node->hash = 0; - boost::hash_combine (node->hash, node->pred[0]->hash); + lib::hash::combine (node->hash, node->pred[0]->hash); CHECK (exHash == node->hash); } // got a complete chain using all allocated nodes @@ -240,7 +240,7 @@ namespace test { // Since this graph has only a single exit-node, // the global hash of the graph is derived from this hash size_t globalHash{0}; - boost::hash_combine (globalHash, node->hash); + lib::hash::combine (globalHash, node->hash); CHECK (globalHash == graph.getHash()); CHECK (globalHash == 0xB3445F1240A1B05F); } @@ -942,7 +942,7 @@ namespace test { size_t combinedHash{0}; for (uint i=0; i <16; ++i) - boost::hash_combine (combinedHash, exitHashes[i]); + lib::hash::combine (combinedHash, exitHashes[i]); CHECK (graph.getHash() == combinedHash); CHECK (graph.getHash() == 0x33B00C450215EB00); diff --git a/tests/vault/gear/test-chain-load.hpp b/tests/vault/gear/test-chain-load.hpp index b0dc73648..b534c2c0f 100644 --- a/tests/vault/gear/test-chain-load.hpp +++ b/tests/vault/gear/test-chain-load.hpp @@ -124,11 +124,11 @@ #include "lib/iter-explorer.hpp" #include "lib/format-string.hpp" #include "lib/format-cout.hpp" +#include "lib/hash-combine.hpp" #include "lib/random-draw.hpp" #include "lib/dot-gen.hpp" #include "lib/util.hpp" -#include #include #include #include @@ -331,7 +331,7 @@ namespace test { calculate() { for (Node* entry: pred) - boost::hash_combine (hash, entry->hash); + lib::hash::combine(hash, entry->hash); return hash; } @@ -421,11 +421,11 @@ namespace test { size_t getHash() const { - auto combineBoostHashes = [](size_t h, size_t hx){ boost::hash_combine(h,hx); return h;}; + auto combineHashes = [](size_t h, size_t hx){ lib::hash::combine(h,hx); return h;}; return allExitHashes() .filter([](size_t h){ return h != 0; }) .reduce(lib::iter_explorer::IDENTITY - ,combineBoostHashes + ,combineHashes ); } @@ -1392,7 +1392,7 @@ namespace test { Sink sink; size_t scree{sink}; for ( ; 0 < round; --round) - boost::hash_combine (scree,scree); + lib::hash::combine (scree,scree); sink = scree; sink++; } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 600d7c8c0..7f8f6df8c 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -59580,9 +59580,62 @@ - + + + + + + + + + + + + +

+ jetzt zeigt sich bereits, daß wir locked-in sind: +

+

+ der ganze aufwendige Test für die Scheduler Test-Chain-Load verwendet Hash-Chaining zur Verifikation; zwar sind das erst mal nur die Prüfsummen, weil die Topologie zum Glück aus einer zu Fuß programmierten, deterministischen Auswahl-Mechanik gebaut wird; als könnte man theoretisch dieses Mal noch eine neue Hash-Funktion nehmen, und müßte dann halt alle Hashes neu berechnen und im Test aktualisieren. Aber dieser Fall zeigt bereits, welche Bedeutung Hash-Werte bald spielen könnten. +

+

+ Und daß wir nun nicht mehr einfach so die Verbesserungen von Upstream mitnehmen können. +

+

+ Und daß wir jetzt in einer einzigen Plattform festsitzen +

+ +
+
+ + + + +

+ Und zwar sowas von froh! +

+
    +
  • + Daß ich das noch rechtzeitig „geschnallt“ habe, und ohne viel Nachdenken die bestehende Boost-Implementierung in-Tree genommen habe. +
  • +
  • + Daß ich derart vollständige und pedantische Tests geschrieben habe, die auch die Hash-Berechnung im Einzelnen nachzeichnen +
  • +
  • + Und daß ich die Zeit in eine selbst programmierte Graph-Generierung gesteckt habe, anstatt schnell irgend etwas "mit Hashes" zu zaubern. +
  • +
+

+ Dadurch kann ich jetzt auf die alte Implementierung umstellen (die in unserer Library in-Tree liegt), und weiß sofort, daß die Graph-Topologie unverändert ist. +

+ +
+ +
+
+
@@ -59995,6 +60048,7 @@ +
@@ -161795,9 +161849,7 @@ Since then others have made contributions, see the log for the history. - - - +

...und nicht über einen Umweg; ich bin ja mit dem Debugger durchgesteppt. Obwohl theoretisch der getemplatete Konstruktor gepaßt hätte, war nichts von zwei Iterationen über Attribute und Kinder zu sehen. Und mehr noch: wie würden wir wieder zu einem Mutator-Typ kommen, mit dem wir wieder in den selben Konstruktor einsteigen @@ -161818,9 +161870,7 @@ Since then others have made contributions, see the log for the history. - - - +

die allesamt noch gar nicht initialisiert sind @@ -161831,9 +161881,7 @@ Since then others have made contributions, see the log for the history. - - - +

dann scheitert die Compilation an anderer Stelle, nämlich an der Initialisierung einer Referenz Rec& root = target. Aber generic-record-test.cpp compiliert ohne Fehler @@ -161881,9 +161929,7 @@ Since then others have made contributions, see the log for the history. - - - +

Überraschung: wer sich in den Fuß schießt, schießt sich in den Fuß @@ -161899,9 +161945,7 @@ Since then others have made contributions, see the log for the history. - - - +

...ohne die implizite Annahme eines Layout, einfach indem ich den Overflow-Frame gleich per placement-New erzeuge; dann kann man trotzdem immer noch zeigen, daß die Daten weiterhin in der UninitialisedStorage liegen und dort verwendet werden können @@ -161911,8 +161955,67 @@ Since then others have made contributions, see the log for the history. - + + + + + + + +

+ sollte da ... die Topologie nicht stabil sein....? +

+

+ Dann wäre der gesamte aufwendige Scheduler-Stress-Test (für den ich Monate an Arbeit versenkt habe) »auf Sand gebaut« +

+ +
+ +
+ + + + + + +

+ ...als damals in 1.67, von wo ich die interne Implementierung für Lumiera genommen und eingefrohren hatte +

+ +
+ + +
+ + + + + + + + + +

+ SCHWEIN gehabt +

+ + +
+
+ + + + + + + + +
+
+ + +