* Evoral: Added Unit test for SMF

git-svn-id: svn://localhost/ardour2/branches/3.0@4523 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Hans Baier 2009-02-10 23:58:02 +00:00
parent ce8065fea8
commit dcc25d795b
5 changed files with 86 additions and 1 deletions

View file

@ -1 +1,41 @@
#include "SMFTest.hpp"
using namespace std;
CPPUNIT_TEST_SUITE_REGISTRATION( SMFTest );
void
SMFTest::takeFiveTest ()
{
TestSMF<Time> smf;
smf.open("./test/testdata/TakeFive.mid");
CPPUNIT_ASSERT(!smf.is_empty());
seq->start_write();
smf.seek_to_start();
uint64_t time = 0; /* in SMF ticks */
Evoral::Event<double> ev;
const double frames_per_beat = 100.0;
uint32_t delta_t = 0;
uint32_t size = 0;
uint8_t* buf = NULL;
int ret;
while ((ret = smf.read_event(&delta_t, &size, &buf)) >= 0) {
cerr << "read smf event type " << int(buf[0]) << endl;
ev.set(buf, size, 0.0);
time += delta_t;
if (ret > 0) { // didn't skip (meta) event
// make ev.time absolute time in frames
ev.time() = time * frames_per_beat / (double)smf.ppqn();
ev.set_event_type(type_map->midi_event_type(buf[0]));
seq->append(ev);
}
}
seq->end_write(false);
CPPUNIT_ASSERT(!seq->empty());
}

View file

@ -3,6 +3,51 @@
#include <evoral/SMF.hpp>
#include "SequenceTest.hpp"
#include <sigc++/sigc++.h>
#include <cassert>
using namespace Evoral;
template<typename Time>
class TestSMF : public SMF<Time> {
public:
int open(const std::string& path) {
return SMF<Time>::open(path);
}
int read_event(uint32_t* delta_t, uint32_t* size, uint8_t** buf) const {
return SMF<Time>::read_event(delta_t, size, buf);
}
};
class SMFTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE (SMFTest);
CPPUNIT_TEST (takeFiveTest);
CPPUNIT_TEST_SUITE_END ();
public:
typedef double Time;
void setUp (void) {
type_map = new DummyTypeMap();
assert(type_map);
seq = new MySequence<Time>(*type_map, 0);
assert(seq);
}
void tearDown (void) {
delete seq;
delete type_map;
}
void takeFiveTest (void);
private:
DummyTypeMap* type_map;
MySequence<Time>* seq;
};

View file

@ -109,7 +109,6 @@ class SequenceTest : public CppUnit::TestFixture
typedef std::vector<boost::shared_ptr<Note<Time> > > Notes;
void setUp (void) {
std::cerr << "SetUp" << std::endl;
type_map = new DummyTypeMap();
assert(type_map);
seq = new MySequence<Time>(*type_map, 0);

BIN
libs/evoral/test/testdata/TakeFive.mid vendored Executable file

Binary file not shown.

View file

@ -64,6 +64,7 @@ def build(bld):
obj = bld.new_task_gen('cxx', 'program')
obj.source = '''
test/SequenceTest.cpp
test/SMFTest.cpp
test/testrunner.cpp
'''
obj.includes = ['.', './src']