lumiera_documentation/tests/vault/mem/output-proxy-provider-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

97 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.

/*
OutputProxyProvider(Test) - verify accessing an output sink via BufferProvider protocol
Copyright (C)
2024, 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 output-proxy-provider-test.cpp
** unit test \ref OutputProxyProvider_test
*/
#include "test/run.hpp"
#include "test/test-frame.hpp"
#include "test/test-rand-ontology.hpp"
#include "vault/mem/buffer-proxy-adaptor.hpp"
#include "lib/meta/prop-builder.hpp"
#include "test/diagnostic-output.hpp" ////////////////////TODO
using test::TestFrame;
using test::ont::manipulateFrame;
using lib::meta::PropBuilder;
namespace vault {
namespace mem {
namespace test {
/***************************************************************//**
* @test verify the design of OutputSlot and BufferProvider by
* implementing a delegating BufferProvider to expose
* output data buffers provided from _some implementation._
* @todo 2/2026 now using this setup for prototyping /////////////////////////////////////////////////TICKET #1415 : explore this design idea through prototyping
*/
class OutputProxyProvider_test : public Test
{
virtual void
run (Arg)
{
BufferState state{NIL};
// setup with notification callback
BufferProxyAdaptor proxPro{PropBuilder()
.define (PROP_FIELD(on_lock), [&]{ state = LOCKED; })
.define (PROP_FIELD(on_emit), [&]{ state = EMITTED;})
.define (PROP_FIELD(on_release),[&]{ state = FREE; })
};
// Assuming some data block is »given«
seedRand();
size_t frameNr = defaultGen.u64();
TestFrame dataBlock (frameNr);
CHECK (dataBlock.isPristine());
CHECK (state == NIL);
BuffHandle handle = proxPro.lockBuffer (dataBlock);
CHECK (state == LOCKED);
// Now a »client« can do awful things to the buffer...
CHECK (handle.isValid());
auto& data = handle.accessAs<TestFrame>();
uint64_t param = defaultGen.u64();
manipulateFrame (&data, &data, param);
HashVal check = data.getChecksum();
// »client« is done...
handle.emit();
CHECK (state == EMITTED);
// end usage cycle
handle.release();
CHECK (state == FREE);
CHECK (not handle.isValid());
CHECK (not dataBlock.isPristine());
CHECK ( dataBlock.isValid());
CHECK (check == dataBlock.getChecksum());
}
};
/** Register this test class... */
LAUNCHER (OutputProxyProvider_test, "unit play");
}}} // namespace vault::mem::test