diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-08 10:34:54 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2021-08-08 10:34:54 +0200 |
commit | f43935b5c873676a632b23cbfcef45a4431b233d (patch) | |
tree | ad1473fa34f3da5292e3344a99ed447261d99584 /test/midimappertest.cc | |
parent | a2483a839264369482fff135d33f007ded266d3c (diff) |
Add support for a single midi note that plays multiple instruments.
Diffstat (limited to 'test/midimappertest.cc')
-rw-r--r-- | test/midimappertest.cc | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/test/midimappertest.cc b/test/midimappertest.cc new file mode 100644 index 0000000..703c646 --- /dev/null +++ b/test/midimappertest.cc @@ -0,0 +1,140 @@ +/* -*- Mode: c++ -*- */ +/*************************************************************************** + * midimappertest.cc + * + * Sun Aug 8 09:55:13 CEST 2021 + * Copyright 2021 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 Lesser General Public License as published by + * the Free Software Foundation; either version 3 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser 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 <uunit.h> + +#include <algorithm> + +#include <midimapper.h> + +#include "scopedfile.h" + +class MidiMapperTest + : public uUnit +{ +public: + MidiMapperTest() + { + uTEST(MidiMapperTest::test); + uTEST(MidiMapperTest::exceptional); + } + + void test() + { + midimap_t midimap + { + { 54, "Crash_left_tip" }, + { 60, "Crash_left_whisker" }, + { 55, "Crash_right_tip" }, + { 62, "Crash_right_whisker" }, + { 62, "Hihat_closed" }, + { 56, "Hihat_closed" }, + }; + + instrmap_t instrmap + { + { "Crash_left_tip", 0 }, + { "Crash_left_whisker", 1 }, + { "Crash_right_tip", 2 }, + { "Crash_right_whisker", 3 }, + { "Hihat_closed", 4 }, + }; + + MidiMapper mapper; + mapper.swap(instrmap, midimap); + + { + auto is = mapper.lookup(54); + uASSERT_EQUAL(1u, is.size()); + uASSERT_EQUAL(0, is[0]); + } + + { + auto is = mapper.lookup(60); + uASSERT_EQUAL(1u, is.size()); + uASSERT_EQUAL(1, is[0]); + } + + { + auto is = mapper.lookup(55); + uASSERT_EQUAL(1u, is.size()); + uASSERT_EQUAL(2, is[0]); + } + + { + auto is = mapper.lookup(62); + uASSERT_EQUAL(2u, is.size()); + // We don't care about the order, so just count the instances + uASSERT_EQUAL(1u, std::count(is.begin(), is.end(), 3)); + uASSERT_EQUAL(1u, std::count(is.begin(), is.end(), 4)); + } + + { + auto is = mapper.lookup(56); + uASSERT_EQUAL(1u, is.size()); + uASSERT_EQUAL(4, is[0]); + } + } + + void exceptional() + { + midimap_t midimap + { + { 54, "Crash_left_tip" }, + { 60, "Crash_left_whisker_MISSING" }, + { 55, "Crash_right_tip" }, + { 62, "Crash_right_whisker" }, + { 62, "Hihat_closed" }, + { 56, "Hihat_closed" }, + }; + + instrmap_t instrmap + { + { "Crash_left_tip", 0 }, + { "Crash_left_whisker", 1 }, + { "Crash_right_tip", 2 }, + { "Crash_right_whisker", 3 }, + { "Hihat_closed", 4 }, + }; + + MidiMapper mapper; + mapper.swap(instrmap, midimap); + + // no such note id + { + auto is = mapper.lookup(42); + uASSERT_EQUAL(0u, is.size()); + } + + // no such instrument + { + auto is = mapper.lookup(60); + uASSERT_EQUAL(0u, is.size()); + } + } +}; + +// Registers the fixture into the 'registry' +static MidiMapperTest test; |