blob: ae796ba57421cefe75840a115a030e8c4e7ccf8c [file] [log] [blame]
Guido van Rossumfa7fcb91994-01-12 09:55:11 +00001# Test audioop.
2import audioop
Benjamin Petersonee8712c2008-05-20 21:35:26 +00003from test.support import verbose
Guido van Rossumfa7fcb91994-01-12 09:55:11 +00004
5def gendata1():
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +00006 return b'\0\1\2'
Guido van Rossumfa7fcb91994-01-12 09:55:11 +00007
8def gendata2():
Roger E. Masse7a61f871997-01-03 19:20:17 +00009 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000010 print('getsample')
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +000011 if audioop.getsample(b'\0\1', 2, 0) == 1:
12 return b'\0\0\0\1\0\2'
Roger E. Masse7a61f871997-01-03 19:20:17 +000013 else:
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +000014 return b'\0\0\1\0\2\0'
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000015
16def gendata4():
Roger E. Masse7a61f871997-01-03 19:20:17 +000017 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000018 print('getsample')
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +000019 if audioop.getsample(b'\0\0\0\1', 4, 0) == 1:
20 return b'\0\0\0\0\0\0\0\1\0\0\0\2'
Roger E. Masse7a61f871997-01-03 19:20:17 +000021 else:
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +000022 return b'\0\0\0\0\1\0\0\0\2\0\0\0'
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000023
24def testmax(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000025 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000026 print('max')
Fred Drake132dce22000-12-12 23:11:42 +000027 if audioop.max(data[0], 1) != 2 or \
28 audioop.max(data[1], 2) != 2 or \
29 audioop.max(data[2], 4) != 2:
Guido van Rossum41360a41998-03-26 19:42:58 +000030 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000031 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000032
Guido van Rossum4fdb7441996-12-20 03:13:06 +000033def testminmax(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000034 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000035 print('minmax')
Fred Drake132dce22000-12-12 23:11:42 +000036 if audioop.minmax(data[0], 1) != (0, 2) or \
37 audioop.minmax(data[1], 2) != (0, 2) or \
38 audioop.minmax(data[2], 4) != (0, 2):
Guido van Rossum41360a41998-03-26 19:42:58 +000039 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000040 return 1
Guido van Rossum4fdb7441996-12-20 03:13:06 +000041
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000042def testmaxpp(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000043 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000044 print('maxpp')
Fred Drake132dce22000-12-12 23:11:42 +000045 if audioop.maxpp(data[0], 1) != 0 or \
46 audioop.maxpp(data[1], 2) != 0 or \
47 audioop.maxpp(data[2], 4) != 0:
Guido van Rossum41360a41998-03-26 19:42:58 +000048 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000049 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000050
51def testavg(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000052 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000053 print('avg')
Fred Drake132dce22000-12-12 23:11:42 +000054 if audioop.avg(data[0], 1) != 1 or \
55 audioop.avg(data[1], 2) != 1 or \
56 audioop.avg(data[2], 4) != 1:
Guido van Rossum41360a41998-03-26 19:42:58 +000057 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000058 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000059
60def testavgpp(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000061 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000062 print('avgpp')
Fred Drake132dce22000-12-12 23:11:42 +000063 if audioop.avgpp(data[0], 1) != 0 or \
64 audioop.avgpp(data[1], 2) != 0 or \
65 audioop.avgpp(data[2], 4) != 0:
Guido van Rossum41360a41998-03-26 19:42:58 +000066 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000067 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000068
69def testrms(data):
Fred Drake132dce22000-12-12 23:11:42 +000070 if audioop.rms(data[0], 1) != 1 or \
71 audioop.rms(data[1], 2) != 1 or \
72 audioop.rms(data[2], 4) != 1:
Guido van Rossum41360a41998-03-26 19:42:58 +000073 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000074 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000075
76def testcross(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000077 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000078 print('cross')
Fred Drake132dce22000-12-12 23:11:42 +000079 if audioop.cross(data[0], 1) != 0 or \
80 audioop.cross(data[1], 2) != 0 or \
81 audioop.cross(data[2], 4) != 0:
Guido van Rossum41360a41998-03-26 19:42:58 +000082 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000083 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000084
85def testadd(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +000086 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +000087 print('add')
Roger E. Masse7a61f871997-01-03 19:20:17 +000088 data2 = []
89 for d in data:
Guido van Rossum254348e2007-11-21 19:29:53 +000090 str = bytearray(len(d))
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +000091 for i,b in enumerate(d):
92 str[i] = 2*b
Guido van Rossum41360a41998-03-26 19:42:58 +000093 data2.append(str)
Fred Drake132dce22000-12-12 23:11:42 +000094 if audioop.add(data[0], data[0], 1) != data2[0] or \
95 audioop.add(data[1], data[1], 2) != data2[1] or \
96 audioop.add(data[2], data[2], 4) != data2[2]:
Guido van Rossum41360a41998-03-26 19:42:58 +000097 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +000098 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +000099
100def testbias(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000101 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000102 print('bias')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000103 # Note: this test assumes that avg() works
104 d1 = audioop.bias(data[0], 1, 100)
105 d2 = audioop.bias(data[1], 2, 100)
106 d4 = audioop.bias(data[2], 4, 100)
Fred Drake132dce22000-12-12 23:11:42 +0000107 if audioop.avg(d1, 1) != 101 or \
108 audioop.avg(d2, 2) != 101 or \
109 audioop.avg(d4, 4) != 101:
Guido van Rossum41360a41998-03-26 19:42:58 +0000110 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000111 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000112
113def testlin2lin(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000114 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000115 print('lin2lin')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000116 # too simple: we test only the size
117 for d1 in data:
Guido van Rossum41360a41998-03-26 19:42:58 +0000118 for d2 in data:
Guido van Rossum54e54c62001-09-04 19:14:14 +0000119 got = len(d1)//3
120 wtd = len(d2)//3
Fred Drake132dce22000-12-12 23:11:42 +0000121 if len(audioop.lin2lin(d1, got, wtd)) != len(d2):
Guido van Rossum41360a41998-03-26 19:42:58 +0000122 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000123 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000124
125def testadpcm2lin(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000126 # Very cursory test
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000127 if audioop.adpcm2lin(b'\0\0', 1, None) != (b'\0\0\0\0', (0,0)):
Guido van Rossum41360a41998-03-26 19:42:58 +0000128 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000129 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000130
131def testlin2adpcm(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000132 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000133 print('lin2adpcm')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000134 # Very cursory test
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000135 if audioop.lin2adpcm(b'\0\0\0\0', 1, None) != (b'\0\0', (0,0)):
Guido van Rossum41360a41998-03-26 19:42:58 +0000136 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000137 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000138
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000139def testlin2alaw(data):
140 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000141 print('lin2alaw')
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000142 if audioop.lin2alaw(data[0], 1) != b'\xd5\xc5\xf5' or \
143 audioop.lin2alaw(data[1], 2) != b'\xd5\xd5\xd5' or \
144 audioop.lin2alaw(data[2], 4) != b'\xd5\xd5\xd5':
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000145 return 0
146 return 1
147
148def testalaw2lin(data):
149 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000150 print('alaw2lin')
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000151 # Cursory
152 d = audioop.lin2alaw(data[0], 1)
153 if audioop.alaw2lin(d, 1) != data[0]:
154 return 0
155 return 1
156
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000157def testlin2ulaw(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000158 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000159 print('lin2ulaw')
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000160 if audioop.lin2ulaw(data[0], 1) != b'\xff\xe7\xdb' or \
161 audioop.lin2ulaw(data[1], 2) != b'\xff\xff\xff' or \
162 audioop.lin2ulaw(data[2], 4) != b'\xff\xff\xff':
Guido van Rossum41360a41998-03-26 19:42:58 +0000163 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000164 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000165
166def testulaw2lin(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000167 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000168 print('ulaw2lin')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000169 # Cursory
170 d = audioop.lin2ulaw(data[0], 1)
Fred Drake132dce22000-12-12 23:11:42 +0000171 if audioop.ulaw2lin(d, 1) != data[0]:
Guido van Rossum41360a41998-03-26 19:42:58 +0000172 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000173 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000174
175def testmul(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000176 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000177 print('mul')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000178 data2 = []
179 for d in data:
Guido van Rossum254348e2007-11-21 19:29:53 +0000180 str = bytearray(len(d))
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000181 for i,b in enumerate(d):
182 str[i] = 2*b
Guido van Rossum41360a41998-03-26 19:42:58 +0000183 data2.append(str)
Fred Drake132dce22000-12-12 23:11:42 +0000184 if audioop.mul(data[0], 1, 2) != data2[0] or \
185 audioop.mul(data[1],2, 2) != data2[1] or \
186 audioop.mul(data[2], 4, 2) != data2[2]:
Guido van Rossum41360a41998-03-26 19:42:58 +0000187 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000188 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000189
Guido van Rossumc8504e21997-02-14 15:58:00 +0000190def testratecv(data):
191 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000192 print('ratecv')
Guido van Rossum05ba2ab1997-05-21 14:27:20 +0000193 state = None
194 d1, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
195 d2, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000196 if d1 + d2 != b'\000\000\001\001\002\001\000\000\001\001\002':
Guido van Rossum05ba2ab1997-05-21 14:27:20 +0000197 return 0
Guido van Rossumc8504e21997-02-14 15:58:00 +0000198 return 1
199
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000200def testreverse(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000201 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000202 print('reverse')
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000203 if audioop.reverse(data[0], 1) != b'\2\1\0':
Guido van Rossum41360a41998-03-26 19:42:58 +0000204 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000205 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000206
207def testtomono(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000208 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000209 print('tomono')
Guido van Rossum254348e2007-11-21 19:29:53 +0000210 data2 = bytearray()
Roger E. Masse7a61f871997-01-03 19:20:17 +0000211 for d in data[0]:
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000212 data2.append(d)
213 data2.append(d)
Fred Drake132dce22000-12-12 23:11:42 +0000214 if audioop.tomono(data2, 1, 0.5, 0.5) != data[0]:
Guido van Rossum41360a41998-03-26 19:42:58 +0000215 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000216 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000217
218def testtostereo(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000219 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000220 print('tostereo')
Guido van Rossum254348e2007-11-21 19:29:53 +0000221 data2 = bytearray()
Roger E. Masse7a61f871997-01-03 19:20:17 +0000222 for d in data[0]:
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000223 data2.append(d)
224 data2.append(d)
Fred Drake132dce22000-12-12 23:11:42 +0000225 if audioop.tostereo(data[0], 1, 1, 1) != data2:
Guido van Rossum41360a41998-03-26 19:42:58 +0000226 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000227 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000228
229def testfindfactor(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000230 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000231 print('findfactor')
Fred Drake132dce22000-12-12 23:11:42 +0000232 if audioop.findfactor(data[1], data[1]) != 1.0:
Guido van Rossum41360a41998-03-26 19:42:58 +0000233 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000234 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000235
236def testfindfit(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000237 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000238 print('findfit')
Fred Drake132dce22000-12-12 23:11:42 +0000239 if audioop.findfit(data[1], data[1]) != (0, 1.0):
Guido van Rossum41360a41998-03-26 19:42:58 +0000240 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000241 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000242
243def testfindmax(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000244 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000245 print('findmax')
Fred Drake132dce22000-12-12 23:11:42 +0000246 if audioop.findmax(data[1], 1) != 2:
Guido van Rossum41360a41998-03-26 19:42:58 +0000247 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000248 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000249
250def testgetsample(data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000251 if verbose:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000252 print('getsample')
Roger E. Masse7a61f871997-01-03 19:20:17 +0000253 for i in range(3):
Fred Drake132dce22000-12-12 23:11:42 +0000254 if audioop.getsample(data[0], 1, i) != i or \
255 audioop.getsample(data[1], 2, i) != i or \
256 audioop.getsample(data[2], 4, i) != i:
Guido van Rossum41360a41998-03-26 19:42:58 +0000257 return 0
Roger E. Masse7a61f871997-01-03 19:20:17 +0000258 return 1
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000259
260def testone(name, data):
Roger E. Masse7a61f871997-01-03 19:20:17 +0000261 try:
Guido van Rossum41360a41998-03-26 19:42:58 +0000262 func = eval('test'+name)
Roger E. Masse7a61f871997-01-03 19:20:17 +0000263 except NameError:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000264 print('No test found for audioop.'+name+'()')
Guido van Rossum41360a41998-03-26 19:42:58 +0000265 return
Roger E. Masse7a61f871997-01-03 19:20:17 +0000266 try:
Guido van Rossum41360a41998-03-26 19:42:58 +0000267 rv = func(data)
Martin v. Löwis3a2e5ce2007-07-20 07:36:26 +0000268 except Exception as e:
269 print('Test FAILED for audioop.'+name+'() (with %s)' % repr(e))
Guido van Rossum41360a41998-03-26 19:42:58 +0000270 return
Roger E. Masse7a61f871997-01-03 19:20:17 +0000271 if not rv:
Guido van Rossumbe19ed72007-02-09 05:37:30 +0000272 print('Test FAILED for audioop.'+name+'()')
Guido van Rossumfa7fcb91994-01-12 09:55:11 +0000273
Christian Heimes180510d2008-03-03 19:15:45 +0000274def test_main():
Roger E. Masse7a61f871997-01-03 19:20:17 +0000275 data = [gendata1(), gendata2(), gendata4()]
276 names = dir(audioop)
277 # We know there is a routine 'add'
278 routines = []
279 for n in names:
Guido van Rossum41360a41998-03-26 19:42:58 +0000280 if type(eval('audioop.'+n)) == type(audioop.add):
281 routines.append(n)
Roger E. Masse7a61f871997-01-03 19:20:17 +0000282 for n in routines:
Guido van Rossum41360a41998-03-26 19:42:58 +0000283 testone(n, data)
Christian Heimes180510d2008-03-03 19:15:45 +0000284
285
286
287if __name__ == '__main__':
288 test_main()