lumiera_documentation/tests/basics/time/digxel-configurations-test.cpp
Ichthyostega 9c74466778 Tests: build an link a test-support library
This is something I wanted to clean-up since a very long time indeed,
but always postponed it, since it requires a lot of nasty clean-up and disentangling....

Several parts had been stashed away into `src/lib/test`, which are not really related:
 * the testrunner and testsuite builder
 * generic helper utilities
 * specialised test-support facilities, e.g. the EventLog

This changeset introduces a new top-level test folder and a namespace `::test`
Code from this folder is linked into a shared library `libtestsupport.so`,
which resides in the linkage hierarchy between »Vessel« and »Vault«,
yet is no longer part of the Lumiera application and only linked into the test-suite.
2026-03-06 23:16:32 +01:00

115 lines
3.4 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.

/*
DigxelConfigurations(Test) - verify predefined standard Digxel configurations
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 digxel-configurations-test.cpp
** unit test \ref DigxelConfigurations_test
*/
#include "test/run.hpp"
#include "test/test-helper.hpp"
#include "lib/time/digxel.hpp"
#include "lib/format-cout.hpp"
#include "lib/error.hpp"
#include "lib/util.hpp"
using LERR_(ASSERTION);
using util::typeStr;
namespace lib {
namespace time{
namespace test{
/*******************************************************************//**
* @test verify correctness of the predefined standard Digxels.
* Some widely used standard configurations, including
* - default Digxel for int and double values
* - sexagesimal Digxel
* - hex byte Digxel
* - ...more to come
* @todo cover any newly added Digxel configurations.
* @see Digxel_test
*/
class DigxelConfigurations_test : public Test
{
virtual void
run (Arg)
{
verifyConfiguration<Digxel<int> > (123);
verifyConfiguration<Digxel<double>> (123.4567);
verifyConfiguration<SexaDigit > (42);
verifyConfiguration<SexaDigit > (-5);
verifyConfiguration<HexaDigit > (0xc);
verifyConfiguration<HexaDigit > (0x6f);
verifyConfiguration<CountVal > (-1234567890);
verifySignum();
}
void
verifySignum()
{
Signum sig;
CHECK (1 == sig);
sig = 123;
CHECK (1 == sig);
sig = -sig;
CHECK (-1 == sig);
sig += 98;
CHECK (+1 == sig);
CHECK (sig.show() == string(" "));
sig *= -1;
CHECK (sig.show() == string("-"));
}
template<class DIX, typename VAL>
void
verifyConfiguration (VAL testval)
{
DIX digxel;
CHECK (0 == digxel);
cout << typeStr(digxel) << "--empty--"<<digxel;
digxel = testval;
cout << "--(val="<<testval<<")--"<<digxel;
// verify buffer overrun protection
digxel = 123456789.12345;
string formatted;
#if false ///////////////////////////////////////////////////////////////////////////////////////////////TICKET #537 : restore throwing ASSERT
VERIFY_ERROR (ASSERTION, formatted = digxel.show() ); // should trigger assertion
formatted = digxel.show(); // second time doesn't reformat
CHECK (formatted.length() == digxel.maxlen());
cout << "--(clipped)--"<< digxel;
#endif ///////////////////////////////////////////////////////////////////////////////////////////////TICKET #537 : restore throwing ASSERT
cout <<"|"<< endl;
}
};
/** Register this test class... */
LAUNCHER (DigxelConfigurations_test, "unit common");
}}} // namespace lib::time::test