summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMax Kellermann <max@musicpd.org>2017-01-17 10:56:42 +0100
committerMax Kellermann <max@musicpd.org>2017-01-17 12:02:41 +0100
commitf85f25ba82bcef57fc7824d7b4b3f05683286c00 (patch)
treeb28094f568b8b847c09fa436db13361f5f82355d /test
parent10a2c179f9d6d4bba5619f37ead39750e86fe7fe (diff)
test: add AudioFormat unit test
Diffstat (limited to 'test')
-rw-r--r--test/TestAudioFormat.cxx102
-rw-r--r--test/TestAudioFormat.hxx39
-rw-r--r--test/test_pcm_main.cxx2
3 files changed, 143 insertions, 0 deletions
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 <cppunit/TestAssert.h>
+
+#include <string.h>
+
+namespace CppUnit {
+template<>
+struct assertion_traits<const char *>
+{
+ 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<AudioFormat>
+{
+ 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 <cppunit/TestFixture.h>
+#include <cppunit/extensions/HelperMacros.h>
+
+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 <cppunit/extensions/TestFactoryRegistry.h>
@@ -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)