From c2c319270226cd7f1cf015ff88678e52d5d7c3fd Mon Sep 17 00:00:00 2001 From: Paul Brossier Date: Sun, 16 Nov 2025 14:29:27 +0100 Subject: [PATCH] [tests] fix definition and add edge cases for rolloff spectral descriptor --- python/tests/test_specdesc.py | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/python/tests/test_specdesc.py b/python/tests/test_specdesc.py index 32a46fe7..09cb8b56 100755 --- a/python/tests/test_specdesc.py +++ b/python/tests/test_specdesc.py @@ -203,18 +203,42 @@ class aubio_specdesc(TestCase): decrease = sum((a[1:] - a [0]) / k[1:]) / sum(a[1:]) assert_almost_equal (decrease, o(c), decimal = 5) + def get_rolloff (self, a): + cumsum = .95*sum(a*a) + i = 0; rollsum = 0 + while rollsum < cumsum: + rollsum += a[i]*a[i] + i+=1 + rolloff = max (0, i - 1) + return rolloff + def test_rolloff(self): o = specdesc("rolloff") c = cvec() assert_equal( 0., o(c)) a = arange(c.length * 2, 0, -2, dtype=float_type) c.norm = a - cumsum = .95*sum(a*a) - i = 0; rollsum = 0 - while rollsum < cumsum: - rollsum += a[i]*a[i] - i+=1 - rolloff = i + rolloff = self.get_rolloff (a) + assert_equal (rolloff, o(c)) + + def test_rolloff2(self): + o = specdesc("rolloff", 8) + c = cvec(8) + assert_equal( 0., o(c)) + a = zeros(c.length, dtype=float_type) + a[-1] = 1 + c.norm = a + rolloff = self.get_rolloff (a) + assert_equal (rolloff, o(c)) + + def test_rolloff3(self): + o = specdesc("rolloff", 8) + c = cvec(8) + assert_equal( 0., o(c)) + a = zeros(c.length, dtype=float_type) + a[0] = 1 + c.norm = a + rolloff = self.get_rolloff (a) assert_equal (rolloff, o(c)) class aubio_specdesc_wrong(TestCase): -- 2.11.0