temporal: add some basic BBT time tests

Some of the subtraction tests may need revising because it is not immediately clear that the
current answers are correct.
This commit is contained in:
Paul Davis 2022-02-21 11:55:44 -07:00
parent 47bf18101b
commit 92d82866e0

View File

@ -1,6 +1,7 @@
#include <stdlib.h>
#include "temporal/bbt_time.h"
#include "temporal/tempo.h"
#include "BBTTest.h"
@ -11,16 +12,97 @@ using namespace Temporal;
void
BBTTest::createTest()
{
CPPUNIT_ASSERT_THROW_MESSAGE ("- zero-bar BBT_Time;", BBT_Time (0, 1, 0), IllegalBBTTimeException);
CPPUNIT_ASSERT_THROW_MESSAGE ("- zero-beat BBT_Time;", BBT_Time (1, 0, 0), IllegalBBTTimeException);
CPPUNIT_ASSERT_THROW_MESSAGE ("- zero-bar-and-beat BBT_Time;", BBT_Time (0, 0, 0), IllegalBBTTimeException);
/* This test checks that BBT_Time cannot convert ticks to beats etc., so the explicit 1920 ticks remains
that in the constructed BBT_Time, rather than being converted to an additional beat. This has to be true
because BBT_Time has no clue what the meter is.
*/
BBT_Time a (1, 1, 1920);
CPPUNIT_ASSERT(BBT_Time (1,2,0) != a);
/* by contrast, a zero-distance "walk" from that location should return a canonicalized BBT_Time, which given a 4/4 meter
will be 1|2|0
*/
TempoMap::SharedPtr tmap (TempoMap::fetch());
BBT_Offset b (0, 0, 0);
BBT_Time r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,2,0), r);
}
void
BBTTest::addTest()
{
TempoMap::SharedPtr tmap (TempoMap::fetch());
BBT_Time a(1,1,0);
BBT_Offset b(1,0,0);
BBT_Time r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (2,1,0), r);
b = BBT_Offset (0, 1, 0);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,2,0), r);
b = BBT_Offset (0, 0, 1);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,1,1), r);
b = BBT_Offset (0, 0, ticks_per_beat - 1);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,1,ticks_per_beat - 1), r);
b = BBT_Offset (0, 0, ticks_per_beat);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,2,0), r);
b = BBT_Offset (0, 0, ticks_per_beat * 2);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,3,0), r);
/* assumes 4/4 time */
b = BBT_Offset (0, 4, 0);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (2,1,0), r);
b = BBT_Offset (1, 0, 0);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (2,1,0), r);
b = BBT_Offset (0, 0, ticks_per_beat * 4);
r = tmap->bbt_walk (a, b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (2,1,0), r);
}
void
BBTTest::subtractTest()
{
TempoMap::SharedPtr tmap (TempoMap::fetch());
BBT_Time a (1,1,0);
BBT_Offset b (1,0,0);
BBT_Time r = tmap->bbt_walk (a, -b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (-1,1,0), r);
b = BBT_Offset (0, 1, 0);
r = tmap->bbt_walk (a, -b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,-1,0), r); /* Not sure this is actually the correct answer */
b = BBT_Offset (0, 0, 1);
r = tmap->bbt_walk (a, -b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,1,-1), r); /* Not sure this is actually the correct answer */
b = BBT_Offset (0, 0, ticks_per_beat);
r = tmap->bbt_walk (a, -b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,1,-ticks_per_beat), r); /* Not sure this is actually the correct answer */
b = BBT_Offset (0, 0, ticks_per_beat + 1);
r = tmap->bbt_walk (a, -b);
CPPUNIT_ASSERT_EQUAL(BBT_Time (1,1,-(ticks_per_beat+1)), r); /* Not sure this is actually the correct answer */
}
void
@ -37,4 +119,3 @@ void
BBTTest::convertTest()
{
}