# Test audioop. import audioop from test.test_support import verbose def gendata1(): return '\0\1\2' def gendata2(): if verbose: print 'getsample' if audioop.getsample('\0\1', 2, 0) == 1: return '\0\0\0\1\0\2' else: return '\0\0\1\0\2\0' def gendata4(): if verbose: print 'getsample' if audioop.getsample('\0\0\0\1', 4, 0) == 1: return '\0\0\0\0\0\0\0\1\0\0\0\2' else: return '\0\0\0\0\1\0\0\0\2\0\0\0' def testmax(data): if verbose: print 'max' if audioop.max(data[0], 1) != 2 or \ audioop.max(data[1], 2) != 2 or \ audioop.max(data[2], 4) != 2: return 0 return 1 def testminmax(data): if verbose: print 'minmax' if audioop.minmax(data[0], 1) != (0, 2) or \ audioop.minmax(data[1], 2) != (0, 2) or \ audioop.minmax(data[2], 4) != (0, 2): return 0 return 1 def testmaxpp(data): if verbose: print 'maxpp' if audioop.maxpp(data[0], 1) != 0 or \ audioop.maxpp(data[1], 2) != 0 or \ audioop.maxpp(data[2], 4) != 0: return 0 return 1 def testavg(data): if verbose: print 'avg' if audioop.avg(data[0], 1) != 1 or \ audioop.avg(data[1], 2) != 1 or \ audioop.avg(data[2], 4) != 1: return 0 return 1 def testavgpp(data): if verbose: print 'avgpp' if audioop.avgpp(data[0], 1) != 0 or \ audioop.avgpp(data[1], 2) != 0 or \ audioop.avgpp(data[2], 4) != 0: return 0 return 1 def testrms(data): if audioop.rms(data[0], 1) != 1 or \ audioop.rms(data[1], 2) != 1 or \ audioop.rms(data[2], 4) != 1: return 0 return 1 def testcross(data): if verbose: print 'cross' if audioop.cross(data[0], 1) != 0 or \ audioop.cross(data[1], 2) != 0 or \ audioop.cross(data[2], 4) != 0: return 0 return 1 def testadd(data): if verbose: print 'add' data2 = [] for d in data: str = '' for s in d: str = str + chr(ord(s)*2) data2.append(str) if audioop.add(data[0], data[0], 1) != data2[0] or \ audioop.add(data[1], data[1], 2) != data2[1] or \ audioop.add(data[2], data[2], 4) != data2[2]: return 0 return 1 def testbias(data): if verbose: print 'bias' # Note: this test assumes that avg() works d1 = audioop.bias(data[0], 1, 100) d2 = audioop.bias(data[1], 2, 100) d4 = audioop.bias(data[2], 4, 100) if audioop.avg(d1, 1) != 101 or \ audioop.avg(d2, 2) != 101 or \ audioop.avg(d4, 4) != 101: return 0 return 1 def testlin2lin(data): if verbose: print 'lin2lin' # too simple: we test only the size for d1 in data: for d2 in data: got = len(d1)//3 wtd = len(d2)//3 if len(audioop.lin2lin(d1, got, wtd)) != len(d2): return 0 return 1 def testadpcm2lin(data): # Very cursory test if audioop.adpcm2lin('\0\0', 1, None) != ('\0\0\0\0', (0,0)): return 0 return 1 def testlin2adpcm(data): if verbose: print 'lin2adpcm' # Very cursory test if audioop.lin2adpcm('\0\0\0\0', 1, None) != ('\0\0', (0,0)): return 0 return 1 def testlin2alaw(data): if verbose: print 'lin2alaw' if audioop.lin2alaw(data[0], 1) != '\xd5\xc5\xf5' or \ audioop.lin2alaw(data[1], 2) != '\xd5\xd5\xd5' or \ audioop.lin2alaw(data[2], 4) != '\xd5\xd5\xd5': return 0 return 1 def testalaw2lin(data): if verbose: print 'alaw2lin' # Cursory d = audioop.lin2alaw(data[0], 1) if audioop.alaw2lin(d, 1) != data[0]: return 0 return 1 def testlin2ulaw(data): if verbose: print 'lin2ulaw' if audioop.lin2ulaw(data[0], 1) != '\xff\xe7\xdb' or \ audioop.lin2ulaw(data[1], 2) != '\xff\xff\xff' or \ audioop.lin2ulaw(data[2], 4) != '\xff\xff\xff': return 0 return 1 def testulaw2lin(data): if verbose: print 'ulaw2lin' # Cursory d = audioop.lin2ulaw(data[0], 1) if audioop.ulaw2lin(d, 1) != data[0]: return 0 return 1 def testmul(data): if verbose: print 'mul' data2 = [] for d in data: str = '' for s in d: str = str + chr(ord(s)*2) data2.append(str) if audioop.mul(data[0], 1, 2) != data2[0] or \ audioop.mul(data[1],2, 2) != data2[1] or \ audioop.mul(data[2], 4, 2) != data2[2]: return 0 return 1 def testratecv(data): if verbose: print 'ratecv' state = None d1, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state) d2, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state) if d1 + d2 != '\000\000\001\001\002\001\000\000\001\001\002': return 0 return 1 def testreverse(data): if verbose: print 'reverse' if audioop.reverse(data[0], 1) != '\2\1\0': return 0 return 1 def testtomono(data): if verbose: print 'tomono' data2 = '' for d in data[0]: data2 = data2 + d + d if audioop.tomono(data2, 1, 0.5, 0.5) != data[0]: return 0 return 1 def testtostereo(data): if verbose: print 'tostereo' data2 = '' for d in data[0]: data2 = data2 + d + d if audioop.tostereo(data[0], 1, 1, 1) != data2: return 0 return 1 def testfindfactor(data): if verbose: print 'findfactor' if audioop.findfactor(data[1], data[1]) != 1.0: return 0 return 1 def testfindfit(data): if verbose: print 'findfit' if audioop.findfit(data[1], data[1]) != (0, 1.0): return 0 return 1 def testfindmax(data): if verbose: print 'findmax' if audioop.findmax(data[1], 1) != 2: return 0 return 1 def testgetsample(data): if verbose: print 'getsample' for i in range(3): if audioop.getsample(data[0], 1, i) != i or \ audioop.getsample(data[1], 2, i) != i or \ audioop.getsample(data[2], 4, i) != i: return 0 return 1 def testone(name, data): try: func = eval('test'+name) except NameError: print 'No test found for audioop.'+name+'()' return try: rv = func(data) except 'xx': print 'Test FAILED for audioop.'+name+'() (with an exception)' return if not rv: print 'Test FAILED for audioop.'+name+'()' def testall(): data = [gendata1(), gendata2(), gendata4()] names = dir(audioop) # We know there is a routine 'add' routines = [] for n in names: if type(eval('audioop.'+n)) == type(audioop.add): routines.append(n) for n in routines: testone(n, data) testall()