lumiera_documentation/tests/steam/engine/engine-interface-test.cpp
Ichthyostega 259d0a5728 BufferProvider: now able to relocate OutputSlot into Vault Layer
The old implementation of `DiagnosticOutputSlot` is now disabled
and will be re-written from scratch, and no longer tangled to `BufferProvider`

 - `OutputManager` remains in Steam-Layer for now
 - the `Timings` and `OutputSlot` are now a self-contained
2026-03-10 23:12:30 +01:00

111 lines
3.2 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;
typedef asset::ID<Pipe> PID;
typedef OutputSlot::Allocation Allocation;
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;
Allocation& output = oSlot.allocate();
Timings timings (FrameRate::PAL); /////////TODO
// Invoke test subject...
CalcStreams calc = engine.calculate(port, timings, output);
////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