History

python/tests/test_source.py: use nose2 to create one unit test per sound file

Paul Brossier committed 10 years ago

Commit 5f5f8431 parent 2fe24df1 file · +83 −70Browse files

Showing the changes to python (1 of 1 file). Show all

Unified · Split

python/tests/test_source.py+83−70
@@ -4,10 +4,21 @@ from numpy.testing import TestCase, assert_equal, assert_almost_equal · 3 unmodified lines
44 from aubio import fvec, source
55 from numpy import array
66 from utils import list_all_sounds
7+from nose2.tools import params
78
89 list_of_sounds = list_all_sounds('sounds')
10+samplerates = [0, 44100, 8000, 32000]
11+hop_sizes = [512, 1024, 64]
12+
913 path = None
1014
15+all_params = []
16+for soundfile in list_of_sounds:
17+ for hop_size in hop_sizes:
18+ for samplerate in samplerates:
19+ all_params.append((hop_size, samplerate, soundfile))
20+
21+
1122 class aubio_source_test_case_base(TestCase):
1223
1324 def setUp(self):
@@ -39,76 +50,78 @@ class aubio_source_read_test_case(aubio_source_test_case_base): · 25 unmodified lines
3950 total_frames += read
4051 if read < f.hop_size: break
4152 result_str = "read {:.2f}s ({:d} frames in {:d} blocks at {:d}Hz) from {:s}"
42− params = total_frames / float(f.samplerate), total_frames, int(total_frames/f.hop_size), f.samplerate, f.uri
43− print (result_str.format(*params))
53+ result_params = total_frames / float(f.samplerate), total_frames, int(total_frames/f.hop_size), f.samplerate, f.uri
54+ print (result_str.format(*result_params))
4455 return total_frames
4556
46− def test_samplerate_hopsize(self):
47− for p in list_of_sounds:
48− for samplerate, hop_size in zip([0, 44100, 8000, 32000], [ 512, 512, 64, 256]):
49− f = source(p, samplerate, hop_size)
50− assert f.samplerate != 0
51− self.read_from_source(f)
52−
53− def test_samplerate_none(self):
54− for p in list_of_sounds:
55− f = source(p)
56− assert f.samplerate != 0
57− self.read_from_source(f)
58−
59− def test_samplerate_0(self):
60− for p in list_of_sounds:
61− f = source(p, 0)
62− assert f.samplerate != 0
63− self.read_from_source(f)
64−
65− def test_wrong_samplerate(self):
66− for p in list_of_sounds:
67− try:
68− f = source(p, -1)
69− except ValueError as e:
70− pass
71− else:
72− self.fail('negative samplerate does not raise ValueError')
73−
74− def test_wrong_hop_size(self):
75− for p in list_of_sounds:
76− try:
77− f = source(p, 0, -1)
78− except ValueError as e:
79− pass
80− else:
81− self.fail('negative hop_size does not raise ValueError')
82−
83− def test_zero_hop_size(self):
84− for p in list_of_sounds:
85− f = source(p, 0, 0)
86− assert f.samplerate != 0
87− assert f.hop_size != 0
88− self.read_from_source(f)
89−
90− def test_seek_to_half(self):
57+ @params(*all_params)
58+ def test_samplerate_hopsize(self, hop_size, samplerate, soundfile):
59+ try:
60+ f = source(soundfile, samplerate, hop_size)
61+ except RuntimeError as e:
62+ self.skipTest('failed opening with hop_s = {:d}, samplerate = {:d} ({:s})'.format(hop_size, samplerate, e))
63+ assert f.samplerate != 0
64+ self.read_from_source(f)
65+
66+ @params(*list_of_sounds)
67+ def test_samplerate_none(self, p):
68+ f = source(p)
69+ assert f.samplerate != 0
70+ self.read_from_source(f)
71+
72+ @params(*list_of_sounds)
73+ def test_samplerate_0(self, p):
74+ f = source(p, 0)
75+ assert f.samplerate != 0
76+ self.read_from_source(f)
77+
78+ @params(*list_of_sounds)
79+ def test_wrong_samplerate(self, p):
80+ try:
81+ f = source(p, -1)
82+ except ValueError as e:
83+ pass
84+ else:
85+ self.fail('negative samplerate does not raise ValueError')
86+
87+ @params(*list_of_sounds)
88+ def test_wrong_hop_size(self, p):
89+ try:
90+ f = source(p, 0, -1)
91+ except ValueError as e:
92+ pass
93+ else:
94+ self.fail('negative hop_size does not raise ValueError')
95+
96+ @params(*list_of_sounds)
97+ def test_zero_hop_size(self, p):
98+ f = source(p, 0, 0)
99+ assert f.samplerate != 0
100+ assert f.hop_size != 0
101+ self.read_from_source(f)
102+
103+ @params(*list_of_sounds)
104+ def test_seek_to_half(self, p):
91105 from random import randint
92− for p in list_of_sounds:
93− f = source(p, 0, 0)
94− assert f.samplerate != 0
95− assert f.hop_size != 0
96− a = self.read_from_source(f)
97− c = randint(0, a)
98− f.seek(c)
99− b = self.read_from_source(f)
100− assert a == b + c
101−
102− def test_duration(self):
103− for p in list_of_sounds:
104− total_frames = 0
105− f = source(p)
106− duration = f.duration
107− while True:
108− vec, read = f()
109− total_frames += read
110− if read < f.hop_size: break
111− self.assertEqual(duration, total_frames)
106+ f = source(p, 0, 0)
107+ assert f.samplerate != 0
108+ assert f.hop_size != 0
109+ a = self.read_from_source(f)
110+ c = randint(0, a)
111+ f.seek(c)
112+ b = self.read_from_source(f)
113+ assert a == b + c
114+
115+ @params(*list_of_sounds)
116+ def test_duration(self, p):
117+ total_frames = 0
118+ f = source(p)
119+ duration = f.duration
120+ while True:
121+ vec, read = f()
122+ total_frames += read
123+ if read < f.hop_size: break
124+ self.assertEqual(duration, total_frames)
112125
113126 class aubio_source_readmulti_test_case(aubio_source_read_test_case):
114127
@@ -119,10 +132,10 @@ class aubio_source_readmulti_test_case(aubio_source_read_test_case): · 4 unmodified lines
119132 total_frames += read
120133 if read < f.hop_size: break
121134 result_str = "read {:.2f}s ({:d} frames in {:d} channels and {:d} blocks at {:d}Hz) from {:s}"
122− params = total_frames / float(f.samplerate), total_frames, f.channels, int(total_frames/f.hop_size), f.samplerate, f.uri
123− print (result_str.format(*params))
135+ result_params = total_frames / float(f.samplerate), total_frames, f.channels, int(total_frames/f.hop_size), f.samplerate, f.uri
136+ print (result_str.format(*result_params))
124137 return total_frames
125138
126139 if __name__ == '__main__':
127− from unittest import main
140+ from nose2 import main
128141 main()

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