diff options
Diffstat (limited to 'libs/ardour/test')
-rw-r--r-- | libs/ardour/test/playlist_layering_test.cc | 379 | ||||
-rw-r--r-- | libs/ardour/test/playlist_layering_test.h | 32 | ||||
-rw-r--r-- | libs/ardour/test/playlist_overlap_cache_test.cc | 119 | ||||
-rw-r--r-- | libs/ardour/test/playlist_overlap_cache_test.h | 20 | ||||
-rw-r--r-- | libs/ardour/test/test_needing_session.cc | 48 | ||||
-rw-r--r-- | libs/ardour/test/test_needing_session.h | 16 | ||||
-rw-r--r-- | libs/ardour/test/test_receiver.h | 37 |
7 files changed, 86 insertions, 565 deletions
diff --git a/libs/ardour/test/playlist_layering_test.cc b/libs/ardour/test/playlist_layering_test.cc index 23b22f9d90..fd0b6bc09c 100644 --- a/libs/ardour/test/playlist_layering_test.cc +++ b/libs/ardour/test/playlist_layering_test.cc @@ -1,14 +1,13 @@ -#include "pbd/compose.h" #include "midi++/manager.h" +#include "pbd/textreceiver.h" +#include "pbd/compose.h" +#include "ardour/session.h" +#include "ardour/audioengine.h" #include "ardour/playlist_factory.h" #include "ardour/source_factory.h" #include "ardour/region.h" #include "ardour/region_factory.h" -#include "ardour/session.h" -#include "ardour/audiosource.h" -#include "ardour/audioengine.h" #include "playlist_layering_test.h" -#include "test_receiver.h" CPPUNIT_TEST_SUITE_REGISTRATION (PlaylistLayeringTest); @@ -16,28 +15,68 @@ using namespace std; using namespace ARDOUR; using namespace PBD; -int const PlaylistLayeringTest::num_regions = 6; +class TestReceiver : public Receiver +{ +protected: + void receive (Transmitter::Channel chn, const char * str) { + const char *prefix = ""; + + switch (chn) { + case Transmitter::Error: + prefix = ": [ERROR]: "; + break; + case Transmitter::Info: + /* ignore */ + return; + case Transmitter::Warning: + prefix = ": [WARNING]: "; + break; + case Transmitter::Fatal: + prefix = ": [FATAL]: "; + break; + case Transmitter::Throw: + /* this isn't supposed to happen */ + abort (); + } + + /* note: iostreams are already thread-safe: no external + lock required. + */ + + cout << prefix << str << endl; + + if (chn == Transmitter::Fatal) { + exit (9); + } + } +}; + +TestReceiver test_receiver; void PlaylistLayeringTest::setUp () { - TestNeedingSession::setUp (); - string const test_wav_path = "libs/ardour/test/test.wav"; + string const test_session_path = "libs/ardour/test/playlist_layering_test"; + string const test_wav_path = "libs/ardour/test/playlist_layering_test/playlist_layering_test.wav"; + system (string_compose ("rm -rf %1", test_session_path).c_str()); - _playlist = PlaylistFactory::create (DataType::AUDIO, *_session, "test"); - _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, "", false, 44100); + init (false, true); + SessionEvent::create_per_thread_pool ("test", 512); - system ("pwd"); - - /* Must write some data to our source, otherwise regions which use it will - be limited in whether they can be trimmed or not. - */ - boost::shared_ptr<AudioSource> a = boost::dynamic_pointer_cast<AudioSource> (_source); - Sample silence[512]; - memset (silence, 0, 512 * sizeof (Sample)); - a->write (silence, 512); + test_receiver.listen_to (error); + test_receiver.listen_to (info); + test_receiver.listen_to (fatal); + test_receiver.listen_to (warning); + + AudioEngine* engine = new AudioEngine ("test", ""); + MIDI::Manager::create (engine->jack ()); + CPPUNIT_ASSERT (engine->start () == 0); - _region = new boost::shared_ptr<Region>[num_regions]; + _session = new Session (*engine, test_session_path, "playlist_layering_test"); + engine->set_session (_session); + + _playlist = PlaylistFactory::create (DataType::AUDIO, *_session, "test"); + _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, "", false, 44100); } void @@ -45,303 +84,45 @@ PlaylistLayeringTest::tearDown () { _playlist.reset (); _source.reset (); - for (int i = 0; i < num_regions; ++i) { + for (int i = 0; i < 16; ++i) { _region[i].reset (); } - delete[] _region; - - TestNeedingSession::tearDown (); + AudioEngine::instance()->remove_session (); + delete _session; + EnumWriter::destroy (); + MIDI::Manager::destroy (); + AudioEngine::destroy (); } void -PlaylistLayeringTest::create_short_regions () +PlaylistLayeringTest::create_three_short_regions () { PropertyList plist; plist.add (Properties::start, 0); plist.add (Properties::length, 100); - for (int i = 0; i < num_regions; ++i) { + for (int i = 0; i < 3; ++i) { _region[i] = RegionFactory::create (_source, plist); - _region[i]->set_name (string_compose ("%1", char (int ('A') + i))); } } void -PlaylistLayeringTest::laterHigher_relayerOnAll_Test () -{ - _session->config.set_layer_model (LaterHigher); - _session->config.set_relayer_on_all_edits (true); - - create_short_regions (); - - /* three overlapping regions */ - _playlist->add_region (_region[A], 0); - _playlist->add_region (_region[B], 10); - _playlist->add_region (_region[C], 20); - /* and another non-overlapping one */ - _playlist->add_region (_region[D], 200); - - /* LaterHigher means that they should be arranged thus */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - _region[A]->set_position (5); - - /* Region move should have no effect in LaterHigher mode */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> bottom should give C A B, not touching D */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> top should go back to A B C, not touching D */ - _region[C]->raise_to_top (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); -} - -void -PlaylistLayeringTest::addHigher_relayerOnAll_Test () -{ - _session->config.set_layer_model (AddHigher); - _session->config.set_relayer_on_all_edits (true); - - create_short_regions (); - - /* three overlapping regions */ - _playlist->add_region (_region[A], 0); - _playlist->add_region (_region[B], 10); - _playlist->add_region (_region[C], 20); - /* and another non-overlapping one */ - _playlist->add_region (_region[D], 200); - - /* AddHigher means that they should be arranged thus */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - _region[A]->set_position (5); - - /* region move should have no effect in AddHigher mode */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> bottom should give C A B, not touching D */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> top should go back to A B C, not touching D */ - _region[C]->raise_to_top (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); -} - -void -PlaylistLayeringTest::addOrBoundsHigher_relayerOnAll_Test () +PlaylistLayeringTest::basicsTest () { - _session->config.set_layer_model (AddOrBoundsChangeHigher); - _session->config.set_relayer_on_all_edits (true); - - create_short_regions (); - - /* three overlapping regions */ - _playlist->add_region (_region[A], 0); - _playlist->add_region (_region[B], 10); - _playlist->add_region (_region[C], 20); - /* and another non-overlapping one */ - _playlist->add_region (_region[D], 200); - - /* AddOrBoundsHigher means that they should be arranged thus */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* region move should put A on top for B C A, not touching D */ - _region[A]->set_position (5); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> bottom should give C B A, not touching D */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> top should go back to B A C, not touching D */ - _region[C]->raise_to_top (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Put C on the bottom */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Now move it slightly, and it should go back to the top again */ - _region[C]->set_position (21); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Put C back on the bottom */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Trim it slightly, and it should go back to the top again */ - _region[C]->trim_front (23); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Same with the end */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - _region[C]->trim_end (118); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); -} - -void -PlaylistLayeringTest::addOrBoundsHigher_relayerWhenNecessary_Test () -{ - _session->config.set_layer_model (AddOrBoundsChangeHigher); - _session->config.set_relayer_on_all_edits (false); - - create_short_regions (); - - /* three overlapping regions */ - _playlist->add_region (_region[A], 0); - _playlist->add_region (_region[B], 10); - _playlist->add_region (_region[C], 20); - /* and another non-overlapping one */ - _playlist->add_region (_region[D], 200); - - /* AddOrBoundsHigher means that they should be arranged thus */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - _region[A]->set_position (5); - - /* region move should not have changed anything, since in - this mode we only relayer when there is a new overlap - */ - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> bottom should give C A B, not touching D */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* C -> top should go back to A B C, not touching D */ - _region[C]->raise_to_top (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Put C on the bottom */ - _region[C]->lower_to_bottom (); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - - /* Now move it slightly, and it should stay where it is */ - _region[C]->set_position (21); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); -} - -void -PlaylistLayeringTest::lastLayerOpTest () -{ - create_short_regions (); - - _playlist->add_region (_region[A], 0); - CPPUNIT_ASSERT_EQUAL (_playlist->layer_op_counter, _region[A]->last_layer_op (LayerOpAdd)); - uint64_t const last_add = _region[A]->last_layer_op (LayerOpAdd); - - _region[A]->set_position (42); - CPPUNIT_ASSERT_EQUAL (_playlist->layer_op_counter, _region[A]->last_layer_op (LayerOpBoundsChange)); - CPPUNIT_ASSERT_EQUAL (last_add, _region[A]->last_layer_op (LayerOpAdd)); - - _region[A]->trim_front (46); - CPPUNIT_ASSERT_EQUAL (_playlist->layer_op_counter, _region[A]->last_layer_op (LayerOpBoundsChange)); - CPPUNIT_ASSERT_EQUAL (last_add, _region[A]->last_layer_op (LayerOpAdd)); - - _region[A]->trim_end (102); - CPPUNIT_ASSERT_EQUAL (_playlist->layer_op_counter, _region[A]->last_layer_op (LayerOpBoundsChange)); - CPPUNIT_ASSERT_EQUAL (last_add, _region[A]->last_layer_op (LayerOpAdd)); -} - -void -PlaylistLayeringTest::recursiveRelayerTest () -{ - _session->config.set_layer_model (AddOrBoundsChangeHigher); - _session->config.set_relayer_on_all_edits (false); - - create_short_regions (); + create_three_short_regions (); - _playlist->add_region (_region[A], 100); - _playlist->add_region (_region[B], 125); - _playlist->add_region (_region[C], 50); - _playlist->add_region (_region[D], 250); + _playlist->add_region (_region[0], 0); + _playlist->add_region (_region[1], 10); + _playlist->add_region (_region[2], 20); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[C]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); + CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[0]->layer ()); + CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[1]->layer ()); + CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[2]->layer ()); - _region[A]->set_position (200); + _region[0]->set_position (5); - CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[D]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[A]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[B]->layer ()); - CPPUNIT_ASSERT_EQUAL (layer_t (3), _region[C]->layer ()); + /* region move should have no effect */ + CPPUNIT_ASSERT_EQUAL (layer_t (0), _region[0]->layer ()); + CPPUNIT_ASSERT_EQUAL (layer_t (1), _region[1]->layer ()); + CPPUNIT_ASSERT_EQUAL (layer_t (2), _region[2]->layer ()); } diff --git a/libs/ardour/test/playlist_layering_test.h b/libs/ardour/test/playlist_layering_test.h index ab5fe701b1..46285459ca 100644 --- a/libs/ardour/test/playlist_layering_test.h +++ b/libs/ardour/test/playlist_layering_test.h @@ -1,6 +1,5 @@ #include <cppunit/TestFixture.h> #include <cppunit/extensions/HelperMacros.h> -#include "test_needing_session.h" namespace ARDOUR { class Session; @@ -8,42 +7,23 @@ namespace ARDOUR { class Source; } -class PlaylistLayeringTest : public TestNeedingSession +class PlaylistLayeringTest : public CppUnit::TestFixture { CPPUNIT_TEST_SUITE (PlaylistLayeringTest); - CPPUNIT_TEST (lastLayerOpTest); - CPPUNIT_TEST (addHigher_relayerOnAll_Test); - CPPUNIT_TEST (addOrBoundsHigher_relayerOnAll_Test); - CPPUNIT_TEST (laterHigher_relayerOnAll_Test); - CPPUNIT_TEST (addOrBoundsHigher_relayerWhenNecessary_Test); - CPPUNIT_TEST (recursiveRelayerTest); + CPPUNIT_TEST (basicsTest); CPPUNIT_TEST_SUITE_END (); public: void setUp (); void tearDown (); - void lastLayerOpTest (); - void addHigher_relayerOnAll_Test (); - void addOrBoundsHigher_relayerOnAll_Test (); - void laterHigher_relayerOnAll_Test (); - void addOrBoundsHigher_relayerWhenNecessary_Test (); - void recursiveRelayerTest (); + void basicsTest (); private: - void create_short_regions (); - - static int const num_regions; - enum { - A = 0, - B, - C, - D, - E, - F - }; + void create_three_short_regions (); + ARDOUR::Session* _session; boost::shared_ptr<ARDOUR::Playlist> _playlist; boost::shared_ptr<ARDOUR::Source> _source; - boost::shared_ptr<ARDOUR::Region>* _region; + boost::shared_ptr<ARDOUR::Region> _region[16]; }; diff --git a/libs/ardour/test/playlist_overlap_cache_test.cc b/libs/ardour/test/playlist_overlap_cache_test.cc deleted file mode 100644 index 9263d80d3b..0000000000 --- a/libs/ardour/test/playlist_overlap_cache_test.cc +++ /dev/null @@ -1,119 +0,0 @@ -#include "pbd/compose.h" -#include "ardour/playlist.h" -#include "ardour/playlist_factory.h" -#include "ardour/source_factory.h" -#include "ardour/region.h" -#include "ardour/region_sorters.h" -#include "ardour/region_factory.h" -#include "playlist_overlap_cache_test.h" - -using namespace std; -using namespace PBD; -using namespace ARDOUR; - -CPPUNIT_TEST_SUITE_REGISTRATION (PlaylistOverlapCacheTest); - -void -PlaylistOverlapCacheTest::tearDown () -{ - _playlist.reset (); - _source.reset (); - - TestNeedingSession::tearDown (); -} - -void -PlaylistOverlapCacheTest::basicTest () -{ - string const test_wav_path = "libs/ardour/test/test.wav"; - - _playlist = PlaylistFactory::create (DataType::AUDIO, *_session, "test"); - _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, "", false, 44100); - - PropertyList plist; - plist.add (Properties::length, 256); - - boost::shared_ptr<Region> regionA = RegionFactory::create (_source, plist); - regionA->set_name ("A"); - _playlist->add_region (regionA, 0); - - - { - Playlist::OverlapCache cache (_playlist.get ()); - Playlist::RegionList rl = cache.get (Evoral::Range<framepos_t> (0, 256)); - CPPUNIT_ASSERT_EQUAL (size_t (1), rl.size ()); - CPPUNIT_ASSERT_EQUAL (regionA, rl.front ()); - - rl = cache.get (Evoral::Range<framepos_t> (-1000, 1000)); - CPPUNIT_ASSERT_EQUAL (size_t (1), rl.size ()); - CPPUNIT_ASSERT_EQUAL (regionA, rl.front ()); - } - - boost::shared_ptr<Region> regionB = RegionFactory::create (_source, plist); - regionA->set_name ("B"); - _playlist->add_region (regionB, 53); - - { - Playlist::OverlapCache cache (_playlist.get ()); - Playlist::RegionList rl = cache.get (Evoral::Range<framepos_t> (0, 256)); - CPPUNIT_ASSERT_EQUAL (size_t (2), rl.size ()); - rl.sort (RegionSortByPosition ()); - CPPUNIT_ASSERT_EQUAL (regionA, rl.front ()); - CPPUNIT_ASSERT_EQUAL (regionB, rl.back ()); - - rl = cache.get (Evoral::Range<framepos_t> (260, 274)); - CPPUNIT_ASSERT_EQUAL (size_t (1), rl.size ()); - CPPUNIT_ASSERT_EQUAL (regionB, rl.front ()); - } -} - -void -PlaylistOverlapCacheTest::stressTest () -{ - string const test_wav_path = "libs/ardour/test/test.wav"; - - _playlist = PlaylistFactory::create (DataType::AUDIO, *_session, "test"); - _source = SourceFactory::createWritable (DataType::AUDIO, *_session, test_wav_path, "", false, 44100); - - srand (42); - - int const num_regions = rand () % 256; - - for (int i = 0; i < num_regions; ++i) { - PropertyList plist; - plist.add (Properties::length, rand () % 32768); - boost::shared_ptr<Region> r = RegionFactory::create (_source, plist); - r->set_name (string_compose ("%1", i)); - _playlist->add_region (r, rand() % 32768); - } - - Playlist::OverlapCache cache (_playlist.get ()); - - int const tests = rand () % 256; - - for (int i = 0; i < tests; ++i) { - framepos_t const start = rand () % 32768; - framepos_t const length = rand () % 32768; - framepos_t const end = start + length; - - Playlist::RegionList cached = cache.get (Evoral::Range<framepos_t> (start, end)); - - Playlist::RegionList actual; - Playlist::RegionList regions = _playlist->region_list().rlist(); - for (Playlist::RegionList::iterator j = regions.begin(); j != regions.end(); ++j) { - if ((*j)->coverage (start, end) != OverlapNone) { - actual.push_back (*j); - } - } - - cached.sort (RegionSortByPosition ()); - actual.sort (RegionSortByPosition ()); - - CPPUNIT_ASSERT_EQUAL (actual.size (), cached.size ()); - Playlist::RegionList::iterator j = actual.begin (); - Playlist::RegionList::iterator k = cached.begin (); - for (; j != actual.end(); ++j, ++k) { - CPPUNIT_ASSERT_EQUAL (*j, *k); - } - } -} diff --git a/libs/ardour/test/playlist_overlap_cache_test.h b/libs/ardour/test/playlist_overlap_cache_test.h deleted file mode 100644 index c75d1691d9..0000000000 --- a/libs/ardour/test/playlist_overlap_cache_test.h +++ /dev/null @@ -1,20 +0,0 @@ -#include "test_needing_session.h" - -class PlaylistOverlapCacheTest : public TestNeedingSession -{ -public: - CPPUNIT_TEST_SUITE (PlaylistOverlapCacheTest); - CPPUNIT_TEST (basicTest); - CPPUNIT_TEST (stressTest); - CPPUNIT_TEST_SUITE_END (); - -public: - void tearDown (); - - void basicTest (); - void stressTest (); - -private: - boost::shared_ptr<ARDOUR::Playlist> _playlist; - boost::shared_ptr<ARDOUR::Source> _source; -}; diff --git a/libs/ardour/test/test_needing_session.cc b/libs/ardour/test/test_needing_session.cc deleted file mode 100644 index 5981553601..0000000000 --- a/libs/ardour/test/test_needing_session.cc +++ /dev/null @@ -1,48 +0,0 @@ -#include "midi++/manager.h" -#include "pbd/textreceiver.h" -#include "pbd/compose.h" -#include "pbd/enumwriter.h" -#include "ardour/session.h" -#include "ardour/audioengine.h" -#include "test_needing_session.h" -#include "test_receiver.h" - -using namespace std; -using namespace ARDOUR; -using namespace PBD; - -TestReceiver test_receiver; - -void -TestNeedingSession::setUp () -{ - string const test_session_path = "libs/ardour/test/test_session"; - system (string_compose ("rm -rf %1", test_session_path).c_str()); - - init (false, true); - SessionEvent::create_per_thread_pool ("test", 512); - - test_receiver.listen_to (error); - test_receiver.listen_to (info); - test_receiver.listen_to (fatal); - test_receiver.listen_to (warning); - - AudioEngine* engine = new AudioEngine ("test", ""); - MIDI::Manager::create (engine->jack ()); - CPPUNIT_ASSERT (engine->start () == 0); - - _session = new Session (*engine, test_session_path, "test_session"); - engine->set_session (_session); -} - -void -TestNeedingSession::tearDown () -{ - AudioEngine::instance()->remove_session (); - - delete _session; - - EnumWriter::destroy (); - MIDI::Manager::destroy (); - AudioEngine::destroy (); -} diff --git a/libs/ardour/test/test_needing_session.h b/libs/ardour/test/test_needing_session.h deleted file mode 100644 index 3839855179..0000000000 --- a/libs/ardour/test/test_needing_session.h +++ /dev/null @@ -1,16 +0,0 @@ -#include <cppunit/TestFixture.h> -#include <cppunit/extensions/HelperMacros.h> - -namespace ARDOUR { - class Session; -} - -class TestNeedingSession : public CppUnit::TestFixture -{ -public: - void setUp (); - void tearDown (); - -protected: - ARDOUR::Session* _session; -}; diff --git a/libs/ardour/test/test_receiver.h b/libs/ardour/test/test_receiver.h deleted file mode 100644 index 537bac3cff..0000000000 --- a/libs/ardour/test/test_receiver.h +++ /dev/null @@ -1,37 +0,0 @@ -#include "pbd/receiver.h" - -class TestReceiver : public Receiver -{ -protected: - void receive (Transmitter::Channel chn, const char * str) { - const char *prefix = ""; - - switch (chn) { - case Transmitter::Error: - prefix = ": [ERROR]: "; - break; - case Transmitter::Info: - /* ignore */ - return; - case Transmitter::Warning: - prefix = ": [WARNING]: "; - break; - case Transmitter::Fatal: - prefix = ": [FATAL]: "; - break; - case Transmitter::Throw: - /* this isn't supposed to happen */ - abort (); - } - - /* note: iostreams are already thread-safe: no external - lock required. - */ - - std::cout << prefix << str << std::endl; - - if (chn == Transmitter::Fatal) { - exit (9); - } - } -}; |