summaryrefslogtreecommitdiff
path: root/libs/evoral/test
diff options
context:
space:
mode:
authorHans Baier <hansfbaier@googlemail.com>2009-02-10 23:58:02 +0000
committerHans Baier <hansfbaier@googlemail.com>2009-02-10 23:58:02 +0000
commitdcc25d795b3c3d796448a9d033f6b4dff79d1850 (patch)
tree33a1b30b69b8cc24880a7d4a81cdb4b453ceb00d /libs/evoral/test
parentce8065fea830c763931a7bc203a9701d9097d8ee (diff)
* Evoral: Added Unit test for SMF
git-svn-id: svn://localhost/ardour2/branches/3.0@4523 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/evoral/test')
-rw-r--r--libs/evoral/test/SMFTest.cpp40
-rw-r--r--libs/evoral/test/SMFTest.hpp45
-rw-r--r--libs/evoral/test/SequenceTest.hpp1
-rwxr-xr-xlibs/evoral/test/testdata/TakeFive.midbin0 -> 32531 bytes
4 files changed, 85 insertions, 1 deletions
diff --git a/libs/evoral/test/SMFTest.cpp b/libs/evoral/test/SMFTest.cpp
index 369bc80e45..b5891ff23f 100644
--- a/libs/evoral/test/SMFTest.cpp
+++ b/libs/evoral/test/SMFTest.cpp
@@ -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());
+}
diff --git a/libs/evoral/test/SMFTest.hpp b/libs/evoral/test/SMFTest.hpp
index 5b3d96a27b..f63fec838a 100644
--- a/libs/evoral/test/SMFTest.hpp
+++ b/libs/evoral/test/SMFTest.hpp
@@ -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;
+};
diff --git a/libs/evoral/test/SequenceTest.hpp b/libs/evoral/test/SequenceTest.hpp
index 746c20cd0f..7800438456 100644
--- a/libs/evoral/test/SequenceTest.hpp
+++ b/libs/evoral/test/SequenceTest.hpp
@@ -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);
diff --git a/libs/evoral/test/testdata/TakeFive.mid b/libs/evoral/test/testdata/TakeFive.mid
new file mode 100755
index 0000000000..0d472ac6cb
--- /dev/null
+++ b/libs/evoral/test/testdata/TakeFive.mid
Binary files differ