blob: a92cf874bd25c4e36514573b8ccc7243a5225740 [file] [log] [blame]
Guido van Rossumfa7fcb91994-01-12 09:55:11 +00001import audioop
Serhiy Storchaka01ad6222013-02-09 11:10:53 +02002import sys
Benjamin Peterson41181742008-07-02 20:22:54 +00003import unittest
Benjamin Peterson41181742008-07-02 20:22:54 +00004
Serhiy Storchaka01ad6222013-02-09 11:10:53 +02005def pack(width, data):
6 return b''.join(v.to_bytes(width, sys.byteorder, signed=True) for v in data)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +00007
Serhiy Storchaka01ad6222013-02-09 11:10:53 +02008packs = {w: (lambda *data, width=w: pack(width, data)) for w in (1, 2, 4)}
9maxvalues = {w: (1 << (8 * w - 1)) - 1 for w in (1, 2, 4)}
10minvalues = {w: -1 << (8 * w - 1) for w in (1, 2, 4)}
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000011
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020012datas = {
13 1: b'\x00\x12\x45\xbb\x7f\x80\xff',
14 2: packs[2](0, 0x1234, 0x4567, -0x4567, 0x7fff, -0x8000, -1),
15 4: packs[4](0, 0x12345678, 0x456789ab, -0x456789ab,
16 0x7fffffff, -0x80000000, -1),
17}
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000018
Victor Stinnerbc5c54b2010-07-03 13:44:22 +000019INVALID_DATA = [
Antoine Pitrou75ff65e2012-01-28 22:01:59 +010020 (b'abc', 0),
21 (b'abc', 2),
22 (b'abc', 4),
Victor Stinnerbc5c54b2010-07-03 13:44:22 +000023]
24
Guido van Rossum4fdb7441996-12-20 03:13:06 +000025
Benjamin Peterson41181742008-07-02 20:22:54 +000026class TestAudioop(unittest.TestCase):
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000027
Benjamin Peterson41181742008-07-02 20:22:54 +000028 def test_max(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020029 for w in 1, 2, 4:
30 self.assertEqual(audioop.max(b'', w), 0)
31 p = packs[w]
32 self.assertEqual(audioop.max(p(5), w), 5)
33 self.assertEqual(audioop.max(p(5, -8, -1), w), 8)
34 self.assertEqual(audioop.max(p(maxvalues[w]), w), maxvalues[w])
35 self.assertEqual(audioop.max(p(minvalues[w]), w), -minvalues[w])
36 self.assertEqual(audioop.max(datas[w], w), -minvalues[w])
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000037
Benjamin Peterson41181742008-07-02 20:22:54 +000038 def test_minmax(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020039 for w in 1, 2, 4:
40 self.assertEqual(audioop.minmax(b'', w),
41 (0x7fffffff, -0x80000000))
42 p = packs[w]
43 self.assertEqual(audioop.minmax(p(5), w), (5, 5))
44 self.assertEqual(audioop.minmax(p(5, -8, -1), w), (-8, 5))
45 self.assertEqual(audioop.minmax(p(maxvalues[w]), w),
46 (maxvalues[w], maxvalues[w]))
47 self.assertEqual(audioop.minmax(p(minvalues[w]), w),
48 (minvalues[w], minvalues[w]))
49 self.assertEqual(audioop.minmax(datas[w], w),
50 (minvalues[w], maxvalues[w]))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000051
Benjamin Peterson41181742008-07-02 20:22:54 +000052 def test_maxpp(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020053 for w in 1, 2, 4:
54 self.assertEqual(audioop.maxpp(b'', w), 0)
55 self.assertEqual(audioop.maxpp(packs[w](*range(100)), w), 0)
56 self.assertEqual(audioop.maxpp(packs[w](9, 10, 5, 5, 0, 1), w), 10)
57 self.assertEqual(audioop.maxpp(datas[w], w),
58 maxvalues[w] - minvalues[w])
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000059
Benjamin Peterson41181742008-07-02 20:22:54 +000060 def test_avg(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020061 for w in 1, 2, 4:
62 self.assertEqual(audioop.avg(b'', w), 0)
63 p = packs[w]
64 self.assertEqual(audioop.avg(p(5), w), 5)
65 self .assertEqual(audioop.avg(p(5, 8), w), 6)
66 self.assertEqual(audioop.avg(p(5, -8), w), -2)
67 self.assertEqual(audioop.avg(p(maxvalues[w], maxvalues[w]), w),
68 maxvalues[w])
69 self.assertEqual(audioop.avg(p(minvalues[w], minvalues[w]), w),
70 minvalues[w])
71 self.assertEqual(audioop.avg(packs[4](0x50000000, 0x70000000), 4),
72 0x60000000)
73 self.assertEqual(audioop.avg(packs[4](-0x50000000, -0x70000000), 4),
74 -0x60000000)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000075
Benjamin Peterson41181742008-07-02 20:22:54 +000076 def test_avgpp(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020077 for w in 1, 2, 4:
78 self.assertEqual(audioop.avgpp(b'', w), 0)
79 self.assertEqual(audioop.avgpp(packs[w](*range(100)), w), 0)
80 self.assertEqual(audioop.avgpp(packs[w](9, 10, 5, 5, 0, 1), w), 10)
81 self.assertEqual(audioop.avgpp(datas[1], 1), 196)
82 self.assertEqual(audioop.avgpp(datas[2], 2), 50534)
83 self.assertEqual(audioop.avgpp(datas[4], 4), 3311897002)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000084
Benjamin Peterson41181742008-07-02 20:22:54 +000085 def test_rms(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020086 for w in 1, 2, 4:
87 self.assertEqual(audioop.rms(b'', w), 0)
88 p = packs[w]
89 self.assertEqual(audioop.rms(p(*range(100)), w), 57)
90 self.assertAlmostEqual(audioop.rms(p(maxvalues[w]) * 5, w),
91 maxvalues[w], delta=1)
92 self.assertAlmostEqual(audioop.rms(p(minvalues[w]) * 5, w),
93 -minvalues[w], delta=1)
94 self.assertEqual(audioop.rms(datas[1], 1), 77)
95 self.assertEqual(audioop.rms(datas[2], 2), 20001)
96 self.assertEqual(audioop.rms(datas[4], 4), 1310854152)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000097
Benjamin Peterson41181742008-07-02 20:22:54 +000098 def test_cross(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +020099 for w in 1, 2, 4:
100 self.assertEqual(audioop.cross(b'', w), -1)
101 p = packs[w]
102 self.assertEqual(audioop.cross(p(0, 1, 2), w), 0)
103 self.assertEqual(audioop.cross(p(1, 2, -3, -4), w), 1)
104 self.assertEqual(audioop.cross(p(-1, -2, 3, 4), w), 1)
105 self.assertEqual(audioop.cross(p(0, minvalues[w]), w), 1)
106 self.assertEqual(audioop.cross(p(minvalues[w], maxvalues[w]), w), 1)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000107
Benjamin Peterson41181742008-07-02 20:22:54 +0000108 def test_add(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200109 for w in 1, 2, 4:
110 self.assertEqual(audioop.add(b'', b'', w), b'')
111 self.assertEqual(audioop.add(datas[w], b'\0' * len(datas[w]), w),
112 datas[w])
113 self.assertEqual(audioop.add(datas[1], datas[1], 1),
114 b'\x00\x24\x7f\x80\x7f\x80\xfe')
115 self.assertEqual(audioop.add(datas[2], datas[2], 2),
116 packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
117 self.assertEqual(audioop.add(datas[4], datas[4], 4),
118 packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,
119 0x7fffffff, -0x80000000, -2))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000120
Benjamin Peterson41181742008-07-02 20:22:54 +0000121 def test_bias(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200122 for w in 1, 2, 4:
123 for bias in 0, 1, -1, 127, -128, 0x7fffffff, -0x80000000:
124 self.assertEqual(audioop.bias(b'', w, bias), b'')
125 self.assertEqual(audioop.bias(datas[1], 1, 1),
126 b'\x01\x13\x46\xbc\x80\x81\x00')
127 self.assertEqual(audioop.bias(datas[1], 1, -1),
128 b'\xff\x11\x44\xba\x7e\x7f\xfe')
129 self.assertEqual(audioop.bias(datas[1], 1, 0x7fffffff),
130 b'\xff\x11\x44\xba\x7e\x7f\xfe')
131 self.assertEqual(audioop.bias(datas[1], 1, -0x80000000),
132 datas[1])
133 self.assertEqual(audioop.bias(datas[2], 2, 1),
134 packs[2](1, 0x1235, 0x4568, -0x4566, -0x8000, -0x7fff, 0))
135 self.assertEqual(audioop.bias(datas[2], 2, -1),
136 packs[2](-1, 0x1233, 0x4566, -0x4568, 0x7ffe, 0x7fff, -2))
137 self.assertEqual(audioop.bias(datas[2], 2, 0x7fffffff),
138 packs[2](-1, 0x1233, 0x4566, -0x4568, 0x7ffe, 0x7fff, -2))
139 self.assertEqual(audioop.bias(datas[2], 2, -0x80000000),
140 datas[2])
141 self.assertEqual(audioop.bias(datas[4], 4, 1),
142 packs[4](1, 0x12345679, 0x456789ac, -0x456789aa,
143 -0x80000000, -0x7fffffff, 0))
144 self.assertEqual(audioop.bias(datas[4], 4, -1),
145 packs[4](-1, 0x12345677, 0x456789aa, -0x456789ac,
146 0x7ffffffe, 0x7fffffff, -2))
147 self.assertEqual(audioop.bias(datas[4], 4, 0x7fffffff),
148 packs[4](0x7fffffff, -0x6dcba989, -0x3a987656, 0x3a987654,
149 -2, -1, 0x7ffffffe))
150 self.assertEqual(audioop.bias(datas[4], 4, -0x80000000),
151 packs[4](-0x80000000, -0x6dcba988, -0x3a987655, 0x3a987655,
152 -1, 0, 0x7fffffff))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000153
Benjamin Peterson41181742008-07-02 20:22:54 +0000154 def test_lin2lin(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200155 for w in 1, 2, 4:
156 self.assertEqual(audioop.lin2lin(datas[w], w, w), datas[w])
157
158 self.assertEqual(audioop.lin2lin(datas[1], 1, 2),
159 packs[2](0, 0x1200, 0x4500, -0x4500, 0x7f00, -0x8000, -0x100))
160 self.assertEqual(audioop.lin2lin(datas[1], 1, 4),
161 packs[4](0, 0x12000000, 0x45000000, -0x45000000,
162 0x7f000000, -0x80000000, -0x1000000))
163 self.assertEqual(audioop.lin2lin(datas[2], 2, 1),
164 b'\x00\x12\x45\xba\x7f\x80\xff')
165 self.assertEqual(audioop.lin2lin(datas[2], 2, 4),
166 packs[4](0, 0x12340000, 0x45670000, -0x45670000,
167 0x7fff0000, -0x80000000, -0x10000))
168 self.assertEqual(audioop.lin2lin(datas[4], 4, 1),
169 b'\x00\x12\x45\xba\x7f\x80\xff')
170 self.assertEqual(audioop.lin2lin(datas[4], 4, 2),
171 packs[2](0, 0x1234, 0x4567, -0x4568, 0x7fff, -0x8000, -1))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000172
Benjamin Peterson41181742008-07-02 20:22:54 +0000173 def test_adpcm2lin(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200174 self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 1, None),
175 (b'\x00\x00\x00\xff\x00\xff', (-179, 40)))
176 self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 2, None),
177 (packs[2](0, 0xb, 0x29, -0x16, 0x72, -0xb3), (-179, 40)))
178 self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 4, None),
179 (packs[4](0, 0xb0000, 0x290000, -0x160000, 0x720000,
180 -0xb30000), (-179, 40)))
181
Benjamin Peterson41181742008-07-02 20:22:54 +0000182 # Very cursory test
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200183 for w in 1, 2, 4:
184 self.assertEqual(audioop.adpcm2lin(b'\0' * 5, w, None),
185 (b'\0' * w * 10, (0, 0)))
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000186
Benjamin Peterson41181742008-07-02 20:22:54 +0000187 def test_lin2adpcm(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200188 self.assertEqual(audioop.lin2adpcm(datas[1], 1, None),
189 (b'\x07\x7f\x7f', (-221, 39)))
190 self.assertEqual(audioop.lin2adpcm(datas[2], 2, None),
191 (b'\x07\x7f\x7f', (31, 39)))
192 self.assertEqual(audioop.lin2adpcm(datas[4], 4, None),
193 (b'\x07\x7f\x7f', (31, 39)))
194
Benjamin Peterson41181742008-07-02 20:22:54 +0000195 # Very cursory test
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200196 for w in 1, 2, 4:
197 self.assertEqual(audioop.lin2adpcm(b'\0' * w * 10, w, None),
198 (b'\0' * 5, (0, 0)))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000199
Benjamin Peterson41181742008-07-02 20:22:54 +0000200 def test_lin2alaw(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200201 self.assertEqual(audioop.lin2alaw(datas[1], 1),
202 b'\xd5\x87\xa4\x24\xaa\x2a\x5a')
203 self.assertEqual(audioop.lin2alaw(datas[2], 2),
204 b'\xd5\x87\xa4\x24\xaa\x2a\x55')
205 self.assertEqual(audioop.lin2alaw(datas[4], 4),
206 b'\xd5\x87\xa4\x24\xaa\x2a\x55')
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000207
Benjamin Peterson41181742008-07-02 20:22:54 +0000208 def test_alaw2lin(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200209 encoded = b'\x00\x03\x24\x2a\x51\x54\x55\x58\x6b\x71\x7f'\
210 b'\x80\x83\xa4\xaa\xd1\xd4\xd5\xd8\xeb\xf1\xff'
211 src = [-688, -720, -2240, -4032, -9, -3, -1, -27, -244, -82, -106,
212 688, 720, 2240, 4032, 9, 3, 1, 27, 244, 82, 106]
213 for w in 1, 2, 4:
214 self.assertEqual(audioop.alaw2lin(encoded, w),
215 packs[w](*(x << (w * 8) >> 13 for x in src)))
216
217 encoded = bytes(range(256))
218 for w in 2, 4:
219 decoded = audioop.alaw2lin(encoded, w)
220 self.assertEqual(audioop.lin2alaw(decoded, w), encoded)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000221
Benjamin Peterson41181742008-07-02 20:22:54 +0000222 def test_lin2ulaw(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200223 self.assertEqual(audioop.lin2ulaw(datas[1], 1),
224 b'\xff\xad\x8e\x0e\x80\x00\x67')
225 self.assertEqual(audioop.lin2ulaw(datas[2], 2),
226 b'\xff\xad\x8e\x0e\x80\x00\x7e')
227 self.assertEqual(audioop.lin2ulaw(datas[4], 4),
228 b'\xff\xad\x8e\x0e\x80\x00\x7e')
Guido van Rossumc8504e21997-02-14 15:58:00 +0000229
Benjamin Peterson41181742008-07-02 20:22:54 +0000230 def test_ulaw2lin(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200231 encoded = b'\x00\x0e\x28\x3f\x57\x6a\x76\x7c\x7e\x7f'\
232 b'\x80\x8e\xa8\xbf\xd7\xea\xf6\xfc\xfe\xff'
233 src = [-8031, -4447, -1471, -495, -163, -53, -18, -6, -2, 0,
234 8031, 4447, 1471, 495, 163, 53, 18, 6, 2, 0]
235 for w in 1, 2, 4:
236 self.assertEqual(audioop.ulaw2lin(encoded, w),
237 packs[w](*(x << (w * 8) >> 14 for x in src)))
238
239 # Current u-law implementation has two codes fo 0: 0x7f and 0xff.
240 encoded = bytes(range(127)) + bytes(range(128, 256))
241 for w in 2, 4:
242 decoded = audioop.ulaw2lin(encoded, w)
243 self.assertEqual(audioop.lin2ulaw(decoded, w), encoded)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000244
Benjamin Peterson41181742008-07-02 20:22:54 +0000245 def test_mul(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200246 for w in 1, 2, 4:
247 self.assertEqual(audioop.mul(b'', w, 2), b'')
248 self.assertEqual(audioop.mul(datas[w], w, 0),
249 b'\0' * len(datas[w]))
250 self.assertEqual(audioop.mul(datas[w], w, 1),
251 datas[w])
252 self.assertEqual(audioop.mul(datas[1], 1, 2),
253 b'\x00\x24\x7f\x80\x7f\x80\xfe')
254 self.assertEqual(audioop.mul(datas[2], 2, 2),
255 packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
256 self.assertEqual(audioop.mul(datas[4], 4, 2),
257 packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,
258 0x7fffffff, -0x80000000, -2))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000259
Benjamin Peterson41181742008-07-02 20:22:54 +0000260 def test_ratecv(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200261 for w in 1, 2, 4:
262 self.assertEqual(audioop.ratecv(b'', w, 1, 8000, 8000, None),
263 (b'', (-1, ((0, 0),))))
264 self.assertEqual(audioop.ratecv(b'', w, 5, 8000, 8000, None),
265 (b'', (-1, ((0, 0),) * 5)))
266 self.assertEqual(audioop.ratecv(b'', w, 1, 8000, 16000, None),
267 (b'', (-2, ((0, 0),))))
268 self.assertEqual(audioop.ratecv(datas[w], w, 1, 8000, 8000, None)[0],
269 datas[w])
Benjamin Peterson41181742008-07-02 20:22:54 +0000270 state = None
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200271 d1, state = audioop.ratecv(b'\x00\x01\x02', 1, 1, 8000, 16000, state)
272 d2, state = audioop.ratecv(b'\x00\x01\x02', 1, 1, 8000, 16000, state)
Benjamin Peterson41181742008-07-02 20:22:54 +0000273 self.assertEqual(d1 + d2, b'\000\000\001\001\002\001\000\000\001\001\002')
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000274
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200275 for w in 1, 2, 4:
276 d0, state0 = audioop.ratecv(datas[w], w, 1, 8000, 16000, None)
277 d, state = b'', None
278 for i in range(0, len(datas[w]), w):
279 d1, state = audioop.ratecv(datas[w][i:i + w], w, 1,
280 8000, 16000, state)
281 d += d1
282 self.assertEqual(d, d0)
283 self.assertEqual(state, state0)
284
Benjamin Peterson41181742008-07-02 20:22:54 +0000285 def test_reverse(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200286 for w in 1, 2, 4:
287 self.assertEqual(audioop.reverse(b'', w), b'')
288 self.assertEqual(audioop.reverse(packs[w](0, 1, 2), w),
289 packs[w](2, 1, 0))
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000290
Benjamin Peterson41181742008-07-02 20:22:54 +0000291 def test_tomono(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200292 for w in 1, 2, 4:
293 data1 = datas[w]
294 data2 = bytearray(2 * len(data1))
295 for k in range(w):
296 data2[k::2*w] = data1[k::w]
297 self.assertEqual(audioop.tomono(data2, w, 1, 0), data1)
298 self.assertEqual(audioop.tomono(data2, w, 0, 1), b'\0' * len(data1))
299 for k in range(w):
300 data2[k+w::2*w] = data1[k::w]
301 self.assertEqual(audioop.tomono(data2, w, 0.5, 0.5), data1)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000302
Benjamin Peterson41181742008-07-02 20:22:54 +0000303 def test_tostereo(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200304 for w in 1, 2, 4:
305 data1 = datas[w]
306 data2 = bytearray(2 * len(data1))
307 for k in range(w):
308 data2[k::2*w] = data1[k::w]
309 self.assertEqual(audioop.tostereo(data1, w, 1, 0), data2)
310 self.assertEqual(audioop.tostereo(data1, w, 0, 0), b'\0' * len(data2))
311 for k in range(w):
312 data2[k+w::2*w] = data1[k::w]
313 self.assertEqual(audioop.tostereo(data1, w, 1, 1), data2)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000314
Benjamin Peterson41181742008-07-02 20:22:54 +0000315 def test_findfactor(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200316 self.assertEqual(audioop.findfactor(datas[2], datas[2]), 1.0)
317 self.assertEqual(audioop.findfactor(b'\0' * len(datas[2]), datas[2]),
318 0.0)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000319
Benjamin Peterson41181742008-07-02 20:22:54 +0000320 def test_findfit(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200321 self.assertEqual(audioop.findfit(datas[2], datas[2]), (0, 1.0))
322 self.assertEqual(audioop.findfit(datas[2], packs[2](1, 2, 0)),
323 (1, 8038.8))
324 self.assertEqual(audioop.findfit(datas[2][:-2] * 5 + datas[2], datas[2]),
325 (30, 1.0))
Benjamin Peterson41181742008-07-02 20:22:54 +0000326
327 def test_findmax(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200328 self.assertEqual(audioop.findmax(datas[2], 1), 5)
Benjamin Peterson41181742008-07-02 20:22:54 +0000329
330 def test_getsample(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200331 for w in 1, 2, 4:
332 data = packs[w](0, 1, -1, maxvalues[w], minvalues[w])
333 self.assertEqual(audioop.getsample(data, w, 0), 0)
334 self.assertEqual(audioop.getsample(data, w, 1), 1)
335 self.assertEqual(audioop.getsample(data, w, 2), -1)
336 self.assertEqual(audioop.getsample(data, w, 3), maxvalues[w])
337 self.assertEqual(audioop.getsample(data, w, 4), minvalues[w])
Benjamin Peterson41181742008-07-02 20:22:54 +0000338
Georg Brandl3dbca812008-07-23 16:10:53 +0000339 def test_negativelen(self):
Georg Brandl86b2fb92008-07-16 03:43:04 +0000340 # from issue 3306, previously it segfaulted
341 self.assertRaises(audioop.error,
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200342 audioop.findmax, bytes(range(256)), -2392392)
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000343
Victor Stinnerbc5c54b2010-07-03 13:44:22 +0000344 def test_issue7673(self):
345 state = None
346 for data, size in INVALID_DATA:
347 size2 = size
348 self.assertRaises(audioop.error, audioop.getsample, data, size, 0)
349 self.assertRaises(audioop.error, audioop.max, data, size)
350 self.assertRaises(audioop.error, audioop.minmax, data, size)
351 self.assertRaises(audioop.error, audioop.avg, data, size)
352 self.assertRaises(audioop.error, audioop.rms, data, size)
353 self.assertRaises(audioop.error, audioop.avgpp, data, size)
354 self.assertRaises(audioop.error, audioop.maxpp, data, size)
355 self.assertRaises(audioop.error, audioop.cross, data, size)
356 self.assertRaises(audioop.error, audioop.mul, data, size, 1.0)
357 self.assertRaises(audioop.error, audioop.tomono, data, size, 0.5, 0.5)
358 self.assertRaises(audioop.error, audioop.tostereo, data, size, 0.5, 0.5)
359 self.assertRaises(audioop.error, audioop.add, data, data, size)
360 self.assertRaises(audioop.error, audioop.bias, data, size, 0)
361 self.assertRaises(audioop.error, audioop.reverse, data, size)
362 self.assertRaises(audioop.error, audioop.lin2lin, data, size, size2)
363 self.assertRaises(audioop.error, audioop.ratecv, data, size, 1, 1, 1, state)
364 self.assertRaises(audioop.error, audioop.lin2ulaw, data, size)
Victor Stinnerbc5c54b2010-07-03 13:44:22 +0000365 self.assertRaises(audioop.error, audioop.lin2alaw, data, size)
Victor Stinnerbc5c54b2010-07-03 13:44:22 +0000366 self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state)
Antoine Pitrou75ff65e2012-01-28 22:01:59 +0100367
368 def test_wrongsize(self):
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200369 data = b'abcdefgh'
Antoine Pitrou75ff65e2012-01-28 22:01:59 +0100370 state = None
Serhiy Storchaka01ad6222013-02-09 11:10:53 +0200371 for size in (-1, 0, 3, 5, 1024):
Antoine Pitrou75ff65e2012-01-28 22:01:59 +0100372 self.assertRaises(audioop.error, audioop.ulaw2lin, data, size)
373 self.assertRaises(audioop.error, audioop.alaw2lin, data, size)
Victor Stinnerbc5c54b2010-07-03 13:44:22 +0000374 self.assertRaises(audioop.error, audioop.adpcm2lin, data, size, state)
375
Christian Heimes180510d2008-03-03 19:15:45 +0000376if __name__ == '__main__':
Serhiy Storchaka6e9e4fe2013-10-20 17:24:42 +0300377 unittest.main()