diff options
| -rw-r--r-- | .gitignore | 6 | ||||
| -rw-r--r-- | test/Makefile.am | 3 | ||||
| -rw-r--r-- | test/resampler.cc | 112 | 
3 files changed, 119 insertions, 2 deletions
| @@ -27,4 +27,8 @@ Makefile.am.test  *.dll  plugingui/plugingui  plugingui/rcgen -*.lo
\ No newline at end of file +*.lo +test/result_*.xml +test/resampler +test/engine +test/gui
\ No newline at end of file diff --git a/test/Makefile.am b/test/Makefile.am index 136ba28..e43a6ba 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -23,7 +23,8 @@ gui_SOURCES = \  	gui.cc  resampler_CXXFLAGS = -DOUTPUT=\"resampler\" $(CPPUNIT_CFLAGS) \ -	$(ZITA_CXXFLAGS) $(SAMPLERATE_CFLAGS) +	$(ZITA_CXXFLAGS) $(SAMPLERATE_CFLAGS) \ +	-I$(top_srcdir)/hugin -DDISABLE_HUGIN  resampler_LDFLAGS = $(ZITA_LIBS) $(SAMPLERATE_LIBS) $(CPPUNIT_LIBS)  resampler_SOURCES = \  	$(top_srcdir)/src/chresampler.cc \ diff --git a/test/resampler.cc b/test/resampler.cc new file mode 100644 index 0000000..445a5b3 --- /dev/null +++ b/test/resampler.cc @@ -0,0 +1,112 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + *            resampler.cc + * + *  Sun Oct  5 20:16:22 CEST 2014 + *  Copyright 2014 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 "../src/chresampler.h" +#include <unistd.h> + +#define BUFSZ 500 + +static float round(float a) { return a<0.5?0:1; } + +class test_resampler : public CppUnit::TestFixture +{ +  CPPUNIT_TEST_SUITE(test_resampler); +	CPPUNIT_TEST(resampling); +	CPPUNIT_TEST(resampling_buffer_sizes); +	CPPUNIT_TEST_SUITE_END(); + +public: +	void setUp() {} +	void tearDown() {} + +  void resampling() +  { +    CHResampler r; +    CPPUNIT_ASSERT_EQUAL(1.0, r.ratio()); +     +    r.setup(44100, 48000); +    CPPUNIT_ASSERT_EQUAL(44100.0/48000.0, r.ratio()); + +    float in[BUFSZ]; +    for(int i = 0; i < BUFSZ; i++) in[i] = 0;//(float)i/(float)BUFSZ; +    in[100] = 1.0; + +    float out[BUFSZ]; +    r.setInputSamples(in, sizeof(in) / sizeof(float)); +    r.setOutputSamples(out, sizeof(out) / sizeof(float)); +    r.process(); +    CPPUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount()); + +    //    CPPUNIT_ASSERT_EQUAL(, r.getOutputSampleCount()); + +    int outidx = -1; +    int inidx = -1; +    for(int i = 0; i < BUFSZ - (int)r.getOutputSampleCount(); i++) { +      if(in[i] == 1.0) inidx = i; +      if(round(out[i]) == 1.0) outidx = i; +      //printf("in[% 4d]\t= %f\t", i, in[i]); +      //printf("out[% 4d]\t= %f\n", i, out[i]); +    } + +    CPPUNIT_ASSERT(inidx != -1); +    CPPUNIT_ASSERT(outidx != -1); + +    //printf("inidx: %d - outidx: %d\n", inidx, outidx); +    //CPPUNIT_ASSERT_EQUAL(71, inidx - outidx); // This does not make sense... +	} + +  void resampling_buffer_sizes() +  { +    CHResampler r; +    CPPUNIT_ASSERT_EQUAL(1.0, r.ratio()); +     +    double infs = 24000; +    double outfs = 48000; +    r.setup(infs, outfs); +    CPPUNIT_ASSERT_EQUAL(infs / outfs, r.ratio()); + +    float in[BUFSZ]; +    float out[(int)(BUFSZ / r.ratio())]; + +    // Preload resampler +    r.setOutputSamples(out, 1); +    while(r.getOutputSampleCount()) { +      r.setInputSamples(in, 1); +      r.process(); +    } + +    r.setInputSamples(in, sizeof(in) / sizeof(float)); +    r.setOutputSamples(out, sizeof(out) / sizeof(float)); +    r.process(); +    CPPUNIT_ASSERT_EQUAL((size_t)0, r.getInputSampleCount()); +    CPPUNIT_ASSERT_EQUAL((size_t)0, r.getOutputSampleCount()); +  } +}; + +// Registers the fixture into the 'registry' +CPPUNIT_TEST_SUITE_REGISTRATION(test_resampler); | 
