diff --git a/src/lib/time/quantiser.cpp b/src/lib/time/quantiser.cpp index cf384822b..10b5cc4e2 100644 --- a/src/lib/time/quantiser.cpp +++ b/src/lib/time/quantiser.cpp @@ -32,6 +32,9 @@ namespace lib { namespace time { + Quantiser::~Quantiser() { } // hint to emit the VTable here... + + /** */ QuTime::QuTime (TimeValue raw, Symbol gridID) : Time(raw) /////////////////////////////////////////////////TODO fetch quantiser @@ -49,10 +52,17 @@ namespace time { FixedFrameQuantiser::FixedFrameQuantiser (FSecs frames_per_second) : Quantiser() /////////////////////////////////////////////////TODO we ought to do something { } - + /** */ + Time + FixedFrameQuantiser::align (TimeValue const& raw) + { + UNIMPLEMENTED ("simple demo quantisation to hard wired grid"); + } + + LUMIERA_ERROR_DEFINE (UNKNOWN_GRID, "referring to an undefined grid or scale in value quantisation"); diff --git a/src/lib/time/quantiser.hpp b/src/lib/time/quantiser.hpp index 84881141a..26ec82544 100644 --- a/src/lib/time/quantiser.hpp +++ b/src/lib/time/quantiser.hpp @@ -75,12 +75,17 @@ namespace time { typedef lib::PtrDerefIter<_SrcIter> _Iter; public: + virtual ~Quantiser(); ///< this is an ABC + + template bool supports() const; typedef _Iter iterator; iterator getSupportedFormats() const; + virtual Time align (TimeValue const& raw) =0; + }; @@ -98,8 +103,12 @@ namespace time { : public Quantiser { + public: FixedFrameQuantiser (FSecs frames_per_second); + + + Time align (TimeValue const& raw); }; diff --git a/tests/40components.tests b/tests/40components.tests index 51b98cfb6..0055ce202 100644 --- a/tests/40components.tests +++ b/tests/40components.tests @@ -663,6 +663,11 @@ return: 0 END +PLANNED "Quantiser API basics" QuantiserBasics_test < + + This program 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. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +* *****************************************************/ + + +#include "lib/test/run.hpp" +//#include "lib/test/test-helper.hpp" +//#include "lib/time/timequant.hpp" +#include "lib/time/quantiser.hpp" +//#include "lib/time/display.hpp" +#include "lib/util.hpp" + +#include +//#include +#include +//#include + +using boost::lexical_cast; +using util::isnil; +//using util::contains; +//using std::rand; +using std::cout; +using std::endl; + +//using boost::algorithm::join; + + +namespace lib { +namespace time{ +namespace test{ + + namespace { + + const uint MAX_FRAMES = 25*500; + const uint MAX_DIRT = 50; + + const FSecs F25(1,25); + + } + + + + /******************************************************** + * @test cover the basic Quantiser API. + * This test uses a special quantiser implementation + * with hard coded behaviour to demonstrate and verify + * the usage of a quantiser entity in isolation. + */ + class QuantiserBasics_test : public Test + { + + virtual void + run (Arg) + { + checkSimpleQuantisation (); + } + + + void + checkSimpleQuantisation () + { + FixedFrameQuantiser fixQ(25); + + uint frames = (rand() % MAX_FRAMES); + FSecs dirt = (F25 / (rand() % MAX_DIRT)); + + Time rawTime = FSecs(frames, 25) + dirt; + CHECK (Time( frames*F25) <= rawTime); + CHECK (Time((frames+1)*F25) > rawTime); + + Time quantTime = fixQ.align (rawTime); + + CHECK (Time(frames*F25) == quantTime); + } + }; + + + /** Register this test class... */ + LAUNCHER (QuantiserBasics_test, "unit common"); + + + +}}} // namespace lib::time::test