History

Merge branch 'master' into feature/pitchshift

Paul Brossier committed 7 years ago

Commit d0f19a72 parents 34d4232 0045668101 files · +1797 −1448Browse files

Showing the changes to python/tests (31 of 101 files). Show all

Unified · Split

31 files
  1. python/tests/__init__.py +0 −1
  2. python/tests/_tools.py +41 −0
  3. python/tests/run_all_tests +0 −5
  4. python/tests/test_aubio.py +1 −2
  5. python/tests/test_aubio_cmd.py +2 −2
  6. python/tests/test_aubio_cut.py +1 −1
  7. python/tests/test_cvec.py +1 −1
  8. python/tests/test_dct.py +4 −0
  9. python/tests/test_fft.py +1 −1
  10. python/tests/test_filter.py +2 −2
  11. python/tests/test_filterbank.py +3 −3
  12. python/tests/test_filterbank_mel.py +14 −15
  13. python/tests/test_fvec.py +1 −1
  14. python/tests/test_fvec_shift.py +1 −1
  15. python/tests/test_hztomel.py +11 −8
  16. python/tests/test_mathutils.py +1 −1
  17. python/tests/test_mfcc.py +17 −21
  18. python/tests/test_midi2note.py +11 −12
  19. python/tests/test_musicutils.py +2 −2
  20. python/tests/test_note2midi.py +24 −19
  21. python/tests/test_notes.py +6 −7
  22. python/tests/test_onset.py +1 −1
  23. python/tests/test_phasevoc.py +13 −8
  24. python/tests/test_pitch.py +5 −5
  25. python/tests/test_sink.py +16 −22
  26. python/tests/test_slicing.py +3 −3
  27. python/tests/test_source.py +56 −53
  28. python/tests/test_source_channels.py +1 −1
  29. python/tests/test_specdesc.py +1 −1
  30. python/tests/test_zero_crossing_rate.py +1 −1
  31. python/tests/utils.py +6 −12
