Up to now, a draft/mock implementation was used, relying on a »spec tuple«, which was fabricated by MockJobTicket. But with the introduction of NodeGraphAttachment, the MockSequence now generates a nested ExitNode structure, and thus the JobTicket will be created through the "real" ctor, and no longer via MockJobTicket. Thus it is possible to skip this whole interspersed »spec tuple«, since ExitNode *is* already this aggregated / abstracted Spec
137 lines
4.9 KiB
C++
137 lines
4.9 KiB
C++
/*
|
|
FixtureSegment(Test) - verify properties of a single segment in the fixture
|
|
|
|
Copyright (C) Lumiera.org
|
|
2023, Hermann Vosseler <Ichthyostega@web.de>
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of
|
|
the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
|
|
* *****************************************************/
|
|
|
|
/** @file node-graph-attachment-test.cpp
|
|
** unit test \ref NodeGraphAttachment_test
|
|
*/
|
|
|
|
|
|
#include "lib/test/run.hpp"
|
|
#include "steam/fixture/node-graph-attachment.hpp"
|
|
#include "steam/engine/mock-dispatcher.hpp"
|
|
#include "steam/engine/frame-coord.hpp"
|
|
#include "steam/engine/exit-node.hpp"
|
|
#include "lib/util.hpp"
|
|
|
|
#include <utility>
|
|
|
|
|
|
namespace steam {
|
|
namespace fixture {
|
|
namespace test {
|
|
|
|
using std::move;
|
|
using util::isnil;
|
|
using util::isSameObject;
|
|
using engine::ExitNode;
|
|
using lib::diff::MakeRec;
|
|
|
|
using engine::Job;
|
|
using engine::JobTicket;
|
|
using engine::test::MockSegmentation;
|
|
|
|
|
|
/*****************************************************************************//**
|
|
* @test Verify properties and behaviour of a single Segment in the Segmentation
|
|
* - construction of a mocked Segment
|
|
* - TODO
|
|
* - TODO
|
|
* @see steam::fixture::Segment
|
|
* @see JobPlanningSetup_test
|
|
* @see MockSupport_test
|
|
*/
|
|
class FixtureSegment_test : public Test
|
|
{
|
|
|
|
virtual void
|
|
run (Arg)
|
|
{
|
|
fabricate_MockSegment();
|
|
retrieve_JobTicket();
|
|
}
|
|
|
|
|
|
/** @test setup a properly structured ExitNode graph using the
|
|
* specification scheme supported by MockSegmentation
|
|
* @see MockSupport_test::verify_MockSegmentation
|
|
*/
|
|
void
|
|
fabricate_MockSegment()
|
|
{
|
|
// Build a Segmentation partitioned at 10s
|
|
MockSegmentation segmentation{MakeRec()
|
|
.attrib ("start", Time{0,10}
|
|
,"mark", 101010)
|
|
.genNode()};
|
|
CHECK (2 == segmentation.size());
|
|
Segment const& seg = segmentation[Time{0,20}]; // access anywhere >= 10s
|
|
CHECK (Time(0,10) == seg.start());
|
|
CHECK (Time::NEVER == seg.after());
|
|
CHECK (101010 == seg.exitNode[0].getPipelineIdentity());
|
|
}
|
|
|
|
|
|
/** @test on-demand generate a JobTicket from an existing NodeGraphAttachment
|
|
*/
|
|
void
|
|
retrieve_JobTicket()
|
|
{
|
|
MockSegmentation segmentation{MakeRec()
|
|
.attrib("mark", 13) // top-level: marked with hash/id = 13
|
|
.scope(MakeRec() // ... defines two nested prerequisites
|
|
.attrib("mark",23) // + Prerequisite-1 hash/id = 23
|
|
.genNode()
|
|
,MakeRec()
|
|
.attrib("mark",55) // + Prerequisite-2 hash/id = 55
|
|
.genNode()
|
|
)
|
|
.genNode()};
|
|
CHECK (1 == segmentation.size()); // whole time axis covered by one segment
|
|
Segment const& seg = segmentation[Time::ANYTIME]; // thus accessed time point is irrelevant
|
|
|
|
// verify mapped JobTicket is assembled according to above spec...
|
|
auto getMarker = [](JobTicket const& ticket)
|
|
{
|
|
engine::FrameCoord dummyFrame;
|
|
Job job = ticket.createJobFor(dummyFrame);
|
|
return job.parameter.invoKey.part.a;
|
|
};
|
|
|
|
JobTicket const& ticket = seg.jobTicket(0);
|
|
CHECK (13 == getMarker (ticket));
|
|
auto prereq = ticket.getPrerequisites();
|
|
CHECK (not isnil(prereq));
|
|
CHECK (23 == getMarker (*prereq));
|
|
++prereq;
|
|
CHECK (55 == getMarker (*prereq));
|
|
++prereq;
|
|
CHECK (isnil(prereq));
|
|
}
|
|
};
|
|
|
|
|
|
/** Register this test class... */
|
|
LAUNCHER (FixtureSegment_test, "unit fixture");
|
|
|
|
|
|
|
|
}}} // namespace steam::fixture::test
|