diff --git a/tests/vault/gear/scheduler-commutator-test.cpp b/tests/vault/gear/scheduler-commutator-test.cpp index 55e0d7d05..c7e055dd0 100644 --- a/tests/vault/gear/scheduler-commutator-test.cpp +++ b/tests/vault/gear/scheduler-commutator-test.cpp @@ -98,6 +98,7 @@ namespace test { torture_GroomingToken(); verify_DispatchDecision(); verify_findWork(); + verify_Significance(); verify_postDispatch(); integratedWorkCycle(); } @@ -347,6 +348,85 @@ namespace test { + /** @test verify that obsoleted or rejected entries are dropped transparently + * - add entries providing extra information regarding significance + * - verify that missing the deadline is detected + * - entries past deadline will be dropped when pulling for work + * - entries tagged with an ManifestationID can be disabled and + * will be automatically disposed. + * - an entry marked as _compulsory_ will block that process + * when missing it's deadline + */ + void + verify_Significance() + { + SchedulerInvocation queue; + SchedulerCommutator sched; + + Time t1{10,0}; Activity a1{1u,1u}; + Time t2{20,0}; Activity a2{2u,2u}; + Time t3{30,0}; Activity a3{3u,3u}; + Time t4{40,0}; Activity a4{4u,4u}; + + queue.instruct (a1, t1, t4, ManifestationID{5}); + queue.instruct (a2, t2, t3); + queue.instruct (a3, t3, t3, ManifestationID{23}, true); + queue.instruct (a4, t4, t4); + queue.activate(ManifestationID{5}); + queue.activate(ManifestationID{23}); + + queue.feedPrioritisation(); + CHECK (t1 == queue.headTime()); + CHECK (isSameObject (a1, *queue.peekHead())); + CHECK (not queue.isMissed(t1)); + CHECK (not queue.isOutdated(t1)); + + queue.drop(ManifestationID{5}); + CHECK (t1 == queue.headTime()); + CHECK (not queue.isMissed(t1)); + CHECK ( queue.isOutdated(t1)); + + CHECK (not sched.findWork(queue, t1)); + CHECK (t2 == queue.headTime()); + CHECK (not queue.isMissed (t2)); + CHECK (not queue.isOutdated(t2)); + CHECK ( queue.isMissed (t3)); + CHECK ( queue.isOutdated(t3)); + + CHECK (not sched.findWork(queue, t2)); + CHECK (t3 == queue.headTime()); + CHECK (not queue.isMissed (t3)); + CHECK (not queue.isOutdated (t3)); + CHECK (not queue.isOutOfTime(t3)); + CHECK ( queue.isMissed (t4)); + CHECK ( queue.isOutdated (t4)); + CHECK ( queue.isOutOfTime(t4)); + + CHECK (not sched.findWork(queue, t4)); + CHECK (t3 == queue.headTime()); + CHECK (not queue.isMissed (t3)); + CHECK (not queue.isOutdated (t3)); + CHECK (not queue.isOutOfTime(t3)); + CHECK ( queue.isMissed (t4)); + CHECK ( queue.isOutdated (t4)); + CHECK ( queue.isOutOfTime(t4)); + + queue.drop(ManifestationID{5}); + CHECK (t3 == queue.headTime()); + CHECK (not queue.isMissed (t3)); + CHECK ( queue.isOutdated (t3)); + CHECK (not queue.isOutOfTime(t3)); + CHECK ( queue.isMissed (t4)); + CHECK ( queue.isOutdated (t4)); + CHECK (not queue.isOutOfTime(t4)); + + CHECK (isSameObject (a3, *queue.peekHead())); + CHECK (isSameObject (a4, *sched.findWork(queue, t4))); + CHECK (queue.empty()); + } + + + /** @test verify entrance point for performing an Activity chain. */ void diff --git a/tests/vault/gear/scheduler-invocation-test.cpp b/tests/vault/gear/scheduler-invocation-test.cpp index e8e0b579c..55dd05483 100644 --- a/tests/vault/gear/scheduler-invocation-test.cpp +++ b/tests/vault/gear/scheduler-invocation-test.cpp @@ -192,7 +192,7 @@ namespace test { - /** @test verify that obsoleted or rejected entries are dropped transparently + /** @test verify extended classification data and information functions at scheduler head * - add entries providing extra information regarding significance * - verify that missing the deadline is detected * - entries past deadline are marked _outdated_ (will be dropped by Layer-2) @@ -233,6 +233,9 @@ namespace test { CHECK ( sched.isMissed (Time{4,0})); CHECK ( sched.isDue (Time{4,0})); + sched.activate (ManifestationID{23}); + CHECK (not sched.isOutdated (Time{1,0})); + sched.drop (ManifestationID{5}); CHECK (Time(1,0) == sched.headTime()); CHECK ( sched.isOutdated (Time{1,0})); @@ -241,12 +244,9 @@ namespace test { CHECK (not sched.isMissed (Time{1,0})); CHECK ( sched.isDue (Time{1,0})); - sched.feedPrioritisation (act, Time{0,0}, Time{2,0}, ManifestationID{5}, true); - CHECK (Time(0,0) == sched.headTime()); // ^^^^ marked as compulsory + sched.feedPrioritisation (act, Time{0,0}, Time{2,0}, ManifestationID{23}, true); + CHECK (Time(0,0) == sched.headTime()); // ^^^^ marked as compulsory CHECK (not sched.isMissed (Time{1,0})); - CHECK ( sched.isOutdated (Time{1,0})); // marked as outdated since manifestation 5 is not activated - - sched.activate (ManifestationID{5}); CHECK (not sched.isOutdated (Time{1,0})); CHECK (not sched.isOutOfTime(Time{2,0})); // still OK /at/ deadline CHECK ( sched.isOutOfTime(Time{3,0})); // ↯ past deadline yet marked as compulsory @@ -254,10 +254,13 @@ namespace test { CHECK ( sched.isMissed (Time{3,0})); sched.drop (ManifestationID{5}); + CHECK ( sched.isOutOfTime(Time{3,0})); // Manifestation-5 is altogether irrelevant for this case + + sched.drop (ManifestationID{23}); CHECK (Time(0,0) == sched.headTime()); CHECK ( sched.isOutdated (Time{1,0})); CHECK (not sched.isOutOfTime(Time{2,0})); - CHECK (not sched.isOutOfTime(Time{3,0})); // the disabled manifestation masks the fatal out-of-time state + CHECK (not sched.isOutOfTime(Time{3,0})); // the disabled manifestation-23 masks the fatal out-of-time state CHECK ( sched.isOutdated (Time{3,0})); CHECK ( sched.isMissed (Time{3,0})); diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index 3d18b9646..8a7cd7e28 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -82186,8 +82186,8 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + @@ -84219,6 +84219,22 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
+ + + + + + + + + +

+ brauche generische Informationsfunktion isOutdated() +

+ + +
+
@@ -84252,8 +84268,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- - +
@@ -84265,8 +84280,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
diese spezielle Marker-ID wird implizit stets freigeschaltet, kann also später nicht verworfen werden; das erscheint mir ein sinnvoller Default

- -
+
@@ -84278,8 +84292,7 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
verpflichtende Activities sind ebenfalls ein Feature, das eigentlich erst auf Scheduler-Level angesiedelt ist, und hier nur den entsprechenden Support braucht

- -
+
@@ -84316,12 +84329,30 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
also gehört diese Operation in Layer-2

+ + + + + + + + +

+ damit: direkt in findWork(now) +

+
-
+ + + + + + + @@ -89148,11 +89179,12 @@ Date:   Thu Apr 20 18:53:17 2023 +0200
- + - + +