python/tests/__init__.py+0−1
@@ -1 +0,0 @@
1
python/tests/_tools.py+41−0
@@ -0,0 +1,41 @@
1"""
2This file imports test methods from different testing modules, in this
3order:
4
5 - try importing 'pytest'
6 - if it fails, fallback to 'numpy.testing'
7
8Nose2 support was removed because of lacking assertWarns on py2.7.
9
10"""
11
12import sys
13
14_has_pytest = False
15
16# check if we have pytest
17try:
18 import pytest
19 parametrize = pytest.mark.parametrize
20 assert_raises = pytest.raises
21 assert_warns = pytest.warns
22 skipTest = pytest.skip
23 _has_pytest = True
24 def run_module_suite():
25 import sys, pytest
26 pytest.main(sys.argv)
27except:
28 pass
29
30# otherwise fallback on numpy.testing
31if not _has_pytest:
32 from numpy.testing import dec, assert_raises, assert_warns
33 from numpy.testing import SkipTest
34 parametrize = dec.parametrize
35 def skipTest(msg):
36 raise SkipTest(msg)
37 from numpy.testing import run_module_suite
38
39# always use numpy's assert_equal
40import numpy
41assert_equal = numpy.testing.assert_equal
python/tests/run_all_tests+0−5
@@ -1,5 +0,0 @@
1#! /usr/bin/env python
2
3if __name__ == '__main__':
4 import nose2.main
5 nose2.discover()
python/tests/test_aubio.py+1−2
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase3from numpy.testing import TestCase
5 4
6class aubiomodule_test_case(TestCase):5class aubiomodule_test_case(TestCase):
@@ -15,5 +14,5 @@ class aubiomodule_test_case(TestCase): · 8 unmodified lines
15 self.assertEqual('0', aubio.version[0])14 self.assertEqual('0', aubio.version[0])
16 15
17if __name__ == '__main__':16if __name__ == '__main__':
17 from unittest import main
18 main()18 main()
19
python/tests/test_aubio_cmd.py+2−2
@@ -1,8 +1,7 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3import aubio.cmd
4from nose2 import main
5from numpy.testing import TestCase3from numpy.testing import TestCase
4import aubio.cmd
6 5
7class aubio_cmd(TestCase):6class aubio_cmd(TestCase):
8 7
@@ -31,4 +30,5 @@ class aubio_cmd_utils(TestCase): · 22 unmodified lines
31 "3200\t")30 "3200\t")
32 31
33if __name__ == '__main__':32if __name__ == '__main__':
33 from unittest import main
34 main()34 main()
python/tests/test_aubio_cut.py+1−1
@@ -1,7 +1,6 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3import aubio.cut3import aubio.cut
4from nose2 import main
5from numpy.testing import TestCase4from numpy.testing import TestCase
6 5
7class aubio_cut(TestCase):6class aubio_cut(TestCase):
@@ -13,4 +12,5 @@ class aubio_cut(TestCase): · 5 unmodified lines
13 assert self.a_parser.parse_args(['-v']).verbose12 assert self.a_parser.parse_args(['-v']).verbose
14 13
15if __name__ == '__main__':14if __name__ == '__main__':
15 from unittest import main
16 main()16 main()
python/tests/test_cvec.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4import numpy as np3import numpy as np
5from numpy.testing import TestCase, assert_equal4from numpy.testing import TestCase, assert_equal
6from aubio import cvec, fvec, float_type5from aubio import cvec, fvec, float_type
@@ -141,4 +140,5 @@ class aubio_cvec_wrong_norm_input(TestCase): · 134 unmodified lines
141 a.norm = np.zeros((512//2+1, 2), dtype = float_type)140 a.norm = np.zeros((512//2+1, 2), dtype = float_type)
142 141
143if __name__ == '__main__':142if __name__ == '__main__':
143 from unittest import main
144 main()144 main()
python/tests/test_dct.py+4−0
@@ -66,3 +66,7 @@ class aubio_dct(TestCase): · 65 unmodified lines
66 aubio.dct(size)66 aubio.dct(size)
67 except AssertionError:67 except AssertionError:
68 self.skipTest('creating aubio.dct with size %d did not fail' % size)68 self.skipTest('creating aubio.dct with size %d did not fail' % size)
69
70if __name__ == '__main__':
71 from unittest import main
72 main()
python/tests/test_fft.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase3from numpy.testing import TestCase
5from numpy.testing import assert_equal, assert_almost_equal4from numpy.testing import assert_equal, assert_almost_equal
6import numpy as np5import numpy as np
@@ -212,4 +211,5 @@ class aubio_fft_wrong_params(TestCase): · 205 unmodified lines
212 fft(win_s)211 fft(win_s)
213 212
214if __name__ == '__main__':213if __name__ == '__main__':
214 from unittest import main
215 main()215 main()
python/tests/test_filter.py+2−2
@@ -1,9 +1,8 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal, assert_almost_equal3from numpy.testing import TestCase, assert_equal, assert_almost_equal
5from aubio import fvec, digital_filter4from aubio import fvec, digital_filter
6from .utils import array_from_text_file5from utils import array_from_text_file
7 6
8class aubio_filter_test_case(TestCase):7class aubio_filter_test_case(TestCase):
9 8
@@ -94,4 +93,5 @@ class aubio_filter_wrong_params(TestCase): · 84 unmodified lines
94 digital_filter(-1)93 digital_filter(-1)
95 94
96if __name__ == '__main__':95if __name__ == '__main__':
96 from unittest import main
97 main()97 main()
python/tests/test_filterbank.py+3−3
@@ -4,7 +4,7 @@ import numpy as np · 3 unmodified lines
4from numpy.testing import TestCase, assert_equal, assert_almost_equal4from numpy.testing import TestCase, assert_equal, assert_almost_equal
5 5
6from aubio import cvec, filterbank, float_type6from aubio import cvec, filterbank, float_type
7from .utils import array_from_text_file7from utils import array_from_text_file
8 8
9class aubio_filterbank_test_case(TestCase):9class aubio_filterbank_test_case(TestCase):
10 10
@@ -87,5 +87,5 @@ class aubio_filterbank_wrong_values(TestCase): · 76 unmodified lines
87 f(cvec(256))87 f(cvec(256))
88 88
89if __name__ == '__main__':89if __name__ == '__main__':
90 import nose290 from unittest import main
91 nose2.main()91 main()
python/tests/test_filterbank_mel.py+14−15
@@ -2,12 +2,10 @@ · 1 unmodified line
2 2
3import numpy as np3import numpy as np
4from numpy.testing import TestCase, assert_equal, assert_almost_equal4from numpy.testing import TestCase, assert_equal, assert_almost_equal
5from _tools import assert_warns
5 6
6from aubio import fvec, cvec, filterbank, float_type7from aubio import fvec, cvec, filterbank, float_type
7 8
8import warnings
9warnings.filterwarnings('ignore', category=UserWarning, append=True)
10
11class aubio_filterbank_mel_test_case(TestCase):9class aubio_filterbank_mel_test_case(TestCase):
12 10
13 def test_slaney(self):11 def test_slaney(self):
@@ -75,40 +73,41 @@ class aubio_filterbank_mel_test_case(TestCase): · 61 unmodified lines
75 samplerate = 2205073 samplerate = 22050
76 freq_list = [0, samplerate//4, samplerate // 2 + 1]74 freq_list = [0, samplerate//4, samplerate // 2 + 1]
77 f = filterbank(len(freq_list)-2, 1024)75 f = filterbank(len(freq_list)-2, 1024)
78 # TODO add assert_warns76 with assert_warns(UserWarning):
79 f.set_triangle_bands(fvec(freq_list), samplerate)77 f.set_triangle_bands(fvec(freq_list), samplerate)
80 78
81 def test_triangle_freqs_with_not_enough_filters(self):79 def test_triangle_freqs_with_not_enough_filters(self):
82 """make sure set_triangle_bands warns when not enough filters"""80 """make sure set_triangle_bands warns when not enough filters"""
83 samplerate = 2205081 samplerate = 22050
84 freq_list = [0, 100, 1000, 4000, 8000, 10000]82 freq_list = [0, 100, 1000, 4000, 8000, 10000]
85 f = filterbank(len(freq_list)-3, 1024)83 f = filterbank(len(freq_list)-3, 1024)
86 # TODO add assert_warns84 with assert_warns(UserWarning):
87 f.set_triangle_bands(fvec(freq_list), samplerate)85 f.set_triangle_bands(fvec(freq_list), samplerate)
88 86
89 def test_triangle_freqs_with_too_many_filters(self):87 def test_triangle_freqs_with_too_many_filters(self):
90 """make sure set_triangle_bands warns when too many filters"""88 """make sure set_triangle_bands warns when too many filters"""
91 samplerate = 2205089 samplerate = 22050
92 freq_list = [0, 100, 1000, 4000, 8000, 10000]90 freq_list = [0, 100, 1000, 4000, 8000, 10000]
93 f = filterbank(len(freq_list)-1, 1024)91 f = filterbank(len(freq_list)-1, 1024)
94 # TODO add assert_warns92 with assert_warns(UserWarning):
95 f.set_triangle_bands(fvec(freq_list), samplerate)93 f.set_triangle_bands(fvec(freq_list), samplerate)
96 94
97 def test_triangle_freqs_with_double_value(self):95 def test_triangle_freqs_with_double_value(self):
98 """make sure set_triangle_bands works with 2 duplicate freqs"""96 """make sure set_triangle_bands works with 2 duplicate freqs"""
99 samplerate = 2205097 samplerate = 22050
100 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000]98 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000]
101 f = filterbank(len(freq_list)-2, 1024)99 f = filterbank(len(freq_list)-2, 1024)
102 # TODO add assert_warns100 with assert_warns(UserWarning):
103 f.set_triangle_bands(fvec(freq_list), samplerate)101 f.set_triangle_bands(fvec(freq_list), samplerate)
104 102
105 def test_triangle_freqs_with_triple(self):103 def test_triangle_freqs_with_triple(self):
106 """make sure set_triangle_bands works with 3 duplicate freqs"""104 """make sure set_triangle_bands works with 3 duplicate freqs"""
107 samplerate = 22050105 samplerate = 22050
108 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000]106 freq_list = [0, 100, 1000, 4000, 4000, 4000, 10000]
109 f = filterbank(len(freq_list)-2, 1024)107 f = filterbank(len(freq_list)-2, 1024)
110 # TODO add assert_warns108 with assert_warns(UserWarning):
111 f.set_triangle_bands(fvec(freq_list), samplerate)109 f.set_triangle_bands(fvec(freq_list), samplerate)
110
112 111
113 def test_triangle_freqs_without_norm(self):112 def test_triangle_freqs_without_norm(self):
114 """make sure set_triangle_bands works without """113 """make sure set_triangle_bands works without """
@@ -168,5 +167,5 @@ class aubio_filterbank_mel_test_case(TestCase): · 53 unmodified lines
168 167
169 168
170if __name__ == '__main__':169if __name__ == '__main__':
171 import nose2170 from unittest import main
172 nose2.main()171 main()
python/tests/test_fvec.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4import numpy as np3import numpy as np
5from numpy.testing import TestCase, assert_equal, assert_almost_equal4from numpy.testing import TestCase, assert_equal, assert_almost_equal
6from aubio import fvec, zero_crossing_rate, alpha_norm, min_removal5from aubio import fvec, zero_crossing_rate, alpha_norm, min_removal
@@ -148,4 +147,5 @@ class aubio_fvec_test_memory(TestCase): · 141 unmodified lines
148 del c147 del c
149 148
150if __name__ == '__main__':149if __name__ == '__main__':
150 from unittest import main
151 main()151 main()
python/tests/test_fvec_shift.py+1−1
@@ -30,6 +30,6 @@ class aubio_shift_test_case(TestCase): · 29 unmodified lines
30 def test_can_shift_fvec_odd(self):30 def test_can_shift_fvec_odd(self):
31 self.run_shift_ishift(7)31 self.run_shift_ishift(7)
32 32
33from unittest import main
34if __name__ == '__main__':33if __name__ == '__main__':
34 from unittest import main
35 main()35 main()
python/tests/test_hztomel.py+11−8
@@ -3,6 +3,7 @@ · 2 unmodified lines
3from unittest import main3from unittest import main
4from numpy.testing import TestCase4from numpy.testing import TestCase
5from numpy.testing import assert_equal, assert_almost_equal5from numpy.testing import assert_equal, assert_almost_equal
6from _tools import assert_warns
6import numpy as np7import numpy as np
7import aubio8import aubio
8 9
@@ -37,12 +38,12 @@ class aubio_hztomel_test_case(TestCase): · 28 unmodified lines
37 assert_almost_equal(meltohz(hztomel(f)) - f, 0, decimal=1)38 assert_almost_equal(meltohz(hztomel(f)) - f, 0, decimal=1)
38 39
39 def test_meltohz_negative(self):40 def test_meltohz_negative(self):
40 # TODO add assert_warns41 with assert_warns(UserWarning):
41 assert_equal(meltohz(-1), 0)42 assert_equal(meltohz(-1), 0)
42 43
43 def test_hztomel_negative(self):44 def test_hztomel_negative(self):
44 # TODO add assert_warns45 with assert_warns(UserWarning):
45 assert_equal(hztomel(-1), 0)46 assert_equal(hztomel(-1), 0)
46 47
47 48
48class aubio_hztomel_htk_test_case(TestCase):49class aubio_hztomel_htk_test_case(TestCase):
@@ -57,14 +58,16 @@ class aubio_hztomel_htk_test_case(TestCase): · 8 unmodified lines
57 assert_almost_equal(hztomel(6300, htk=True), 2595., decimal=1)58 assert_almost_equal(hztomel(6300, htk=True), 2595., decimal=1)
58 59
59 def test_meltohz_negative(self):60 def test_meltohz_negative(self):
60 # TODO add assert_warns61 with assert_warns(UserWarning):
61 assert_equal(meltohz(-1, htk=True), 0)62 assert_equal(meltohz(-1, htk=True), 0)
62 assert_almost_equal(meltohz(2000, htk=True), 3428.7, decimal=1)63 assert_almost_equal(meltohz(2000, htk=True), 3428.7, decimal=1)
63 assert_almost_equal(meltohz(1000, htk=True), 1000., decimal=1)64 assert_almost_equal(meltohz(1000, htk=True), 1000., decimal=1)
64 65
65 def test_hztomel_negative(self):66 def test_hztomel_negative(self):
66 # TODO add assert_warns67 with assert_warns(UserWarning):
67 assert_equal(hztomel(-1, htk=True), 0)68 assert_equal(meltohz(-1, htk=True), 0)
69 with assert_warns(UserWarning):
70 assert_equal(hztomel(-1, htk=True), 0)
68 assert_almost_equal(hztomel(1000, htk=True), 1000., decimal=1)71 assert_almost_equal(hztomel(1000, htk=True), 1000., decimal=1)
69 72
70 def test_hztomel_htk(self):73 def test_hztomel_htk(self):
python/tests/test_mathutils.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal3from numpy.testing import TestCase, assert_equal
5from numpy import array, arange, isnan, isinf4from numpy import array, arange, isnan, isinf
6from aubio import bintomidi, miditobin, freqtobin, bintofreq, freqtomidi, miditofreq5from aubio import bintomidi, miditobin, freqtobin, bintofreq, freqtomidi, miditofreq
@@ -101,4 +100,5 @@ class aubio_mathutils(TestCase): · 94 unmodified lines
101 assert_equal ( array(b) < 0, False )100 assert_equal ( array(b) < 0, False )
102 101
103if __name__ == '__main__':102if __name__ == '__main__':
103 from unittest import main
104 main()104 main()
python/tests/test_mfcc.py+17−21
@@ -1,7 +1,6 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from nose2 import main3from _tools import parametrize, assert_raises
4from nose2.tools import params
5from numpy import random, count_nonzero4from numpy import random, count_nonzero
6from numpy.testing import TestCase5from numpy.testing import TestCase
7from aubio import mfcc, cvec, float_type6from aubio import mfcc, cvec, float_type
@@ -15,28 +14,21 @@ samplerate = 44100 · 7 unmodified lines
15new_params = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate']14new_params = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate']
16new_deflts = [1024, 40, 13, 44100]15new_deflts = [1024, 40, 13, 44100]
17 16
18class aubio_mfcc(TestCase):17class Test_aubio_mfcc(object):
19 18
20 def setUp(self):19 members_args = 'name'
21 self.o = mfcc()
22 20
23 def test_default_creation(self):21 @parametrize(members_args, new_params)
24 pass
25
26 def test_delete(self):
27 del self.o
28
29 @params(*new_params)
30 def test_read_only_member(self, name):22 def test_read_only_member(self, name):
31 o = self.o23 o = mfcc()
32 with self.assertRaises((TypeError, AttributeError)):24 with assert_raises((TypeError, AttributeError)):
33 setattr(o, name, 0)25 setattr(o, name, 0)
34 26
35 @params(*zip(new_params, new_deflts))27 @parametrize('name, expected', zip(new_params, new_deflts))
36 def test_default_param(self, name, expected):28 def test_default_param(self, name, expected):
37 """ test mfcc.{:s} = {:d} """.format(name, expected)29 """ test mfcc.{:s} = {:d} """.format(name, expected)
38 o = self.o30 o = mfcc()
39 self.assertEqual( getattr(o, name), expected)31 assert getattr(o, name) == expected
40 32
41class aubio_mfcc_wrong_params(TestCase):33class aubio_mfcc_wrong_params(TestCase):
42 34
@@ -82,9 +74,9 @@ class aubio_mfcc_compute(TestCase): · 39 unmodified lines
82 #print coeffs74 #print coeffs
83 75
84 76
85class aubio_mfcc_all_parameters(TestCase):77class Test_aubio_mfcc_all_parameters(object):
86 78
87 @params(79 run_values = [
88 (2048, 40, 13, 44100),80 (2048, 40, 13, 44100),
89 (1024, 40, 13, 44100),81 (1024, 40, 13, 44100),
90 (512, 40, 13, 44100),82 (512, 40, 13, 44100),
@@ -100,7 +92,10 @@ class aubio_mfcc_all_parameters(TestCase): · 9 unmodified lines
100 #(1024, 30, 20, 44100),92 #(1024, 30, 20, 44100),
101 (1024, 40, 40, 44100),93 (1024, 40, 40, 44100),
102 (1024, 40, 3, 44100),94 (1024, 40, 3, 44100),
103 )95 ]
96 run_args = ['buf_size', 'n_filters', 'n_coeffs', 'samplerate']
97
98 @parametrize(run_args, run_values)
104 def test_run_with_params(self, buf_size, n_filters, n_coeffs, samplerate):99 def test_run_with_params(self, buf_size, n_filters, n_coeffs, samplerate):
105 " check mfcc can run with reasonable parameters "100 " check mfcc can run with reasonable parameters "
106 o = mfcc(buf_size, n_filters, n_coeffs, samplerate)101 o = mfcc(buf_size, n_filters, n_coeffs, samplerate)
@@ -148,4 +143,5 @@ class aubio_mfcc_fb_params(TestCase): · 41 unmodified lines
148 assert m.get_scale() == 1143 assert m.get_scale() == 1
149 144
150if __name__ == '__main__':145if __name__ == '__main__':
151 main()146 from _tools import run_module_suite
147 run_module_suite()
python/tests/test_midi2note.py+11−12
@@ -2,8 +2,7 @@ · 1 unmodified line
2# -*- coding: utf-8 -*-2# -*- coding: utf-8 -*-
3 3
4from aubio import midi2note4from aubio import midi2note
5from nose2.tools import params5from _tools import parametrize, assert_raises
6import unittest
7 6
8list_of_known_midis = (7list_of_known_midis = (
9 ( 0, 'C-1' ),8 ( 0, 'C-1' ),
@@ -15,31 +14,31 @@ list_of_known_midis = ( · 5 unmodified lines
15 ( 127, 'G9' ),14 ( 127, 'G9' ),
16 )15 )
17 16
18class midi2note_good_values(unittest.TestCase):17class Test_midi2note_good_values(object):
19 18
20 @params(*list_of_known_midis)19 @parametrize('midi, note', list_of_known_midis)
21 def test_midi2note_known_values(self, midi, note):20 def test_midi2note_known_values(self, midi, note):
22 " known values are correctly converted "21 " known values are correctly converted "
23 self.assertEqual ( midi2note(midi), note )22 assert midi2note(midi) == (note)
24 23
25class midi2note_wrong_values(unittest.TestCase):24class Test_midi2note_wrong_values(object):
26 25
27 def test_midi2note_negative_value(self):26 def test_midi2note_negative_value(self):
28 " fails when passed a negative value "27 " fails when passed a negative value "
29 self.assertRaises(ValueError, midi2note, -2)28 assert_raises(ValueError, midi2note, -2)
30 29
31 def test_midi2note_large(self):30 def test_midi2note_large(self):
32 " fails when passed a value greater than 127 "31 " fails when passed a value greater than 127 "
33 self.assertRaises(ValueError, midi2note, 128)32 assert_raises(ValueError, midi2note, 128)
34 33
35 def test_midi2note_floating_value(self):34 def test_midi2note_floating_value(self):
36 " fails when passed a floating point "35 " fails when passed a floating point "
37 self.assertRaises(TypeError, midi2note, 69.2)36 assert_raises(TypeError, midi2note, 69.2)
38 37
39 def test_midi2note_character_value(self):38 def test_midi2note_character_value(self):
40 " fails when passed a value that can not be transformed to integer "39 " fails when passed a value that can not be transformed to integer "
41 self.assertRaises(TypeError, midi2note, "a")40 assert_raises(TypeError, midi2note, "a")
42 41
43if __name__ == '__main__':42if __name__ == '__main__':
44 import nose243 from _tools import run_module_suite
45 nose2.main()44 run_module_suite()
python/tests/test_musicutils.py+2−2
@@ -1,9 +1,8 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4import numpy as np3import numpy as np
5from numpy.testing import TestCase4from numpy.testing import TestCase
6from numpy.testing.utils import assert_equal, assert_almost_equal5from numpy.testing import assert_equal, assert_almost_equal
7from aubio import window, level_lin, db_spl, silence_detection, level_detection6from aubio import window, level_lin, db_spl, silence_detection, level_detection
8from aubio import fvec, float_type7from aubio import fvec, float_type
9 8
@@ -85,4 +84,5 @@ class aubio_level_detection(TestCase): · 75 unmodified lines
85 assert level_detection(ones(1024, dtype = float_type), -70) == 084 assert level_detection(ones(1024, dtype = float_type), -70) == 0
86 85
87if __name__ == '__main__':86if __name__ == '__main__':
87 from unittest import main
88 main()88 main()
python/tests/test_note2midi.py+24−19
@@ -4,8 +4,8 @@ · 3 unmodified lines
4from __future__ import unicode_literals4from __future__ import unicode_literals
5 5
6from aubio import note2midi, freq2note, note2freq, float_type6from aubio import note2midi, freq2note, note2freq, float_type
7from nose2.tools import params7from numpy.testing import TestCase
8import unittest8from _tools import parametrize, assert_raises, skipTest
9 9
10list_of_known_notes = (10list_of_known_notes = (
11 ( 'C-1', 0 ),11 ( 'C-1', 0 ),
@@ -44,29 +44,32 @@ list_of_unknown_notes = ( · 32 unmodified lines
44 ( '2' ),44 ( '2' ),
45 )45 )
46 46
47class note2midi_good_values(unittest.TestCase):47class Test_note2midi_good_values(object):
48 48
49 @params(*list_of_known_notes)49 @parametrize('note, midi', list_of_known_notes)
50 def test_note2midi_known_values(self, note, midi):50 def test_note2midi_known_values(self, note, midi):
51 " known values are correctly converted "51 " known values are correctly converted "
52 self.assertEqual ( note2midi(note), midi )52 assert note2midi(note) == midi
53 53
54 @params(*list_of_known_notes_with_unicode_issues)54 @parametrize('note, midi', list_of_known_notes_with_unicode_issues)
55 def test_note2midi_known_values_with_unicode_issues(self, note, midi):55 def test_note2midi_known_values_with_unicode_issues(self, note, midi):
56 " known values are correctly converted, unless decoding is expected to fail"56 " difficult values are correctly converted unless expected failure "
57 try:57 try:
58 self.assertEqual ( note2midi(note), midi )58 assert note2midi(note) == midi
59 except UnicodeEncodeError as e:59 except UnicodeEncodeError as e:
60 # platforms with decoding failures include:
61 # - osx: python <= 2.7.10
62 # - win: python <= 2.7.12
60 import sys63 import sys
61 strfmt = "len(u'\\U0001D12A') != 1, excpected decoding failure | {:s} | {:s} {:s}"64 strmsg = "len(u'\\U0001D12A') != 1, expected decoding failure"
62 strres = strfmt.format(e, sys.platform, sys.version)65 strmsg += " | upgrade to Python 3 to fix"
63 # happens with: darwin 2.7.10, windows 2.7.1266 strmsg += " | {:s} | {:s} {:s}"
64 if len('\U0001D12A') != 1 and sys.version[0] == '2':67 if len('\U0001D12A') != 1 and sys.version[0] == '2':
65 self.skipTest(strres + " | upgrade to Python 3 to fix")68 skipTest(strmsg.format(repr(e), sys.platform, sys.version))
66 else:69 else:
67 raise70 raise
68 71
69class note2midi_wrong_values(unittest.TestCase):72class note2midi_wrong_values(TestCase):
70 73
71 def test_note2midi_missing_octave(self):74 def test_note2midi_missing_octave(self):
72 " fails when passed only one character"75 " fails when passed only one character"
@@ -104,12 +107,14 @@ class note2midi_wrong_values(unittest.TestCase): · 31 unmodified lines
104 " fails when passed a note with a note name longer than expected"107 " fails when passed a note with a note name longer than expected"
105 self.assertRaises(ValueError, note2midi, 'CB+-3')108 self.assertRaises(ValueError, note2midi, 'CB+-3')
106 109
107 @params(*list_of_unknown_notes)110class Test_note2midi_unknown_values(object):
111
112 @parametrize('note', list_of_unknown_notes)
108 def test_note2midi_unknown_values(self, note):113 def test_note2midi_unknown_values(self, note):
109 " unknown values throw out an error "114 " unknown values throw out an error "
110 self.assertRaises(ValueError, note2midi, note)115 assert_raises(ValueError, note2midi, note)
111 116
112class freq2note_simple_test(unittest.TestCase):117class freq2note_simple_test(TestCase):
113 118
114 def test_freq2note_above(self):119 def test_freq2note_above(self):
115 " make sure freq2note(441) == A4 "120 " make sure freq2note(441) == A4 "
@@ -119,7 +124,7 @@ class freq2note_simple_test(unittest.TestCase): · 3 unmodified lines
119 " make sure freq2note(439) == A4 "124 " make sure freq2note(439) == A4 "
120 self.assertEqual("A4", freq2note(439))125 self.assertEqual("A4", freq2note(439))
121 126
122class note2freq_simple_test(unittest.TestCase):127class note2freq_simple_test(TestCase):
123 128
124 def test_note2freq(self):129 def test_note2freq(self):
125 " make sure note2freq('A3') == 220"130 " make sure note2freq('A3') == 220"
@@ -133,5 +138,5 @@ class note2freq_simple_test(unittest.TestCase): · 7 unmodified lines
133 self.assertLess(abs(note2freq("A4")-440), 1.e-12)138 self.assertLess(abs(note2freq("A4")-440), 1.e-12)
134 139
135if __name__ == '__main__':140if __name__ == '__main__':
136 import nose2141 from _tools import run_module_suite
137 nose2.main()142 run_module_suite()
python/tests/test_notes.py+6−7
@@ -1,8 +1,11 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal, assert_almost_equal3from numpy.testing import TestCase, assert_equal, assert_almost_equal
5from aubio import notes4from aubio import notes, source
5import numpy as np
6from utils import list_all_sounds
7
8list_of_sounds = list_all_sounds('sounds')
6 9
7AUBIO_DEFAULT_NOTES_SILENCE = -70.10AUBIO_DEFAULT_NOTES_SILENCE = -70.
8AUBIO_DEFAULT_NOTES_RELEASE_DROP = 10.11AUBIO_DEFAULT_NOTES_RELEASE_DROP = 10.
@@ -52,14 +55,9 @@ class aubio_notes_params(TestCase): · 43 unmodified lines
52 with self.assertRaises(ValueError):55 with self.assertRaises(ValueError):
53 self.o.set_release_drop(val)56 self.o.set_release_drop(val)
54 57
55from .utils import list_all_sounds
56list_of_sounds = list_all_sounds('sounds')
57
58class aubio_notes_sinewave(TestCase):58class aubio_notes_sinewave(TestCase):
59 59
60 def analyze_file(self, filepath, samplerate=0):60 def analyze_file(self, filepath, samplerate=0):
61 from aubio import source
62 import numpy as np
63 win_s = 512 # fft size61 win_s = 512 # fft size
64 hop_s = 256 # hop size62 hop_s = 256 # hop size
65 63
@@ -92,4 +90,5 @@ class aubio_notes_sinewave(TestCase): · 26 unmodified lines
92 assert_equal (results[0][1], [69, 123, -1])90 assert_equal (results[0][1], [69, 123, -1])
93 91
94if __name__ == '__main__':92if __name__ == '__main__':
93 from unittest import main
95 main()94 main()
python/tests/test_onset.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal, assert_almost_equal3from numpy.testing import TestCase, assert_equal, assert_almost_equal
5from aubio import onset, fvec4from aubio import onset, fvec
6 5
@@ -116,4 +115,5 @@ class aubio_onset_coverate(TestCase): · 109 unmodified lines
116 115
117 116
118if __name__ == '__main__':117if __name__ == '__main__':
118 from unittest import main
119 main()119 main()
python/tests/test_phasevoc.py+13−8
@@ -1,9 +1,8 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from numpy.testing import TestCase, assert_equal, assert_array_less3from numpy.testing import TestCase, assert_equal, assert_array_less
4from _tools import parametrize
4from aubio import fvec, cvec, pvoc, float_type5from aubio import fvec, cvec, pvoc, float_type
5from nose2 import main
6from nose2.tools import params
7import numpy as np6import numpy as np
8 7
9if float_type == 'float32':8if float_type == 'float32':
@@ -18,7 +17,7 @@ def create_sine(hop_s, freq, samplerate): · 8 unmodified lines
18def create_noise(hop_s):17def create_noise(hop_s):
19 return np.random.rand(hop_s).astype(float_type) * 2. - 1.18 return np.random.rand(hop_s).astype(float_type) * 2. - 1.
20 19
21class aubio_pvoc_test_case(TestCase):20class Test_aubio_pvoc_test_case(object):
22 """ pvoc object test case """21 """ pvoc object test case """
23 22
24 def test_members_automatic_sizes_default(self):23 def test_members_automatic_sizes_default(self):
@@ -65,7 +64,8 @@ class aubio_pvoc_test_case(TestCase): · 40 unmodified lines
65 r = f.rdo(s)64 r = f.rdo(s)
66 assert_equal ( t, 0.)65 assert_equal ( t, 0.)
67 66
68 @params(67 resynth_noise_args = "hop_s, ratio"
68 resynth_noise_values = [
69 ( 256, 8),69 ( 256, 8),
70 ( 256, 4),70 ( 256, 4),
71 ( 256, 2),71 ( 256, 2),
@@ -87,13 +87,16 @@ class aubio_pvoc_test_case(TestCase): · 15 unmodified lines
87 (8192, 8),87 (8192, 8),
88 (8192, 4),88 (8192, 4),
89 (8192, 2),89 (8192, 2),
90 )90 ]
91
92 @parametrize(resynth_noise_args, resynth_noise_values)
91 def test_resynth_steps_noise(self, hop_s, ratio):93 def test_resynth_steps_noise(self, hop_s, ratio):
92 """ check the resynthesis of a random signal is correct """94 """ check the resynthesis of a random signal is correct """
93 sigin = create_noise(hop_s)95 sigin = create_noise(hop_s)
94 self.reconstruction(sigin, hop_s, ratio)96 self.reconstruction(sigin, hop_s, ratio)
95 97
96 @params(98 resynth_sine_args = "samplerate, hop_s, ratio, freq"
99 resynth_sine_values = [
97 (44100, 256, 8, 441),100 (44100, 256, 8, 441),
98 (44100, 256, 4, 1203),101 (44100, 256, 4, 1203),
99 (44100, 256, 2, 3045),102 (44100, 256, 2, 3045),
@@ -108,7 +111,9 @@ class aubio_pvoc_test_case(TestCase): · 8 unmodified lines
108 (22050, 256, 8, 445),111 (22050, 256, 8, 445),
109 (96000, 1024, 8, 47000),112 (96000, 1024, 8, 47000),
110 (96000, 1024, 8, 20),113 (96000, 1024, 8, 20),
111 )114 ]
115
116 @parametrize(resynth_sine_args, resynth_sine_values)
112 def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq):117 def test_resynth_steps_sine(self, samplerate, hop_s, ratio, freq):
113 """ check the resynthesis of a sine is correct """118 """ check the resynthesis of a sine is correct """
114 sigin = create_sine(hop_s, freq, samplerate)119 sigin = create_sine(hop_s, freq, samplerate)
@@ -199,5 +204,5 @@ class aubio_pvoc_wrong_params(TestCase): · 84 unmodified lines
199 self.skipTest('creating aubio.pvoc with size %d did not fail' % win_s)204 self.skipTest('creating aubio.pvoc with size %d did not fail' % win_s)
200 205
201if __name__ == '__main__':206if __name__ == '__main__':
207 from unittest import main
202 main()208 main()
203
python/tests/test_pitch.py+5−5
@@ -1,7 +1,6 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import TestCase, main3from numpy.testing import TestCase, assert_equal
4from numpy.testing import assert_equal
5from numpy import sin, arange, mean, median, isnan, pi4from numpy import sin, arange, mean, median, isnan, pi
6from aubio import fvec, pitch, freqtomidi, float_type5from aubio import fvec, pitch, freqtomidi, float_type
7 6
@@ -116,10 +115,11 @@ def create_test (algo, mode): · 108 unmodified lines
116 115
117for algo in pitch_algorithms:116for algo in pitch_algorithms:
118 for mode in signal_modes:117 for mode in signal_modes:
119 test_method = create_test (algo, mode)118 _test_method = create_test (algo, mode)
120 test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo,119 _test_method.__name__ = 'test_pitch_%s_%d_%d_%dHz_sin_%.0f' % ( algo,
121 mode[0], mode[1], mode[2], mode[3] )120 mode[0], mode[1], mode[2], mode[3] )
122 setattr (aubio_pitch_Sinusoid, test_method.__name__, test_method)121 setattr (aubio_pitch_Sinusoid, _test_method.__name__, _test_method)
123 122
124if __name__ == '__main__':123if __name__ == '__main__':
124 from unittest import main
125 main()125 main()
python/tests/test_sink.py+16−22
@@ -1,13 +1,9 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from nose2 import main
4from nose2.tools import params
5from numpy.testing import TestCase3from numpy.testing import TestCase
6from aubio import fvec, source, sink4from aubio import fvec, source, sink
7from .utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path5from utils import list_all_sounds, get_tmp_sink_path, del_tmp_sink_path
8 6from _tools import parametrize, skipTest, assert_raises
9import warnings
10warnings.filterwarnings('ignore', category=UserWarning, append=True)
11 7
12list_of_sounds = list_all_sounds('sounds')8list_of_sounds = list_all_sounds('sounds')
13samplerates = [0, 44100, 8000, 32000]9samplerates = [0, 44100, 8000, 32000]
@@ -23,30 +19,26 @@ for soundfile in list_of_sounds: · 9 unmodified lines
23 for samplerate in samplerates:19 for samplerate in samplerates:
24 all_params.append((hop_size, samplerate, soundfile))20 all_params.append((hop_size, samplerate, soundfile))
25 21
26class aubio_sink_test_case(TestCase):22class Test_aubio_sink(object):
27
28 def setUp(self):
29 if not len(list_of_sounds):
30 self.skipTest('add some sound files in \'python/tests/sounds\'')
31 23
32 def test_wrong_filename(self):24 def test_wrong_filename(self):
33 with self.assertRaises(RuntimeError):25 with assert_raises(RuntimeError):
34 sink('')26 sink('')
35 27
36 def test_wrong_samplerate(self):28 def test_wrong_samplerate(self):
37 with self.assertRaises(RuntimeError):29 with assert_raises(RuntimeError):
38 sink(get_tmp_sink_path(), -1)30 sink(get_tmp_sink_path(), -1)
39 31
40 def test_wrong_samplerate_too_large(self):32 def test_wrong_samplerate_too_large(self):
41 with self.assertRaises(RuntimeError):33 with assert_raises(RuntimeError):
42 sink(get_tmp_sink_path(), 1536001, 2)34 sink(get_tmp_sink_path(), 1536001, 2)
43 35
44 def test_wrong_channels(self):36 def test_wrong_channels(self):
45 with self.assertRaises(RuntimeError):37 with assert_raises(RuntimeError):
46 sink(get_tmp_sink_path(), 44100, -1)38 sink(get_tmp_sink_path(), 44100, -1)
47 39
48 def test_wrong_channels_too_large(self):40 def test_wrong_channels_too_large(self):
49 with self.assertRaises(RuntimeError):41 with assert_raises(RuntimeError):
50 sink(get_tmp_sink_path(), 44100, 202020)42 sink(get_tmp_sink_path(), 44100, 202020)
51 43
52 def test_many_sinks(self):44 def test_many_sinks(self):
@@ -66,13 +58,13 @@ class aubio_sink_test_case(TestCase): · 13 unmodified lines
66 g.close()58 g.close()
67 shutil.rmtree(tmpdir)59 shutil.rmtree(tmpdir)
68 60
69 @params(*all_params)61 @parametrize('hop_size, samplerate, path', all_params)
70 def test_read_and_write(self, hop_size, samplerate, path):62 def test_read_and_write(self, hop_size, samplerate, path):
71
72 try:63 try:
73 f = source(path, samplerate, hop_size)64 f = source(path, samplerate, hop_size)
74 except RuntimeError as e:65 except RuntimeError as e:
75 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e)))66 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})'
67 skipTest(err_msg.format(str(e), hop_size, samplerate))
76 if samplerate == 0: samplerate = f.samplerate68 if samplerate == 0: samplerate = f.samplerate
77 sink_path = get_tmp_sink_path()69 sink_path = get_tmp_sink_path()
78 g = sink(sink_path, samplerate)70 g = sink(sink_path, samplerate)
@@ -84,12 +76,13 @@ class aubio_sink_test_case(TestCase): · 5 unmodified lines
84 if read < f.hop_size: break76 if read < f.hop_size: break
85 del_tmp_sink_path(sink_path)77 del_tmp_sink_path(sink_path)
86 78
87 @params(*all_params)79 @parametrize('hop_size, samplerate, path', all_params)
88 def test_read_and_write_multi(self, hop_size, samplerate, path):80 def test_read_and_write_multi(self, hop_size, samplerate, path):
89 try:81 try:
90 f = source(path, samplerate, hop_size)82 f = source(path, samplerate, hop_size)
91 except RuntimeError as e:83 except RuntimeError as e:
92 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e)))84 err_msg = '{:s} (hop_s = {:d}, samplerate = {:d})'
85 skipTest(err_msg.format(str(e), hop_size, samplerate))
93 if samplerate == 0: samplerate = f.samplerate86 if samplerate == 0: samplerate = f.samplerate
94 sink_path = get_tmp_sink_path()87 sink_path = get_tmp_sink_path()
95 g = sink(sink_path, samplerate, channels = f.channels)88 g = sink(sink_path, samplerate, channels = f.channels)
@@ -125,4 +118,5 @@ class aubio_sink_test_case(TestCase): · 29 unmodified lines
125 g(vec, 128)118 g(vec, 128)
126 119
127if __name__ == '__main__':120if __name__ == '__main__':
128 main()121 from _tools import run_module_suite
122 run_module_suite()
python/tests/test_slicing.py+3−3
@@ -1,10 +1,9 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal3from numpy.testing import TestCase, assert_equal
5from aubio import slice_source_at_stamps4from aubio import slice_source_at_stamps
6from .utils import count_files_in_directory, get_default_test_sound5from utils import count_files_in_directory, get_default_test_sound
7from .utils import count_samples_in_directory, count_samples_in_file6from utils import count_samples_in_directory, count_samples_in_file
8 7
9import tempfile8import tempfile
10import shutil9import shutil
@@ -167,4 +166,5 @@ class aubio_slicing_wrong_ends_test_case(TestCase): · 156 unmodified lines
167 shutil.rmtree(self.output_dir)166 shutil.rmtree(self.output_dir)
168 167
169if __name__ == '__main__':168if __name__ == '__main__':
169 from unittest import main
170 main()170 main()
python/tests/test_source.py+56−53
@@ -1,19 +1,17 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from nose2 import main3
4from nose2.tools import params
5from numpy.testing import TestCase, assert_equal4from numpy.testing import TestCase, assert_equal
6from aubio import source5from aubio import source
7from .utils import list_all_sounds6from utils import list_all_sounds
8 7import unittest
9import warnings8from _tools import parametrize, assert_raises, assert_equal, skipTest
10warnings.filterwarnings('ignore', category=UserWarning, append=True)
11 9
12list_of_sounds = list_all_sounds('sounds')10list_of_sounds = list_all_sounds('sounds')
13samplerates = [0, 44100, 8000, 32000]11samplerates = [0, 44100, 8000, 32000]
14hop_sizes = [512, 1024, 64]12hop_sizes = [512, 1024, 64]
15 13
16path = None14default_test_sound = len(list_of_sounds) and list_of_sounds[0] or None
17 15
18all_params = []16all_params = []
19for soundfile in list_of_sounds:17for soundfile in list_of_sounds:
@@ -21,24 +19,20 @@ for soundfile in list_of_sounds: · 1 unmodified line
21 for samplerate in samplerates:19 for samplerate in samplerates:
22 all_params.append((hop_size, samplerate, soundfile))20 all_params.append((hop_size, samplerate, soundfile))
23 21
22no_sounds_msg = "no test sounds, add some in 'python/tests/sounds/'!"
24 23
25class aubio_source_test_case_base(TestCase):24_debug = False
26
27 def setUp(self):
28 if not len(list_of_sounds):
29 self.skipTest('add some sound files in \'python/tests/sounds\'')
30 self.default_test_sound = list_of_sounds[0]
31 25
32class aubio_source_test_case(aubio_source_test_case_base):26class Test_aubio_source_test_case(object):
33 27
34 @params(*list_of_sounds)28 @parametrize('filename', list_of_sounds)
35 def test_close_file(self, filename):29 def test_close_file(self, filename):
36 samplerate = 0 # use native samplerate30 samplerate = 0 # use native samplerate
37 hop_size = 25631 hop_size = 256
38 f = source(filename, samplerate, hop_size)32 f = source(filename, samplerate, hop_size)
39 f.close()33 f.close()
40 34
41 @params(*list_of_sounds)35 @parametrize('filename', list_of_sounds)
42 def test_close_file_twice(self, filename):36 def test_close_file_twice(self, filename):
43 samplerate = 0 # use native samplerate37 samplerate = 0 # use native samplerate
44 hop_size = 25638 hop_size = 256
@@ -46,7 +40,7 @@ class aubio_source_test_case(aubio_source_test_case_base): · 1 unmodified line
46 f.close()40 f.close()
47 f.close()41 f.close()
48 42
49class aubio_source_read_test_case(aubio_source_test_case_base):43class Test_aubio_source_read(object):
50 44
51 def read_from_source(self, f):45 def read_from_source(self, f):
52 total_frames = 046 total_frames = 0
@@ -56,47 +50,51 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 3 unmodified lines
56 if read < f.hop_size:50 if read < f.hop_size:
57 assert_equal(samples[read:], 0)51 assert_equal(samples[read:], 0)
58 break52 break
59 #result_str = "read {:.2f}s ({:d} frames in {:d} blocks at {:d}Hz) from {:s}"53 if _debug:
60 #result_params = total_frames / float(f.samplerate), total_frames, total_frames//f.hop_size, f.samplerate, f.uri54 result_str = "read {:.2f}s ({:d} frames"
61 #print (result_str.format(*result_params))55 result_str += " in {:d} blocks at {:d}Hz) from {:s}"
56 result_params = total_frames / float(f.samplerate), total_frames, \
57 total_frames//f.hop_size, f.samplerate, f.uri
58 print (result_str.format(*result_params))
62 return total_frames59 return total_frames
63 60
64 @params(*all_params)61 @parametrize('hop_size, samplerate, soundfile', all_params)
65 def test_samplerate_hopsize(self, hop_size, samplerate, soundfile):62 def test_samplerate_hopsize(self, hop_size, samplerate, soundfile):
66 try:63 try:
67 f = source(soundfile, samplerate, hop_size)64 f = source(soundfile, samplerate, hop_size)
68 except RuntimeError as e:65 except RuntimeError as e:
69 self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, str(e)))66 err_msg = 'failed opening with hop_s={:d}, samplerate={:d} ({:s})'
67 skipTest(err_msg.format(hop_size, samplerate, str(e)))
70 assert f.samplerate != 068 assert f.samplerate != 0
71 read_frames = self.read_from_source(f)69 read_frames = self.read_from_source(f)
72 if 'f_' in soundfile and samplerate == 0:70 if 'f_' in soundfile and samplerate == 0:
73 import re71 import re
74 f = re.compile('.*_\([0:9]*f\)_.*')72 f = re.compile(r'.*_\([0:9]*f\)_.*')
75 match_f = re.findall('([0-9]*)f_', soundfile)73 match_f = re.findall('([0-9]*)f_', soundfile)
76 if len(match_f) == 1:74 if len(match_f) == 1:
77 expected_frames = int(match_f[0])75 expected_frames = int(match_f[0])
78 self.assertEqual(expected_frames, read_frames)76 assert_equal(expected_frames, read_frames)
79 77
80 @params(*list_of_sounds)78 @parametrize('p', list_of_sounds)
81 def test_samplerate_none(self, p):79 def test_samplerate_none(self, p):
82 f = source(p)80 f = source(p)
83 assert f.samplerate != 081 assert f.samplerate != 0
84 self.read_from_source(f)82 self.read_from_source(f)
85 83
86 @params(*list_of_sounds)84 @parametrize('p', list_of_sounds)
87 def test_samplerate_0(self, p):85 def test_samplerate_0(self, p):
88 f = source(p, 0)86 f = source(p, 0)
89 assert f.samplerate != 087 assert f.samplerate != 0
90 self.read_from_source(f)88 self.read_from_source(f)
91 89
92 @params(*list_of_sounds)90 @parametrize('p', list_of_sounds)
93 def test_zero_hop_size(self, p):91 def test_zero_hop_size(self, p):
94 f = source(p, 0, 0)92 f = source(p, 0, 0)
95 assert f.samplerate != 093 assert f.samplerate != 0
96 assert f.hop_size != 094 assert f.hop_size != 0
97 self.read_from_source(f)95 self.read_from_source(f)
98 96
99 @params(*list_of_sounds)97 @parametrize('p', list_of_sounds)
100 def test_seek_to_half(self, p):98 def test_seek_to_half(self, p):
101 from random import randint99 from random import randint
102 f = source(p, 0, 0)100 f = source(p, 0, 0)
@@ -108,7 +106,7 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 5 unmodified lines
108 b = self.read_from_source(f)106 b = self.read_from_source(f)
109 assert a == b + c107 assert a == b + c
110 108
111 @params(*list_of_sounds)109 @parametrize('p', list_of_sounds)
112 def test_duration(self, p):110 def test_duration(self, p):
113 total_frames = 0111 total_frames = 0
114 f = source(p)112 f = source(p)
@@ -117,43 +115,44 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 2 unmodified lines
117 _, read = f()115 _, read = f()
118 total_frames += read116 total_frames += read
119 if read < f.hop_size: break117 if read < f.hop_size: break
120 self.assertEqual(duration, total_frames)118 assert_equal (duration, total_frames)
121 119
122 120
123class aubio_source_test_wrong_params(TestCase):121class Test_aubio_source_wrong_params(object):
124 122
125 def test_wrong_file(self):123 def test_wrong_file(self):
126 with self.assertRaises(RuntimeError):124 with assert_raises(RuntimeError):
127 source('path_to/unexisting file.mp3')125 source('path_to/unexisting file.mp3')
128 126
129class aubio_source_test_wrong_params_with_file(aubio_source_test_case_base):127@unittest.skipIf(default_test_sound is None, no_sounds_msg)
128class Test_aubio_source_wrong_params_with_file(TestCase):
130 129
131 def test_wrong_samplerate(self):130 def test_wrong_samplerate(self):
132 with self.assertRaises(ValueError):131 with assert_raises(ValueError):
133 source(self.default_test_sound, -1)132 source(default_test_sound, -1)
134 133
135 def test_wrong_hop_size(self):134 def test_wrong_hop_size(self):
136 with self.assertRaises(ValueError):135 with assert_raises(ValueError):
137 source(self.default_test_sound, 0, -1)136 source(default_test_sound, 0, -1)
138 137
139 def test_wrong_channels(self):138 def test_wrong_channels(self):
140 with self.assertRaises(ValueError):139 with assert_raises(ValueError):
141 source(self.default_test_sound, 0, 0, -1)140 source(default_test_sound, 0, 0, -1)
142 141
143 def test_wrong_seek(self):142 def test_wrong_seek(self):
144 f = source(self.default_test_sound)143 f = source(default_test_sound)
145 with self.assertRaises(ValueError):144 with assert_raises(ValueError):
146 f.seek(-1)145 f.seek(-1)
147 146
148 def test_wrong_seek_too_large(self):147 def test_wrong_seek_too_large(self):
149 f = source(self.default_test_sound)148 f = source(default_test_sound)
150 try:149 try:
151 with self.assertRaises(ValueError):150 with assert_raises(ValueError):
152 f.seek(f.duration + f.samplerate * 10)151 f.seek(f.duration + f.samplerate * 10)
153 except AssertionError:152 except:
154 self.skipTest('seeking after end of stream failed raising ValueError')153 skipTest('seeking after end of stream failed raising ValueError')
155 154
156class aubio_source_readmulti_test_case(aubio_source_read_test_case):155class Test_aubio_source_readmulti(Test_aubio_source_read):
157 156
158 def read_from_source(self, f):157 def read_from_source(self, f):
159 total_frames = 0158 total_frames = 0
@@ -163,15 +162,18 @@ class aubio_source_readmulti_test_case(aubio_source_read_test_case): · 3 unmodified lines
163 if read < f.hop_size:162 if read < f.hop_size:
164 assert_equal(samples[:,read:], 0)163 assert_equal(samples[:,read:], 0)
165 break164 break
166 #result_str = "read {:.2f}s ({:d} frames in {:d} channels and {:d} blocks at {:d}Hz) from {:s}"165 if _debug:
167 #result_params = total_frames / float(f.samplerate), total_frames, f.channels, int(total_frames/f.hop_size), f.samplerate, f.uri166 result_str = "read {:.2f}s ({:d} frames in {:d} channels"
168 #print (result_str.format(*result_params))167 result_str += " and {:d} blocks at {:d}Hz) from {:s}"
168 result_params = total_frames / float(f.samplerate), total_frames, \
169 f.channels, int(total_frames/f.hop_size), \
170 f.samplerate, f.uri
171 print (result_str.format(*result_params))
169 return total_frames172 return total_frames
170 173
171class aubio_source_with(aubio_source_test_case_base):174class Test_aubio_source_with(object):
172 175
173 #@params(*list_of_sounds)176 @parametrize('filename', list_of_sounds)
174 @params(*list_of_sounds)
175 def test_read_from_mono(self, filename):177 def test_read_from_mono(self, filename):
176 total_frames = 0178 total_frames = 0
177 hop_size = 2048179 hop_size = 2048
@@ -185,4 +187,5 @@ class aubio_source_with(aubio_source_test_case_base): · 7 unmodified lines
185 assert_equal(total_frames, input_source.duration)187 assert_equal(total_frames, input_source.duration)
186 188
187if __name__ == '__main__':189if __name__ == '__main__':
188 main()190 from _tools import run_module_suite
191 run_module_suite()
python/tests/test_source_channels.py+1−1
@@ -8,7 +8,7 @@ import unittest · 7 unmodified lines
8import aubio8import aubio
9import numpy as np9import numpy as np
10from numpy.testing import assert_equal10from numpy.testing import assert_equal
11from .utils import get_tmp_sink_path11from utils import get_tmp_sink_path
12 12
13class aubio_source_test_case(unittest.TestCase):13class aubio_source_test_case(unittest.TestCase):
14 14
python/tests/test_specdesc.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase, assert_equal, assert_almost_equal3from numpy.testing import TestCase, assert_equal, assert_almost_equal
5from numpy import random, arange, log, zeros4from numpy import random, arange, log, zeros
6from aubio import specdesc, cvec, float_type5from aubio import specdesc, cvec, float_type
@@ -229,4 +228,5 @@ class aubio_specdesc_wrong(TestCase): · 222 unmodified lines
229 specdesc("unknown", 512)228 specdesc("unknown", 512)
230 229
231if __name__ == '__main__':230if __name__ == '__main__':
231 from unittest import main
232 main()232 main()
python/tests/test_zero_crossing_rate.py+1−1
@@ -1,6 +1,5 @@
1#! /usr/bin/env python1#! /usr/bin/env python
2 2
3from unittest import main
4from numpy.testing import TestCase3from numpy.testing import TestCase
5from aubio import fvec, zero_crossing_rate4from aubio import fvec, zero_crossing_rate
6 5
@@ -43,4 +42,5 @@ class zero_crossing_rate_test_case(TestCase): · 36 unmodified lines
43 self.assertEqual(2./buf_size, zero_crossing_rate(self.vector))42 self.assertEqual(2./buf_size, zero_crossing_rate(self.vector))
44 43
45if __name__ == '__main__':44if __name__ == '__main__':
45 from unittest import main
46 main()46 main()
python/tests/utils.py+6−12
@@ -8,11 +8,8 @@ from tempfile import mkstemp · 7 unmodified lines
8DEFAULT_SOUND = '22050Hz_5s_brownnoise.wav'8DEFAULT_SOUND = '22050Hz_5s_brownnoise.wav'
9 9
10def array_from_text_file(filename, dtype = 'float'):10def array_from_text_file(filename, dtype = 'float'):
11 filename = os.path.join(os.path.dirname(__file__), filename)11 realpathname = os.path.join(os.path.dirname(__file__), filename)
12 with open(filename) as f:12 return np.loadtxt(realpathname, dtype = dtype)
13 lines = f.readlines()
14 return np.array([line.split() for line in lines],
15 dtype = dtype)
16 13
17def list_all_sounds(rel_dir):14def list_all_sounds(rel_dir):
18 datadir = os.path.join(os.path.dirname(__file__), rel_dir)15 datadir = os.path.join(os.path.dirname(__file__), rel_dir)
@@ -38,13 +35,10 @@ def del_tmp_sink_path(path): · 19 unmodified lines
38 try:35 try:
39 os.unlink(path)36 os.unlink(path)
40 except WindowsError as e:37 except WindowsError as e:
41 print("deleting {:s} failed ({:s}), reopening".format(path, repr(e)))38 # removing the temporary directory sometimes fails on windows
42 with open(path, 'wb') as f:39 import warnings
43 f.close()40 errmsg = "failed deleting temporary file {:s} ({:s})"
44 try:41 warnings.warn(UserWarning(errmsg.format(path, repr(e))))
45 os.unlink(path)
46 except WindowsError as f:
47 print("deleting {:s} failed ({:s}), aborting".format(path, repr(e)))
48 42
49def array_from_yaml_file(filename):43def array_from_yaml_file(filename):
50 import yaml44 import yaml

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t