From f85f25ba82bcef57fc7824d7b4b3f05683286c00 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 17 Jan 2017 10:56:42 +0100 Subject: test: add AudioFormat unit test --- test/TestAudioFormat.cxx | 102 +++++++++++++++++++++++++++++++++++++++++++++++ test/TestAudioFormat.hxx | 39 ++++++++++++++++++ test/test_pcm_main.cxx | 2 + 3 files changed, 143 insertions(+) create mode 100644 test/TestAudioFormat.cxx create mode 100644 test/TestAudioFormat.hxx (limited to 'test') diff --git a/test/TestAudioFormat.cxx b/test/TestAudioFormat.cxx new file mode 100644 index 000000000..10408677f --- /dev/null +++ b/test/TestAudioFormat.cxx @@ -0,0 +1,102 @@ +/* + * Copyright 2003-2017 The Music Player Daemon Project + * http://www.musicpd.org + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "config.h" +#include "TestAudioFormat.hxx" +#include "AudioFormat.hxx" +#include "AudioParser.hxx" + +#include + +#include + +namespace CppUnit { +template<> +struct assertion_traits +{ + static bool equal(const char *x, const char *y) + { + return strcmp(x, y) == 0; + } + + static std::string toString(const char *x) + { + return std::string("\"") + x + "\""; + } +}; + +template<> +struct assertion_traits +{ + static bool equal(AudioFormat x, AudioFormat y) + { + return x == y; + } + + static std::string toString(AudioFormat x) + { + struct audio_format_string s; + return audio_format_to_string(x, &s); + } +}; +} + +struct AudioFormatStringTest { + AudioFormat af; + const char *s; +}; + +static constexpr AudioFormatStringTest af_string_tests[] = { + { AudioFormat(44100, SampleFormat::S8, 1), "44100:8:1" }, + { AudioFormat(44100, SampleFormat::S16, 2), "44100:16:2" }, + { AudioFormat(48000, SampleFormat::S24_P32, 6), "48000:24:6" }, + { AudioFormat(192000, SampleFormat::FLOAT, 2), "192000:f:2" }, + { AudioFormat(352800, SampleFormat::DSD, 2), "352800:dsd:2" }, +}; + +static constexpr AudioFormatStringTest af_mask_tests[] = { + { AudioFormat(44100, SampleFormat::UNDEFINED, 1), "44100:*:1" }, + { AudioFormat(44100, SampleFormat::S16, 0), "44100:16:*" }, + { AudioFormat(0, SampleFormat::S24_P32, 6), "*:24:6" }, + { AudioFormat::Undefined(), "*:*:*" }, +}; + +void +AudioFormatTest::TestToString() +{ + struct audio_format_string s; + + for (const auto &i : af_string_tests) + CPPUNIT_ASSERT_EQUAL(i.s, audio_format_to_string(i.af, &s)); +} + +void +AudioFormatTest::TestParse() +{ + for (const auto &i : af_string_tests) { + CPPUNIT_ASSERT_EQUAL(i.af, + ParseAudioFormat(i.s, false)); + CPPUNIT_ASSERT_EQUAL(i.af, + ParseAudioFormat(i.s, true)); + } + + for (const auto &i : af_mask_tests) + CPPUNIT_ASSERT_EQUAL(i.af, + ParseAudioFormat(i.s, true)); +} diff --git a/test/TestAudioFormat.hxx b/test/TestAudioFormat.hxx new file mode 100644 index 000000000..5caf598bd --- /dev/null +++ b/test/TestAudioFormat.hxx @@ -0,0 +1,39 @@ +/* + * Copyright 2003-2017 The Music Player Daemon Project + * http://www.musicpd.org + * + * 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., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_TEST_AUDIO_FORMAT_HXX +#define MPD_TEST_AUDIO_FORMAT_HXX + +#include "check.h" + +#include +#include + +class AudioFormatTest : public CppUnit::TestFixture { + CPPUNIT_TEST_SUITE(AudioFormatTest); + CPPUNIT_TEST(TestToString); + CPPUNIT_TEST(TestParse); + CPPUNIT_TEST_SUITE_END(); + +public: + void TestToString(); + void TestParse(); +}; + +#endif diff --git a/test/test_pcm_main.cxx b/test/test_pcm_main.cxx index 4f392dbd3..be50936df 100644 --- a/test/test_pcm_main.cxx +++ b/test/test_pcm_main.cxx @@ -19,6 +19,7 @@ #include "config.h" #include "test_pcm_all.hxx" +#include "TestAudioFormat.hxx" #include "Compiler.h" #include @@ -34,6 +35,7 @@ CPPUNIT_TEST_SUITE_REGISTRATION(PcmFormatTest); CPPUNIT_TEST_SUITE_REGISTRATION(PcmMixTest); CPPUNIT_TEST_SUITE_REGISTRATION(PcmInterleaveTest); CPPUNIT_TEST_SUITE_REGISTRATION(PcmExportTest); +CPPUNIT_TEST_SUITE_REGISTRATION(AudioFormatTest); int main(gcc_unused int argc, gcc_unused char **argv) -- cgit v1.2.3