3 from test.test_support import run_unittest
5 endian = 'big' if audioop.getsample('\0\1', 2, 0) == 1 else 'little'
18 return '\0\0\0\0\0\0\0\1\0\0\0\2'
20 return '\0\0\0\0\1\0\0\0\2\0\0\0'
22 data = [gendata1(), gendata2(), gendata4()]
31 class TestAudioop(unittest.TestCase):
34 self.assertEqual(audioop.max(data[0], 1), 2)
35 self.assertEqual(audioop.max(data[1], 2), 2)
36 self.assertEqual(audioop.max(data[2], 4), 2)
38 def test_minmax(self):
39 self.assertEqual(audioop.minmax(data[0], 1), (0, 2))
40 self.assertEqual(audioop.minmax(data[1], 2), (0, 2))
41 self.assertEqual(audioop.minmax(data[2], 4), (0, 2))
44 self.assertEqual(audioop.maxpp(data[0], 1), 0)
45 self.assertEqual(audioop.maxpp(data[1], 2), 0)
46 self.assertEqual(audioop.maxpp(data[2], 4), 0)
49 self.assertEqual(audioop.avg(data[0], 1), 1)
50 self.assertEqual(audioop.avg(data[1], 2), 1)
51 self.assertEqual(audioop.avg(data[2], 4), 1)
54 self.assertEqual(audioop.avgpp(data[0], 1), 0)
55 self.assertEqual(audioop.avgpp(data[1], 2), 0)
56 self.assertEqual(audioop.avgpp(data[2], 4), 0)
59 self.assertEqual(audioop.rms(data[0], 1), 1)
60 self.assertEqual(audioop.rms(data[1], 2), 1)
61 self.assertEqual(audioop.rms(data[2], 4), 1)
64 self.assertEqual(audioop.cross(data[0], 1), 0)
65 self.assertEqual(audioop.cross(data[1], 2), 0)
66 self.assertEqual(audioop.cross(data[2], 4), 0)
73 str = str + chr(ord(s)*2)
75 self.assertEqual(audioop.add(data[0], data[0], 1), data2[0])
76 self.assertEqual(audioop.add(data[1], data[1], 2), data2[1])
77 self.assertEqual(audioop.add(data[2], data[2], 4), data2[2])
80 # Note: this test assumes that avg() works
81 d1 = audioop.bias(data[0], 1, 100)
82 d2 = audioop.bias(data[1], 2, 100)
83 d4 = audioop.bias(data[2], 4, 100)
84 self.assertEqual(audioop.avg(d1, 1), 101)
85 self.assertEqual(audioop.avg(d2, 2), 101)
86 self.assertEqual(audioop.avg(d4, 4), 101)
88 def test_lin2lin(self):
89 # too simple: we test only the size
94 self.assertEqual(len(audioop.lin2lin(d1, got, wtd)), len(d2))
96 def test_adpcm2lin(self):
98 self.assertEqual(audioop.adpcm2lin(b'\0\0', 1, None), (b'\0' * 4, (0,0)))
99 self.assertEqual(audioop.adpcm2lin(b'\0\0', 2, None), (b'\0' * 8, (0,0)))
100 self.assertEqual(audioop.adpcm2lin(b'\0\0', 4, None), (b'\0' * 16, (0,0)))
102 def test_lin2adpcm(self):
104 self.assertEqual(audioop.lin2adpcm('\0\0\0\0', 1, None), ('\0\0', (0,0)))
106 def test_lin2alaw(self):
107 self.assertEqual(audioop.lin2alaw(data[0], 1), '\xd5\xc5\xf5')
108 self.assertEqual(audioop.lin2alaw(data[1], 2), '\xd5\xd5\xd5')
109 self.assertEqual(audioop.lin2alaw(data[2], 4), '\xd5\xd5\xd5')
111 def test_alaw2lin(self):
113 d = audioop.lin2alaw(data[0], 1)
114 self.assertEqual(audioop.alaw2lin(d, 1), data[0])
116 self.assertEqual(audioop.alaw2lin(d, 2),
117 b'\x00\x08\x01\x08\x02\x10')
118 self.assertEqual(audioop.alaw2lin(d, 4),
119 b'\x00\x08\x00\x00\x01\x08\x00\x00\x02\x10\x00\x00')
121 self.assertEqual(audioop.alaw2lin(d, 2),
122 b'\x08\x00\x08\x01\x10\x02')
123 self.assertEqual(audioop.alaw2lin(d, 4),
124 b'\x00\x00\x08\x00\x00\x00\x08\x01\x00\x00\x10\x02')
126 def test_lin2ulaw(self):
127 self.assertEqual(audioop.lin2ulaw(data[0], 1), '\xff\xe7\xdb')
128 self.assertEqual(audioop.lin2ulaw(data[1], 2), '\xff\xff\xff')
129 self.assertEqual(audioop.lin2ulaw(data[2], 4), '\xff\xff\xff')
131 def test_ulaw2lin(self):
133 d = audioop.lin2ulaw(data[0], 1)
134 self.assertEqual(audioop.ulaw2lin(d, 1), data[0])
136 self.assertEqual(audioop.ulaw2lin(d, 2),
137 b'\x00\x00\x01\x04\x02\x0c')
138 self.assertEqual(audioop.ulaw2lin(d, 4),
139 b'\x00\x00\x00\x00\x01\x04\x00\x00\x02\x0c\x00\x00')
141 self.assertEqual(audioop.ulaw2lin(d, 2),
142 b'\x00\x00\x04\x01\x0c\x02')
143 self.assertEqual(audioop.ulaw2lin(d, 4),
144 b'\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x0c\x02')
151 str = str + chr(ord(s)*2)
153 self.assertEqual(audioop.mul(data[0], 1, 2), data2[0])
154 self.assertEqual(audioop.mul(data[1],2, 2), data2[1])
155 self.assertEqual(audioop.mul(data[2], 4, 2), data2[2])
157 def test_ratecv(self):
159 d1, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
160 d2, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
161 self.assertEqual(d1 + d2, '\000\000\001\001\002\001\000\000\001\001\002')
163 def test_reverse(self):
164 self.assertEqual(audioop.reverse(data[0], 1), '\2\1\0')
166 def test_tomono(self):
169 data2 = data2 + d + d
170 self.assertEqual(audioop.tomono(data2, 1, 0.5, 0.5), data[0])
172 def test_tostereo(self):
175 data2 = data2 + d + d
176 self.assertEqual(audioop.tostereo(data[0], 1, 1, 1), data2)
178 def test_findfactor(self):
179 self.assertEqual(audioop.findfactor(data[1], data[1]), 1.0)
181 def test_findfit(self):
182 self.assertEqual(audioop.findfit(data[1], data[1]), (0, 1.0))
184 def test_findmax(self):
185 self.assertEqual(audioop.findmax(data[1], 1), 2)
187 def test_getsample(self):
189 self.assertEqual(audioop.getsample(data[0], 1, i), i)
190 self.assertEqual(audioop.getsample(data[1], 2, i), i)
191 self.assertEqual(audioop.getsample(data[2], 4, i), i)
193 def test_negativelen(self):
194 # from issue 3306, previously it segfaulted
195 self.assertRaises(audioop.error,
196 audioop.findmax, ''.join( chr(x) for x in xrange(256)), -2392392)
198 def test_issue7673(self):
200 for data, size in INVALID_DATA:
202 self.assertRaises(audioop.error, audioop.getsample, data, size, 0)
203 self.assertRaises(audioop.error, audioop.max, data, size)
204 self.assertRaises(audioop.error, audioop.minmax, data, size)
205 self.assertRaises(audioop.error, audioop.avg, data, size)
206 self.assertRaises(audioop.error, audioop.rms, data, size)
207 self.assertRaises(audioop.error, audioop.avgpp, data, size)
208 self.assertRaises(audioop.error, audioop.maxpp, data, size)
209 self.assertRaises(audioop.error, audioop.cross, data, size)
210 self.assertRaises(audioop.error, audioop.mul, data, size, 1.0)
211 self.assertRaises(audioop.error, audioop.tomono, data, size, 0.5, 0.5)
212 self.assertRaises(audioop.error, audioop.tostereo, data, size, 0.5, 0.5)
213 self.assertRaises(audioop.error, audioop.add, data, data, size)
214 self.assertRaises(audioop.error, audioop.bias, data, size, 0)
215 self.assertRaises(audioop.error, audioop.reverse, data, size)
216 self.assertRaises(audioop.error, audioop.lin2lin, data, size, size2)
217 self.assertRaises(audioop.error, audioop.ratecv, data, size, 1, 1, 1, state)
218 self.assertRaises(audioop.error, audioop.lin2ulaw, data, size)
219 self.assertRaises(audioop.error, audioop.lin2alaw, data, size)
220 self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state)
222 def test_wrongsize(self):
225 for size in (-1, 3, 5):
226 self.assertRaises(audioop.error, audioop.ulaw2lin, data, size)
227 self.assertRaises(audioop.error, audioop.alaw2lin, data, size)
228 self.assertRaises(audioop.error, audioop.adpcm2lin, data, size, state)
231 run_unittest(TestAudioop)
233 if __name__ == '__main__':