fix merge conflicts with master
[ardour.git] / libs / evoral / test / SMFTest.cpp
1 #include "SMFTest.hpp"
2
3 #ifdef WIN32
4 #include <io.h> // for R_OK
5 #endif
6
7 using namespace std;
8
9 CPPUNIT_TEST_SUITE_REGISTRATION( SMFTest );
10
11 void
12 SMFTest::createNewFileTest ()
13 {
14         TestSMF smf;
15         smf.create("NewFile.mid");
16         smf.close();
17         CPPUNIT_ASSERT(access("NewFile.mid", R_OK) == 0);
18         unlink(smf.path().c_str());
19 }
20
21 void
22 SMFTest::takeFiveTest ()
23 {
24         TestSMF smf;
25         smf.open("./test/testdata/TakeFive.mid");
26         CPPUNIT_ASSERT(!smf.is_empty());
27
28         seq->start_write();
29         smf.seek_to_start();
30
31         uint64_t time = 0; /* in SMF ticks */
32         Evoral::Event<double> ev;
33
34         const double frames_per_beat = 100.0;
35
36         uint32_t delta_t = 0;
37         uint32_t size    = 0;
38         uint8_t* buf     = NULL;
39         int ret;
40         while ((ret = smf.read_event(&delta_t, &size, &buf)) >= 0) {
41                 ev.set(buf, size, 0.0);
42                 time += delta_t;
43
44                 if (ret > 0) { // didn't skip (meta) event
45                         //cerr << "read smf event type " << hex << int(buf[0]) << endl;
46                         // make ev.time absolute time in frames
47                         ev.set_time(time * frames_per_beat / (double)smf.ppqn());
48                         ev.set_event_type(type_map->midi_event_type(buf[0]));
49                         seq->append(ev, next_event_id ());
50                 }
51         }
52
53         seq->end_write (Sequence<Time>::Relax, false);
54         CPPUNIT_ASSERT(!seq->empty());
55 }