LUMIERA.clone/tests/vessel/advice/advice-situations-test.cpp
Ichthyostega 3caa5cfb03 Tests: reorganise test folders
This resolves a long-standing issue:
we could not use proper include paths for test-helper code that was defined alongside the tests.

Since some test-helper code must now be relocated into the »Vault«-Layer,
I took the opportunity to finally resolve this annoyance. The solution is two-fold
 * introduce a dedicated test-support library
 * remove the quirks that were necessary to support some plain-C tests
Together, this allows to raise the include-directory by one level,
and then to adjust all folder names so that they match the namespace
2026-03-07 00:56:19 +01:00

140 lines
4.2 KiB
C++
Raw Permalink 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.

/*
AdviceSituations(Test) - catalogue of standard Advice usage scenarios
Copyright (C)
2010, 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 advice-situations-test.cpp
** unit test \ref AdviceSituations_test
*/
#include "test/run.hpp"
//#include "test/test-helper.hpp"
#include "vessel/advice.hpp"
namespace vessel {
namespace advice {
namespace test {
namespace {
}
/**************************************************************************************//**
* @test documentation of the fundamental usage scenarios envisioned in the Advice concept.
* This test will be augmented and completed as the Lumiera application matures.
*
* @todo yet more use cases to come.... ////////////////////////////////////////////////////////TICKET #335
*
* @see advice.hpp
* @see AdviceBasics_test
* @see AdviceConfiguration_test
*/
class AdviceSituations_test : public Test
{
virtual void
run (Arg)
{
pattern01_justPickAndBeHappy();
pattern02_pickIfPresent();
pattern03_installOnlyOnce();
TODO ("more advice usage scenarios.....?");
}
/** @test usage pattern 01: simply consume Advice -- irrespective if set explicitly. */
void
pattern01_justPickAndBeHappy()
{
Request<int> generic{"solution(life_and_universe_and_everything)"};
CHECK (0 == generic.getAdvice()); // the early bird gets the worm...
Provision<int> universal{"solution(life_and_universe_and_everything)"};
universal.setAdvice(5);
CHECK (5 == generic.getAdvice()); // ...while the bad girls go everywhere
universal.retractAdvice();
CHECK (0 == generic.getAdvice()); // nothing to see here, just move on
}
/** @test usage pattern 01: detect if specific advice was given. */
void
pattern02_pickIfPresent()
{
Request<int> request{"something(special)"};
CHECK (not request.isMatched());
Provision<int> info{"something(special)"};
info.setAdvice(55);
CHECK (request.isMatched());
CHECK (55 == request.getAdvice());
info.retractAdvice();
CHECK (not request.isMatched());
}
/** @test usage pattern 01: . */
void
pattern03_installOnlyOnce()
{
Provision<int> info{"something(special)"};
CHECK (not info.isGiven());
Request<int> question{"something(special)"};
CHECK (0 == question.getAdvice());
CHECK (not question.isMatched());
auto publish = [&](int i)
{
if (not info.isGiven())
info.setAdvice (i);
};
for (uint i=0; i<5; ++i)
if (i % 2)
publish (i);
CHECK (1 == question.getAdvice());
CHECK (question.isMatched());
info.retractAdvice();
CHECK (not info.isGiven());
CHECK (not question.isMatched());
}
#if false /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
/** @test usage pattern ∞ : somewhat literally fantastic */
void
check_SevenMoreWondersOfTheWorld()
{
UNIMPLEMENTED ("suitable advice to save the world");
}
#endif /////////////////////////////////////////////////////////////////////////////////////////////////////////////UNIMPLEMENTED :: TICKET #335
// more to come.....
};
/** Register this test class... */
LAUNCHER (AdviceSituations_test, "function common");
}}} // namespace vessel::advice::test