lumiera_documentation/tests/core/steam/engine/engine-ctx-test.cpp
Ichthyostega d00992ff70 BufferProvider: start with some requirement analysis
It seems evident that the the problems with the existing BufferProvider implementation
are rooted in a lack of understanding of the actual usage situation at that time(2011).
This caused a »hexagonal design«, i.e. something entirely driven by uint testing
for the sake of unit testing.

So to identify the unsuitable decisions, some degree of deductive work is necessary,
based on our much better understanding of the Render Engine.

A crucial challenge is that buffer management must perform well
within a massively concurrent environment, and do so without excessive latency.
2026-01-25 02:19:30 +01:00

102 lines
2.6 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.

/*
EngineCtx(Test) - calculation of (internal) buffer metadata type keys
Copyright (C)
2026, 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-ctx-test.cpp
** unit test \ref EngineCtx_test
*/
#include "lib/error.hpp"
#include "lib/test/run.hpp"
#include "lib/test/test-helper.hpp"
#include "steam/engine/engine-ctx.hpp"
#include "steam/engine/buffer-provider.hpp"
//#include "steam/engine/engine-ctx-facilities.hpp" //////////TODO required?
#include "lib/util.hpp"
//#include <limits>
//using util::isnil;
using util::isSameObject;
namespace steam {
namespace engine{
namespace test {
namespace { // Test fixture
}//(End) Test helpers
using LERR_(LIFECYCLE);
/*****************************************************************************//**
* @test verify context with generic management services for Dependency Injection,
* used within the Render Node Network to hide global setup state.
*/
class EngineCtx_test : public Test
{
virtual void
run (Arg)
{
// seedRand();
simpleUsage();
}
void
simpleUsage()
{
auto& ctx = EngineCtx::access;
BufferProvider& provider = ctx().mem;
// in the default config (for tests) there is no separate cache provider
CHECK (isSameObject (provider, ctx().cache));
BuffHandle buff = provider.lockBufferFor<int>();
CHECK (buff.isValid());
CHECK (sizeof(int) <= buff.size());
buff.accessAs<int>() = -LIFE_AND_UNIVERSE_4EVER;
CHECK (buff.accessAs<int>() == -int(LIFE_AND_UNIVERSE_4EVER));
uint alternativeTruth = buff.accessAs<uint>();
CHECK (alternativeTruth == -LIFE_AND_UNIVERSE_4EVER);
buff.release();
CHECK (not buff.isValid());
VERIFY_ERROR (LIFECYCLE, buff.accessAs<int>() );
}
/** @todo automagically post on X with lots of UPERCASE LETTERS */
void
verify_disaster()
{
UNIMPLEMENTED ("general meltdown");
}
};
/** Register this test class... */
LAUNCHER (EngineCtx_test, "unit engine");
}}} // namespace steam::engine::test