changeset 257:b3095d23d0c3

Add tests for signal operations
author Amine Sehili <amine.sehili@gmail.com>
date Thu, 05 Sep 2019 20:12:52 +0100
parents 6dcfe7bf1c94
children 7e430750f362
files tests/test_signal.py
diffstat 1 files changed, 152 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test_signal.py	Thu Sep 05 20:12:52 2019 +0100
@@ -0,0 +1,152 @@
+from unittest import TestCase
+from array import array as array_
+from genty import genty, genty_dataset
+import numpy as np
+from auditok import signal as signal_
+from auditok import signal_numpy
+
+
+@genty
+class TestSignal(TestCase):
+    def setUp(self):
+        self.data = b"012345679ABC"
+        self.numpy_fmt = {"b": np.int8, "h": np.int16, "i": np.int32}
+
+    @genty_dataset(
+        int8=("b", [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]),
+        int16=("h", [12592, 13106, 13620, 14134, 16697, 17218]),
+        int32=("i", [858927408, 926299444, 1128415545]),
+    )
+    def test_to_array(self, fmt, expected):
+        resutl = signal_.to_array(self.data, fmt)
+        expected = array_(fmt, expected)
+        self.assertEqual(resutl, expected)
+        resutl_numpy = signal_numpy.to_array(self.data, self.numpy_fmt[fmt])
+        self.assertTrue(all(resutl_numpy == expected))
+        self.assertEqual(resutl_numpy.dtype, np.float64)
+
+    @genty_dataset(
+        int8_1channel_select_0=(
+            "b",
+            1,
+            0,
+            [48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67],
+        ),
+        int8_2channel_select_0=("b", 2, 0, [48, 50, 52, 54, 57, 66]),
+        int8_3channel_select_0=("b", 3, 0, [48, 51, 54, 65]),
+        int8_3channel_select_1=("b", 3, 1, [49, 52, 55, 66]),
+        int8_3channel_select_2=("b", 3, 2, [50, 53, 57, 67]),
+        int8_4channel_select_0=("b", 4, 0, [48, 52, 57]),
+        int16_1channel_select_0=(
+            "h",
+            1,
+            0,
+            [12592, 13106, 13620, 14134, 16697, 17218],
+        ),
+        int16_2channel_select_0=("h", 2, 0, [12592, 13620, 16697]),
+        int16_2channel_select_1=("h", 2, 1, [13106, 14134, 17218]),
+        int16_3channel_select_0=("h", 3, 0, [12592, 14134]),
+        int16_3channel_select_1=("h", 3, 1, [13106, 16697]),
+        int16_3channel_select_2=("h", 3, 2, [13620, 17218]),
+        int32_1channel_select_0=(
+            "i",
+            1,
+            0,
+            [858927408, 926299444, 1128415545],
+        ),
+        int32_3channel_select_0=("i", 3, 0, [858927408]),
+        int32_3channel_select_1=("i", 3, 1, [926299444]),
+        int32_3channel_select_2=("i", 3, 2, [1128415545]),
+    )
+    def test_extract_single_channel(self, fmt, channels, selected, expected):
+        resutl = signal_.extract_single_channel(
+            self.data, fmt, channels, selected
+        )
+        expected = array_(fmt, expected)
+        self.assertEqual(resutl, expected)
+        resutl_numpy = signal_numpy.extract_single_channel(
+            self.data, self.numpy_fmt[fmt], channels, selected
+        )
+        self.assertTrue(all(resutl_numpy == expected))
+        self.assertEqual(resutl_numpy.dtype, np.float64)
+
+    @genty_dataset(
+        int8_2channel=("b", 2, [48, 50, 52, 54, 61, 66]),
+        int8_4channel=("b", 4, [50, 54, 64]),
+        int16_1channel=("h", 1, [12592, 13106, 13620, 14134, 16697, 17218]),
+        int16_2channel=("h", 2, [12849, 13877, 16958]),
+        int32_3channel=("i", 3, [971214132]),
+    )
+    def test_average_channels(self, fmt, channels, expected):
+        resutl = signal_.average_channels(self.data, fmt, channels)
+        expected = array_(fmt, expected)
+        self.assertEqual(resutl, expected)
+        resutl_numpy = signal_numpy.average_channels(
+            self.data, self.numpy_fmt[fmt], channels
+        )
+        self.assertTrue(all(resutl_numpy == expected))
+        self.assertEqual(resutl_numpy.dtype, np.float64)
+
+    @genty_dataset(
+        int8_1channel=(
+            "b",
+            1,
+            [[48, 49, 50, 51, 52, 53, 54, 55, 57, 65, 66, 67]],
+        ),
+        int8_2channel=(
+            "b",
+            2,
+            [[48, 50, 52, 54, 57, 66], [49, 51, 53, 55, 65, 67]],
+        ),
+        int8_4channel=(
+            "b",
+            4,
+            [[48, 52, 57], [49, 53, 65], [50, 54, 66], [51, 55, 67]],
+        ),
+        int16_2channel=(
+            "h",
+            2,
+            [[12592, 13620, 16697], [13106, 14134, 17218]],
+        ),
+        int32_3channel=("i", 3, [[858927408], [926299444], [1128415545]]),
+    )
+    def test_separate_channels(self, fmt, channels, expected):
+        resutl = signal_.separate_channels(self.data, fmt, channels)
+        expected = [array_(fmt, exp) for exp in expected]
+        self.assertEqual(resutl, expected)
+
+        resutl_numpy = signal_numpy.separate_channels(
+            self.data, self.numpy_fmt[fmt], channels
+        )
+        self.assertTrue((resutl_numpy == expected).all())
+        self.assertEqual(resutl_numpy.dtype, np.float64)
+
+    @genty_dataset(
+        simple=([300, 320, 400, 600], 52.506639194632434),
+        zero=([0], -200),
+        zeros=([0, 0, 0], -200),
+    )
+    def test_calculate_energy_single_channel(self, x, expected):
+        energy = signal_.calculate_energy_single_channel(x)
+        self.assertEqual(energy, expected)
+        energy = signal_numpy.calculate_energy_single_channel(x)
+        self.assertEqual(energy, expected)
+
+    @genty_dataset(
+        min_=(
+            [[300, 320, 400, 600], [150, 160, 200, 300]],
+            min,
+            46.48603928135281,
+        ),
+        max_=(
+            [[300, 320, 400, 600], [150, 160, 200, 300]],
+            max,
+            52.506639194632434,
+        ),
+    )
+    def test_calculate_energy_multichannel(self, x, aggregation_fn, expected):
+        energy = signal_.calculate_energy_multichannel(x, aggregation_fn)
+        self.assertEqual(energy, expected)
+
+        energy = signal_numpy.calculate_energy_multichannel(x, aggregation_fn)
+        self.assertEqual(energy, expected)