This changeset attempts to breach into the implementation design of OutputSlot (while largely retaining the API and the »Output Slot Protocol«). While the actual problem that brought me to this point can be traced back to some rather obvious mistake, namely to conflate the `BufferProvider` used as backing implementation with a `BufferProvider` used as front-end API, creating the new connections to use an `OutputBufferProxy` unveils some further long-standing structural mismatch; notably this leads to the difficulties to get the lifecylce management of `OutputSlot` and `DataSink` under control. So I remove one entire level from the implementation, in a bold move to realign the design with the prospective usage pattern. Obviously, this breaks a lot of further code, and I need to rewire the Allocation implementation altogether, and provide a new functor based implementation for `DataSink`
109 lines
3.1 KiB
C++
109 lines
3.1 KiB
C++
/*
|
||
EngineInterface(Test) - verify basics of the engine (scheduling) service
|
||
|
||
Copyright (C)
|
||
2011, Hermann Vosseler <Ichthyostega@web.de>
|
||
|
||
**Lumiera** 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. See the file COPYING for further details.
|
||
|
||
* *****************************************************************/
|
||
|
||
/** @file engine-interface-test.cpp
|
||
** unit test \ref EngineInterface_test
|
||
*/
|
||
|
||
|
||
#include "test/run.hpp"
|
||
#include "lib/error.hpp"
|
||
|
||
#include "steam/asset/pipe.hpp"
|
||
#include "steam/engine/calc-stream.hpp"
|
||
#include "steam/engine/engine-service.hpp"
|
||
#include "steam/engine/engine-diagnostics.hpp"
|
||
#include "steam/mobject/model-port.hpp"
|
||
#include "vault/out/diagnostic-output-slot.hpp"
|
||
#include "vault/out/output-slot.hpp"
|
||
#include "vault/out/timings.hpp"
|
||
#include "lib/time/timevalue.hpp"
|
||
|
||
//#include <ctime>
|
||
|
||
using test::Test;
|
||
//using std::rand;
|
||
|
||
|
||
namespace steam {
|
||
namespace engine{
|
||
namespace test {
|
||
|
||
using asset::Pipe;
|
||
using asset::PPipe;
|
||
using mobject::ModelPort;
|
||
using vault::out::OutputSlot;
|
||
using vault::out::DiagnosticOutputSlot;
|
||
using vault::out::Timings;
|
||
using lib::time::FrameRate;
|
||
|
||
using PID = asset::ID<Pipe>;
|
||
|
||
|
||
namespace { // test fixture...
|
||
|
||
} // (End) test fixture
|
||
|
||
|
||
|
||
/***************************************************************//**
|
||
* @test cover the basic service exposed at the engine interface:
|
||
* create a calculation stream and verify the translation
|
||
* into individual jobs.
|
||
*
|
||
* This test relies on the engine's diagnostic facilities, allowing
|
||
* to log and verify the generated jobs without needing to execute
|
||
* them. So this test doesn't actually run the engine. There are
|
||
* \link OutputSlotProtocol_test other tests \endlink covering
|
||
* the output generation separate from the engine.
|
||
*
|
||
* @see CalcStream_test more in-depth coverage of the various
|
||
* flavours of calculation streams supported by the engine
|
||
* @see EngineService
|
||
* @see CalcStream
|
||
* @see OutputSlotProtocol_test
|
||
*/
|
||
class EngineInterface_test : public Test
|
||
{
|
||
|
||
virtual void
|
||
run (Arg)
|
||
{
|
||
UNIMPLEMENTED ("simple standard case of Engine interface usage");
|
||
|
||
EngineService& engine = EngineService::instance();
|
||
EngineDiagnostics monitor(engine);
|
||
|
||
PID pipe = Pipe::query("id(dummy)");
|
||
ModelPort port(pipe);
|
||
|
||
DiagnosticOutputSlot oSlot;
|
||
Timings timings (FrameRate::PAL); /////////TODO
|
||
|
||
// Invoke test subject...
|
||
CalcStreams calc = engine.calculate(port, timings, oSlot);
|
||
|
||
////TODO some direct checks on the calculation stream??
|
||
|
||
CHECK (monitor.has_scheduled_jobs_for(timings));
|
||
}
|
||
|
||
};
|
||
|
||
|
||
/** Register this test class... */
|
||
LAUNCHER (EngineInterface_test, "function engine");
|
||
|
||
|
||
|
||
}}} // namespace steam::engine::test
|