diff options
author | Carl Hetherington <carl@carlh.net> | 2012-06-09 23:07:27 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2012-06-09 23:07:27 +0000 |
commit | 1dc8d99d78908222545e78f41cff08896f46a529 (patch) | |
tree | ac30ffe2ceacd9db700fd15a36b2dfad45808284 /libs/ardour/test/audio_region_read_test.cc | |
parent | a715e566d03b5e1a68856ec0c24d59ed8610b768 (diff) |
Clean up libardour tests a bit.
git-svn-id: svn://localhost/ardour2/branches/3.0@12641 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/test/audio_region_read_test.cc')
-rw-r--r-- | libs/ardour/test/audio_region_read_test.cc | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/libs/ardour/test/audio_region_read_test.cc b/libs/ardour/test/audio_region_read_test.cc new file mode 100644 index 0000000000..dc3127ea2e --- /dev/null +++ b/libs/ardour/test/audio_region_read_test.cc @@ -0,0 +1,94 @@ +/* + Copyright (C) 2012 Paul Davis + + This program 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. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "ardour/playlist.h" +#include "ardour/region.h" +#include "ardour/audioregion.h" +#include "audio_region_read_test.h" +#include "test_globals.h" + +CPPUNIT_TEST_SUITE_REGISTRATION (AudioRegionReadTest); + +using namespace std; +using namespace ARDOUR; + +/** Check some basic reads */ +void +AudioRegionReadTest::readTest () +{ + int const N = 1024; + + Sample buf[N]; + Sample mbuf[N]; + float gbuf[N]; + + int const P = 100; + + /* Simple read: 256 frames from start of region, no fades */ + + _ar[0]->set_position (P); + _ar[0]->set_length (1024); + + _ar[0]->read_from_sources (_ar[0]->_sources, _ar[0]->_length, buf, P, 256, 0); + check_staircase (buf, 0, 256); + + for (int i = 0; i < N; ++i) { + buf[i] = 0; + } + + /* Offset read: 256 frames from 128 frames into the region, no fades */ + _ar[0]->read_from_sources (_ar[0]->_sources, _ar[0]->_length, buf, P + 128, 256, 0); + check_staircase (buf, 128, 256); + + /* Simple read with a fade-in: 256 frames from start of region, with fades */ + _ar[0]->set_default_fade_in (); + CPPUNIT_ASSERT_EQUAL (double (64), _ar[0]->_fade_in->back()->when); + + for (int i = 0; i < N; ++i) { + buf[i] = 0; + } + + _ar[0]->read_at (buf, mbuf, gbuf, P, 256, 0); + for (int i = 0; i < 64; ++i) { + /* XXX: this isn't very accurate, but close enough for now; needs investigation */ + CPPUNIT_ASSERT_DOUBLES_EQUAL (float (i * i / 63.0), buf[i], 1e-4); + } + for (int i = 64; i < P; ++i) { + CPPUNIT_ASSERT_EQUAL (i, int (buf[i])); + } + + /* Offset read: 256 frames from 128 frames into the region, with fades + (though the fade should not affect it, as it is finished before the read starts) + */ + + for (int i = 0; i < N; ++i) { + buf[i] = 0; + } + + _ar[0]->read_at (buf, mbuf, gbuf, P + 128, 256, 0); + check_staircase (buf, 128, 256); +} + +void +AudioRegionReadTest::check_staircase (Sample* b, int offset, int N) +{ + for (int i = 0; i < N; ++i) { + int const j = i + offset; + CPPUNIT_ASSERT_EQUAL (j, int (b[i])); + } +} |