#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());
+}
#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;
+};
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);
obj = bld.new_task_gen('cxx', 'program')
obj.source = '''
test/SequenceTest.cpp
+ test/SMFTest.cpp
test/testrunner.cpp
'''
obj.includes = ['.', './src']