Segmentation: draft simple mock-based setup for tests

- how to pass-in a specification given as GenNode
- now this might be translated into a MockJobTicket allocated in the MockSegmentation

Unimplemented: actually build the Segment with suitable start/end time
This commit is contained in:
Fischlurch 2023-05-01 17:02:11 +02:00
parent 56405b2e2d
commit a807705185
4 changed files with 90 additions and 18 deletions

View file

@ -150,6 +150,16 @@ namespace test {
SpecTuple(DummyJob::getFunctor(), 0, emptyPrereq));
}
inline auto
defineSimpleSpec (HashVal seed) /////////////////TODO collapse with defineBottomSpec() ??
{
auto emptyPrereq = lib::nilIterator<JobTicket&>();
using Iter = decltype(emptyPrereq);
using SpecTuple = std::tuple<JobFunctor&, HashVal, Iter>;
return lib::singleValIterator(
SpecTuple(DummyJob::getFunctor(), seed, emptyPrereq));
}
}//(End)internal test helpers....
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #1221
@ -169,9 +179,14 @@ namespace test {
public:
MockJobTicket()
: JobTicket{defineBottomSpec()}
{ };
{ }
MockJobTicket (HashVal seed)
: JobTicket{defineSimpleSpec (seed)}
{ }
bool verify_associated (Job const&) const;
static bool isAssociated (Job const&, JobTicket const&);
private:
};
@ -190,7 +205,11 @@ namespace test {
MockSegmentation (std::initializer_list<GenNode> specs)
: MockSegmentation{}
{
UNIMPLEMENTED ("populate mock sequence structure");
for (auto& spec : specs)
{
auto seed = spec.retrieveAttribute<HashVal>("mark");
tickets_.emplace_back (seed? *seed : HashVal(rand() % 1000));
}
}
};
@ -211,6 +230,19 @@ namespace test {
and this->verifyInstance(functor, invoKey, nominalTime);
}
/**
* convenience shortcut to perform [this test](\ref MockJobTicket::verify_associated)
* on arbitrary JobTicket and Job instances.
* @warning a positive test result however relies on some casting trickery and there is no
* guarantee this test works if the JobTicket was not created from this mock framework.
*/
inline bool
MockJobTicket::isAssociated (Job const& job, JobTicket const& ticket)
{ // should work always, since storage is the same
MockJobTicket const& backdoor = static_cast<MockJobTicket const&> (ticket);
return backdoor.verify_associated (job);
}
}}} // namespace steam::engine::test

View file

@ -139,11 +139,32 @@ namespace test {
void
verify_MockSegmentation()
{
MockSegmentation mockSeg;
CHECK (1 == mockSeg.size());
Time arbitraryTime = lib::test::randTime();
JobTicket const& ticket = mockSeg[arbitraryTime].jobTicket();
CHECK (util::isSameObject (ticket, JobTicket::NOP));
FrameCoord coord;
Time someTime = lib::test::randTime();
coord.absoluteNominalTime = someTime;
{
MockSegmentation mockSeg;
CHECK (1 == mockSeg.size());
JobTicket const& ticket = mockSeg[someTime].jobTicket();
CHECK (util::isSameObject (ticket, JobTicket::NOP));
}
{
MockSegmentation mockSeg{MakeRec().genNode()};
CHECK (1 == mockSeg.size());
JobTicket const& ticket = mockSeg[someTime].jobTicket();
CHECK (not util::isSameObject (ticket, JobTicket::NOP));
Job someJob = ticket.createJobFor(coord);
CHECK (MockJobTicket::isAssociated (someJob, ticket));
CHECK (not DummyJob::was_invoked (someJob));
someJob.triggerJob();
CHECK (DummyJob::was_invoked (someJob));
CHECK (RealClock::wasRecently (DummyJob::invocationTime (someJob)));
CHECK (someTime == DummyJob::invocationNominalTime (someJob));
}
TODO ("cover details of MockSegmentation");
}
};

View file

