LUMIERA.clone/tests/core/steam/asset/meta/time-grid-basics-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

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

/*
TimeGridBasics(Test) - verify a simple reference scale for time quantisation
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 time-grid-basics-test.cpp
** unit test \ref TimeGridBasics_test
*/
#include "test/run.hpp"
#include "test/test-helper.hpp"
#include "steam/asset/meta.hpp"
#include "steam/asset/meta/time-grid.hpp"
#include "lib/time/timevalue.hpp"
#include "lib/format-cout.hpp"
#include "lib/util.hpp"
#include <boost/rational.hpp>
using boost::rational_cast;
using lib::randStr;
namespace steam {
namespace asset{
namespace meta {
namespace test {
using namespace lib::time;
typedef Builder<TimeGrid> GridBuilder;
namespace { // Test definitions...
const Time TEST_ORIGIN (12,34);
const FrameRate TEST_FPS (5,6);
const uint MAX_FRAMES = 1000;
const uint DIRT_GRAIN = 50;
}
/***********************************************************************//**
* @test build some simple time grids and verify their behaviour
* for quantising (grid aligning) time values.
*
* @see asset::meta::TimeGrid
* @see time-quantisation-test.cpp usage context
*/
class TimeGridBasics_test : public Test
{
virtual void
run (Arg)
{
seedRand();
createGrid_fullProcedure();
createGrid_simplified();
}
void
createGrid_fullProcedure()
{
GridID myGrID (randStr(8));
GridBuilder spec = asset::Meta::create (myGrID);
CHECK ( spec.fps == 1);
CHECK ( spec.origin == TimeValue(0));
CHECK (!spec.predecessor);
spec.fps = TEST_FPS;
spec.origin = TEST_ORIGIN;
PGrid myGrid = spec.commit();
CHECK (myGrid);
CHECK (myGrid->ident.name == myGrID.getSym());
// now verify the grid
// by performing some conversions...
int randomFrame = rani(MAX_FRAMES);
Time point (myGrid->timeOf (randomFrame));
CHECK (point == TEST_ORIGIN + randomFrame * TEST_FPS.duration());
int fract = 2 + rani(DIRT_GRAIN);
FSecs dirt = (1/TEST_FPS) / fract;
ASSERT (Time(dirt) < TEST_FPS.duration());
ASSERT (0 < dirt);
Time dirty(point + Time(dirt));
CHECK (point == TEST_ORIGIN + myGrid->gridLocal(dirty));
}
void
createGrid_simplified()
{
PGrid simplePALGrid = TimeGrid::build (FrameRate::PAL);
CHECK (simplePALGrid);
CHECK (!util::isnil (simplePALGrid->ident.name)); // note: name-ID filled in automatically
cout << "simple PAL Grid: " << simplePALGrid->ident << endl;
CHECK (Time(0,2) == simplePALGrid->timeOf(50));
CHECK (Time(0,2) == simplePALGrid->timeOf(FSecs(2)));
}
};
/** Register this test class... */
LAUNCHER (TimeGridBasics_test, "unit asset");
}}}} // namespace steam::asset::meta::test