LUMIERA.clone/tests/steam/engine/engine-interface-test.cpp
Ichthyostega 473299fb5a OutputSlot: attempt to address deeply rooted structural problems
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`
2026-03-21 00:51:40 +01:00

109 lines
3.1 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
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