@ -156,7 +156,7 @@ namespace test{
auto o0 = MakeRec().genNode();
auto o1 = MakeRec().genNode("νόμος");
auto o2 = MakeRec().type("spam").genNode();
auto o3 = MakeRec().attrib("Ψ", int64_t(42), "π", 3.14159265358979323846264338328).genNode("λόγος");
auto o3 = MakeRec().attrib("Ψ", int64_t(42), "π", 3.14159265358979323846264338328).genNode("μάθησις");
CHECK (!o0.isNamed());
CHECK (isnil(o0.data.get<Rec>()));
@ -171,7 +171,7 @@ namespace test{
CHECK (isnil(o2.data.get<Rec>()));
CHECK (o3.isNamed());
CHECK ("λόγος" == o3.idi.getSym());
CHECK ("μάθησις" == o3.idi.getSym());
CHECK ("NIL" == o3.data.get<Rec>().getType());
CHECK (GenNode("Ψ", int64_t(42)) == o3.data.get<Rec>().get("Ψ"));
CHECK (42L == o3.data.get<Rec>().get("Ψ").data.get<int64_t>());

View file

@ -69645,8 +69645,8 @@
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1681832899812" ID="ID_1664606019" MODIFIED="1682047865205" TEXT="GenNode-basierter Implementierungs-Kern">
<linktarget COLOR="#fef7d1" DESTINATION="ID_1664606019" ENDARROW="Default" ENDINCLINATION="139;-4;" ID="Arrow_ID_1184218305" SOURCE="ID_581175494" STARTARROW="None" STARTINCLINATION="13;150;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681833031252" HGAP="29" ID="ID_1232985944" MODIFIED="1681833059957" TEXT="leer" VSHIFT="14">
<icon BUILTIN="flag-yellow"/>
<node COLOR="#338800" CREATED="1681833031252" HGAP="29" ID="ID_1232985944" MODIFIED="1682953126289" TEXT="leer" VSHIFT="14">
<icon BUILTIN="button_ok"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1681833034545" ID="ID_1378629902" MODIFIED="1681833049605" TEXT="rekursiv mit Prerequisite">
<icon BUILTIN="flag-yellow"/>
@ -69871,9 +69871,9 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682627654491" ID="ID_1371147624" MODIFIED="1682627673234" TEXT="Marker definieren und sichtbar machen">
<node COLOR="#5b280f" CREATED="1682627654491" ID="ID_1371147624" MODIFIED="1682948581383" TEXT="Marker definieren und sichtbar machen">
<linktarget COLOR="#48417c" DESTINATION="ID_1371147624" ENDARROW="Default" ENDINCLINATION="-48;56;" ID="Arrow_ID_1753796050" SOURCE="ID_1110039315" STARTARROW="None" STARTINCLINATION="-284;-8;"/>
<icon BUILTIN="flag-yellow"/>
<icon BUILTIN="button_cancel"/>
<node BACKGROUND_COLOR="#f0d5c5" COLOR="#990033" CREATED="1682641810117" ID="ID_596391717" MODIFIED="1682641823784" TEXT="Problem: wie integieren?">
<icon BUILTIN="messagebox_warning"/>
<node CREATED="1682641827594" ID="ID_361324923" MODIFIED="1682641841154" TEXT="JobTicket selber hat keine VTable">
@ -69971,6 +69971,10 @@
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682948593099" HGAP="-167" ID="ID_924000740" MODIFIED="1682948640643" STYLE="bubble" TEXT="stattdessen: verifizieren" VSHIFT="-5">
<edge COLOR="#1d699e"/>
<icon BUILTIN="idea"/>
</node>
</node>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682205189643" ID="ID_897564380" MODIFIED="1682205211467" TEXT="Problem: Umbau in JobTicket selber blockt">
<icon BUILTIN="stop-sign"/>
@ -69990,8 +69994,8 @@
</node>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682385376739" ID="ID_576604811" MODIFIED="1682385391451" TEXT="Mock-Implementierung">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682385376739" ID="ID_576604811" MODIFIED="1682948833179" TEXT="Mock-Implementierung">
<icon BUILTIN="pencil"/>
<node CREATED="1682385392969" ID="ID_1317765253" MODIFIED="1682385456612" TEXT="Storage">
<node CREATED="1682385491724" ID="ID_1049416610" MODIFIED="1682385544239" TEXT="JobTickets in eine Deque allozieren">
<richcontent TYPE="NOTE"><html>
@ -70010,8 +70014,8 @@
<node CREATED="1682385963140" ID="ID_1239158970" MODIFIED="1682385993315" TEXT="also MockSegmentation, MockJobTicket,..."/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682614081119" ID="ID_57760675" MODIFIED="1682614090109" TEXT="Interpretieren der jeweilgen Spec">
<icon BUILTIN="flag-yellow"/>
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682614081119" ID="ID_57760675" MODIFIED="1682948825902" TEXT="Interpretieren der jeweilgen Spec">
<icon BUILTIN="pencil"/>
<node CREATED="1682614092900" ID="ID_1252815318" MODIFIED="1682614105470" TEXT="Basis-Impl: ein Segment gibt es immer"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682614117409" ID="ID_1176991982" MODIFIED="1682614138327" TEXT="splitSplice() implementieren">
<icon BUILTIN="flag-yellow"/>
@ -70019,10 +70023,25 @@
<icon BUILTIN="messagebox_warning"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682627621082" ID="ID_1110039315" MODIFIED="1682627678946" TEXT="ein Segment hinzuf&#xfc;gen">
<node BACKGROUND_COLOR="#eef0c5" COLOR="#990000" CREATED="1682627621082" ID="ID_1110039315" MODIFIED="1682948822157" TEXT="ein Segment hinzuf&#xfc;gen">
<arrowlink COLOR="#48417c" DESTINATION="ID_1371147624" ENDARROW="Default" ENDINCLINATION="-48;56;" ID="Arrow_ID_1753796050" STARTARROW="None" STARTINCLINATION="-284;-8;"/>
<icon BUILTIN="pencil"/>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682948783048" ID="ID_1811722913" MODIFIED="1682948817094" TEXT="leere Spec">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682948658996" ID="ID_1655049197" MODIFIED="1682948817094" TEXT="einfachste Spec">
<icon BUILTIN="flag-yellow"/>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682948807668" ID="ID_343017535" MODIFIED="1682948817095" TEXT="zus&#xe4;tzlich mit Marker">
<icon BUILTIN="flag-yellow"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682948677800" ID="ID_1669789277" MODIFIED="1682948685167" TEXT="zwei Segmente">
<icon BUILTIN="flag-yellow"/>
<node CREATED="1682948692446" ID="ID_1376099012" MODIFIED="1682948701915" TEXT="disjunkt"/>
<node CREATED="1682948687990" ID="ID_691398450" MODIFIED="1682948721008" TEXT="&#xfc;berlappend"/>
<node CREATED="1682948709980" ID="ID_1056091678" MODIFIED="1682948718791" TEXT="verschachtelt"/>
</node>
</node>
<node BACKGROUND_COLOR="#eee5c3" COLOR="#990000" CREATED="1682385895644" ID="ID_89969390" MODIFIED="1682385902557" TEXT="Verifikation im Test unterst&#xfc;tzen">
<icon BUILTIN="flag-yellow"/>