summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorBent Bisballe Nyeng <deva@aasimon.org>2015-04-23 15:20:48 +0200
committerBent Bisballe Nyeng <deva@aasimon.org>2016-01-20 13:24:28 +0100
commitb67e30cb862ab640e4a7ced48b1905b2421885b9 (patch)
tree73bc34c7c88a6ba33ca6a9c22ed43cff86376e11 /test
parenteaa2062ea50fea853fa1852b152354ba50d44985 (diff)
Added run sempahore (wait until thread actually started). Fixed localpos bug. Added 'threaded' argument to init that handles events either directly or in a thread when dispatched. Added cachemanager unit test (currently failing).
Diffstat (limited to 'test')
-rw-r--r--test/Makefile.am29
-rw-r--r--test/cachemanagertest.cc136
-rw-r--r--test/kit/ride-multi-channel.wavbin0 -> 28591492 bytes
-rw-r--r--test/kit/ride-single-channel.wavbin0 -> 694144 bytes
4 files changed, 152 insertions, 13 deletions
diff --git a/test/Makefile.am b/test/Makefile.am
index 2c2ab8d..7dcf0ce 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,7 +1,7 @@
# Rules for the test code (use `make check` to execute)
include $(top_srcdir)/src/Makefile.am.drumgizmo
-TESTS = resource engine cache gui resampler lv2 configfile
+TESTS = resource engine gui resampler lv2 cachemanager configfile
check_PROGRAMS = $(TESTS)
@@ -15,9 +15,23 @@ resource_SOURCES = \
test.cc \
resource_test.cc
+cachemanager_CXXFLAGS = -DOUTPUT=\"cachemanager\" $(CPPUNIT_CFLAGS) \
+ -I$(top_srcdir)/src -I$(top_srcdir)/include \
+ -I$(top_srcdir)/hugin -DDISABLE_HUGIN $(PTHREAD_CFLAGS) $(SNDFILE_CFLAGS)
+cachemanager_LDFLAGS = $(PTHREAD_LIBS) $(CPPUNIT_LIBS) $(SNDFILE_LIBS)
+cachemanager_SOURCES = \
+ $(top_srcdir)/src/cachemanager.cc \
+ $(top_srcdir)/src/thread.cc \
+ $(top_srcdir)/src/mutex.cc \
+ $(top_srcdir)/src/semaphore.cc \
+ $(top_srcdir)/src/configuration.cc \
+ $(top_srcdir)/src/audiofile.cc \
+ test.cc \
+ cachemanagertest.cc
+
engine_CXXFLAGS = -DOUTPUT=\"engine\" $(CPPUNIT_CFLAGS) \
-I$(top_srcdir)/src -I$(top_srcdir)/include \
- -I$(top_srcdir)/hugin -DDISABLE_HUGIN
+ -I$(top_srcdir)/hugin -DDISABLE_HUGIN $(PTHREAD_CFLAGS)
engine_CFLAGS = -DDISABLE_HUGIN
engine_LDFLAGS = $(CPPUNIT_LIBS) $(DRUMGIZMO_LIBS) $(PTHREAD_LIBS)
engine_SOURCES = \
@@ -26,17 +40,6 @@ engine_SOURCES = \
test.cc \
engine.cc
-cache_CXXFLAGS = -DOUTPUT=\"cache\" $(CPPUNIT_CFLAGS) \
- -I$(top_srcdir)/src -I$(top_srcdir)/include \
- -I$(top_srcdir)/hugin -DDISABLE_HUGIN
-cache_CFLAGS = -DDISABLE_HUGIN
-cache_LDFLAGS = $(CPPUNIT_LIBS) $(DRUMGIZMO_LIBS) $(PTHREAD_LIBS)
-cache_SOURCES = \
- $(DRUMGIZMO_SOURCES) \
- $(top_srcdir)/hugin/hugin.c \
- test.cc \
- cache.cc
-
gui_CXXFLAGS = -DOUTPUT=\"gui\" $(CPPUNIT_CFLAGS)
gui_LDFLAGS = $(CPPUNIT_LIBS)
gui_SOURCES = \
diff --git a/test/cachemanagertest.cc b/test/cachemanagertest.cc
new file mode 100644
index 0000000..ae346db
--- /dev/null
+++ b/test/cachemanagertest.cc
@@ -0,0 +1,136 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/***************************************************************************
+ * cachemanagertest.cc
+ *
+ * Sun Apr 19 10:15:59 CEST 2015
+ * Copyright 2015 Bent Bisballe Nyeng
+ * deva@aasimon.org
+ ****************************************************************************/
+
+/*
+ * This file is part of DrumGizmo.
+ *
+ * DrumGizmo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * DrumGizmo is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with DrumGizmo; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <cachemanager.h>
+#include <unistd.h>
+
+class test_cachemanager : public CppUnit::TestFixture
+{
+ CPPUNIT_TEST_SUITE(test_cachemanager);
+ CPPUNIT_TEST(singlechannel_nonthreaded);
+ CPPUNIT_TEST(singlechannel_threaded);
+ CPPUNIT_TEST(multichannel_nonthreaded);
+ CPPUNIT_TEST(multichannel_threaded);
+ CPPUNIT_TEST_SUITE_END();
+
+public:
+ void setUp() {}
+ void tearDown() {}
+
+ void testit(const char *filename, int channel, bool threaded)
+ {
+
+ // Reference file:
+ AudioFile afref(filename, channel);
+ printf("afref.load\n");
+ afref.load(ALL_SAMPLES);
+
+ // Input file:
+ AudioFile af(filename, channel);
+ printf("af.load\n");
+ af.load(ALL_SAMPLES);
+ //af.load(PRELOADSIZE);
+
+ CacheManager cm;
+ printf("cm.init\n");
+ cm.init(100, threaded);
+
+ cacheid_t id;
+ // TODO: test 0 ... FRAMESIZE - 1
+ size_t initial_samples_needed = (FRAMESIZE - 1) / 2;
+
+ printf("open\n");
+ sample_t *s = cm.open(&af, initial_samples_needed, channel, id);
+ size_t size = initial_samples_needed;
+ size_t offset = 0;
+
+ // Test pre cache:
+ for(size_t i = 0; i < size; i++) {
+ CPPUNIT_ASSERT_EQUAL(afref.data[offset], s[i]);
+ offset++;
+ }
+
+ // Test the rest
+ while(offset < afref.size) {
+
+ if(threaded) {
+ usleep(1000000.0 / 44100.0 * FRAMESIZE);
+ //sleep(1); // sleep 1 second
+ }
+
+ //printf("offset: %d\t", offset);
+ s = cm.next(id, size);
+ //printf("next -> size: %d\n", size);
+ for(size_t i = 0; i < size && (offset < afref.size); i++) {
+ CPPUNIT_ASSERT_EQUAL(afref.data[offset], s[i]);
+ offset++;
+ }
+ }
+
+ printf("done\n");
+ }
+
+ void singlechannel_nonthreaded()
+ {
+ const char filename[] = "kit/ride-single-channel.wav";
+ int channel = 0;
+ bool threaded = false;
+ testit(filename, channel, threaded);
+ }
+
+ void singlechannel_threaded()
+ {
+ const char filename[] = "kit/ride-single-channel.wav";
+ int channel = 0;
+ bool threaded = true;
+ testit(filename, channel, threaded);
+ }
+
+ void multichannel_nonthreaded()
+ {
+ const char filename[] = "kit/ride-multi-channel.wav";
+ int channel = 0;
+ bool threaded = false;
+ testit(filename, channel, threaded);
+ }
+
+ void multichannel_threaded()
+ {
+ const char filename[] = "kit/ride-multi-channel.wav";
+ int channel = 0;
+ bool threaded = true;
+ testit(filename, channel, threaded);
+ }
+
+};
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION(test_cachemanager);
+
+
+
diff --git a/test/kit/ride-multi-channel.wav b/test/kit/ride-multi-channel.wav
new file mode 100644
index 0000000..3dec8a9
--- /dev/null
+++ b/test/kit/ride-multi-channel.wav
Binary files differ
diff --git a/test/kit/ride-single-channel.wav b/test/kit/ride-single-channel.wav
new file mode 100644
index 0000000..1760697
--- /dev/null
+++ b/test/kit/ride-single-channel.wav
Binary files differ