The solution from yesterday works, but is needlessly indirect. However, if we want to circumvent ''any indirection'' in the simple standard case, then it turns out to be necessary to have some kind of ''flag store'' already in the `Disposition` (the implementation service interface). Because otherwise it would be impossible to trigger the short-circuit access without going through some kind of indirection. Need to define a generic ID-Record with some flexible extension space that can be used by subclasses; and notably we need to generate some base-type-IDs on a static level -- which should be possible, since all allowed BaseTypes are defined as Type-Sequence.
110 lines
2.3 KiB
C++
110 lines
2.3 KiB
C++
/*
|
||
Parameter(Test) - verify generic parameter values
|
||
|
||
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 parameter-test.cpp
|
||
** unit test \ref Parameter_test
|
||
*/
|
||
|
||
|
||
#include "test/run.hpp"
|
||
//#include "test/test-helper.hpp"
|
||
#include "lib/par/parameter.hpp"
|
||
//#include "lib/format-cout.hpp"
|
||
#include "test/diagnostic-output.hpp"/////////////TODO
|
||
|
||
//#include <utility>
|
||
//#include <string>
|
||
//#include <vector>
|
||
|
||
//using std::string;
|
||
//using std::vector;
|
||
//using std::swap;
|
||
|
||
|
||
namespace lib {
|
||
namespace par {
|
||
namespace test{
|
||
|
||
// using lumiera::error::LUMIERA_ERROR_LOGIC;
|
||
|
||
namespace {//Test fixture....
|
||
|
||
class Thing
|
||
{ };
|
||
|
||
template<typename X>
|
||
struct Some
|
||
{
|
||
X x;
|
||
};
|
||
|
||
typedef Some<Thing> SomeThing;
|
||
|
||
}//(End)Test fixture
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
/**************************************************************************//**
|
||
* @test cover properties of generic parameter containers.
|
||
*/
|
||
class Parameter_test : public Test
|
||
{
|
||
|
||
virtual void
|
||
run (Arg)
|
||
{
|
||
simpleUsage();
|
||
verify_typeMarker();
|
||
}
|
||
|
||
|
||
void
|
||
simpleUsage()
|
||
{
|
||
SHOW_EXPR(BUFF_SIZ);
|
||
CHECK (sizeof(Parameter) <= 4 * sizeof(void*));
|
||
SHOW_EXPR(BaseTypeID<float>::value)
|
||
SHOW_EXPR(BaseTypeID<float*>::value)
|
||
ParamData<int> dip(55);
|
||
SHOW_EXPR(sizeof(dip))
|
||
|
||
Parameter par = Parameter::forType<int>().build();
|
||
CHECK (0 == par.getVal<int>());
|
||
|
||
par.setVal (12.3);
|
||
CHECK (12 == par.getVal<int>());
|
||
CHECK (12u == par.getVal<uint64_t>());
|
||
CHECK (12.0 == par.getVal<double>());
|
||
CHECK (true == par.getVal<bool>());
|
||
}
|
||
|
||
|
||
void
|
||
verify_typeMarker()
|
||
{
|
||
}
|
||
};
|
||
|
||
|
||
/** Register this test class... */
|
||
LAUNCHER (Parameter_test, "unit lib");
|
||
|
||
|
||
|
||
}}} // namespace lib::par::test
|