diff --git a/tests/core/steam/engine/job-planning-setup-test.cpp b/tests/core/steam/engine/job-planning-setup-test.cpp index 26d10722a..2c5ba9803 100644 --- a/tests/core/steam/engine/job-planning-setup-test.cpp +++ b/tests/core/steam/engine/job-planning-setup-test.cpp @@ -26,11 +26,13 @@ #include "lib/test/run.hpp" -#include "lib/error.hpp" +#include "lib/test/test-helper.hpp" #include "steam/engine/mock-dispatcher.hpp" #include "vault/engine/dummy-job.hpp" #include "lib/format-cout.hpp"///////////////////////TODO +#include "lib/iter-tree-explorer.hpp" +#include "lib/format-util.hpp" //#include "steam/engine/job-planning.hpp" @@ -38,6 +40,10 @@ using test::Test; //using std::rand; +using lib::eachNum; +using lib::treeExplore; +using lib::time::PQuant; +using lib::time::FrameRate; namespace steam { @@ -45,9 +51,24 @@ namespace engine{ namespace test { using vault::engine::DummyJob; + using lib::time::FixedFrameQuantiser; namespace { // test fixture... + /** Diagnostic helper: join all the elements from some given container or iterable */ + template + inline string + materialise (II&& ii) + { + return util::join (std::forward (ii), "-"); + } + + inline PQuant + frameGrid (FrameRate fps) + { + return PQuant (new FixedFrameQuantiser (fps)); + } + } // (End) test fixture @@ -75,7 +96,6 @@ namespace test { run (Arg) { demonstrateScaffolding(); - UNIMPLEMENTED ("shape the interface of the job-planning pipeline"); buildBaseTickGenerator(); accessTopLevelJobTicket(); exploreJobTickets(); @@ -130,11 +150,24 @@ namespace test { /** @test use the Dispatcher interface (mocked) to generate a frame »beat« + * - demonstrate explicitly the mapping of a (frame) number sequence + * onto a sequence of time points with the help of time quantisation * @remark this is the foundation to generate top-level frame render jobs */ void buildBaseTickGenerator() { + auto grid = frameGrid(FrameRate::PAL); + + CHECK (materialise ( + treeExplore (eachNum(5,13)) + .transform([&](FrameCnt frameNr) -> TimeVar + { + return grid->timeOf (frameNr); + }) + ) + == "200ms-240ms-280ms-320ms-360ms-400ms-440ms-480ms"_expect); + UNIMPLEMENTED ("foundation of state core"); } diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 82846a6c9..caa850860 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -56926,17 +56926,20 @@ - - - - + + + + - + - + + + + @@ -56959,11 +56962,12 @@ - - + + - - + + + @@ -56984,12 +56988,28 @@ - + + + + + + + + + +

+ einfach und minimalistisch implementiert — und zudem sind undendliche Folgen nur etwas für Mathematiker und Freunde der funktionalen Programmierung; in der Praxis braucht man zwingend stets eine Abbruch-Bedingung, allein schon weil sonst die Engine „Amok laufen“ könnte (man bedenke nur, daß die interne Zeit-Repräsentation bereits lange vor der Frame-Nummer wrappt) +

+ +
+ +
- + + @@ -57000,29 +57020,16 @@

- - - - - - - -

- denn der Standard-Fall ist die unendliche Sequenz — und diese darf keinerlei unnötigen Ballast haben; weder einen Funktor (storage!), noch einen letztlich unnötigen Prädikat-Aufruf (denn sie läuft „für immer“) -

- -
- -
- - - + + + + - + @@ -57038,21 +57045,33 @@ + - + - + - + + - + + + + + + + + + + + @@ -73258,8 +73277,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - + + @@ -73371,9 +73390,27 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - - + + + + + + + + + + + + + +

+ allein schon, weil wir eine limitierte Domäne haben bezüglich lib::time::Time +

+ +
+ + +
@@ -73467,7 +73504,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + @@ -73478,8 +73515,14 @@ Date:   Thu Apr 20 18:53:17 2023 +0200

+ + + + + +