cpython: 97ad9af5d5e7 (original) (raw)
--- a/Lib/test/test_audioop.py +++ b/Lib/test/test_audioop.py @@ -121,6 +121,9 @@ class TestAudioop(unittest.TestCase): b'\x00\x24\x7f\x80\x7f\x80\xfe') self.assertEqual(audioop.add(datas[2], datas[2], 2), packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
self.assertEqual(audioop.add(datas[3], datas[3], 3),[](#l1.7)
packs[3](0, 0x2468ac, 0x7fffff, -0x800000,[](#l1.8)
0x7fffff, -0x800000, -2))[](#l1.9) self.assertEqual(audioop.add(datas[4], datas[4], 4),[](#l1.10) packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,[](#l1.11) 0x7fffffff, -0x80000000, -2))[](#l1.12)
@@ -145,6 +148,17 @@ class TestAudioop(unittest.TestCase): packs[2](-1, 0x1233, 0x4566, -0x4568, 0x7ffe, 0x7fff, -2)) self.assertEqual(audioop.bias(datas[2], 2, -0x80000000), datas[2])
self.assertEqual(audioop.bias(datas[3], 3, 1),[](#l1.17)
packs[3](1, 0x123457, 0x45678a, -0x456788,[](#l1.18)
-0x800000, -0x7fffff, 0))[](#l1.19)
self.assertEqual(audioop.bias(datas[3], 3, -1),[](#l1.20)
packs[3](-1, 0x123455, 0x456788, -0x45678a,[](#l1.21)
0x7ffffe, 0x7fffff, -2))[](#l1.22)
self.assertEqual(audioop.bias(datas[3], 3, 0x7fffffff),[](#l1.23)
packs[3](-1, 0x123455, 0x456788, -0x45678a,[](#l1.24)
0x7ffffe, 0x7fffff, -2))[](#l1.25)
self.assertEqual(audioop.bias(datas[3], 3, -0x80000000),[](#l1.26)
datas[3])[](#l1.27) self.assertEqual(audioop.bias(datas[4], 4, 1),[](#l1.28) packs[4](1, 0x12345679, 0x456789ac, -0x456789aa,[](#l1.29) -0x80000000, -0x7fffffff, 0))[](#l1.30)
@@ -164,24 +178,43 @@ class TestAudioop(unittest.TestCase): self.assertEqual(audioop.lin2lin(datas[1], 1, 2), packs[2](0, 0x1200, 0x4500, -0x4500, 0x7f00, -0x8000, -0x100))
self.assertEqual(audioop.lin2lin(datas[1], 1, 3),[](#l1.35)
packs[3](0, 0x120000, 0x450000, -0x450000,[](#l1.36)
0x7f0000, -0x800000, -0x10000))[](#l1.37) self.assertEqual(audioop.lin2lin(datas[1], 1, 4),[](#l1.38) packs[4](0, 0x12000000, 0x45000000, -0x45000000,[](#l1.39) 0x7f000000, -0x80000000, -0x1000000))[](#l1.40) self.assertEqual(audioop.lin2lin(datas[2], 2, 1),[](#l1.41) b'\x00\x12\x45\xba\x7f\x80\xff')[](#l1.42)
self.assertEqual(audioop.lin2lin(datas[2], 2, 3),[](#l1.43)
packs[3](0, 0x123400, 0x456700, -0x456700,[](#l1.44)
0x7fff00, -0x800000, -0x100))[](#l1.45) self.assertEqual(audioop.lin2lin(datas[2], 2, 4),[](#l1.46) packs[4](0, 0x12340000, 0x45670000, -0x45670000,[](#l1.47) 0x7fff0000, -0x80000000, -0x10000))[](#l1.48)
self.assertEqual(audioop.lin2lin(datas[3], 3, 1),[](#l1.49)
b'\x00\x12\x45\xba\x7f\x80\xff')[](#l1.50)
self.assertEqual(audioop.lin2lin(datas[3], 3, 2),[](#l1.51)
packs[2](0, 0x1234, 0x4567, -0x4568, 0x7fff, -0x8000, -1))[](#l1.52)
self.assertEqual(audioop.lin2lin(datas[3], 3, 4),[](#l1.53)
packs[4](0, 0x12345600, 0x45678900, -0x45678900,[](#l1.54)
0x7fffff00, -0x80000000, -0x100))[](#l1.55) self.assertEqual(audioop.lin2lin(datas[4], 4, 1),[](#l1.56) b'\x00\x12\x45\xba\x7f\x80\xff')[](#l1.57) self.assertEqual(audioop.lin2lin(datas[4], 4, 2),[](#l1.58) packs[2](0, 0x1234, 0x4567, -0x4568, 0x7fff, -0x8000, -1))[](#l1.59)
self.assertEqual(audioop.lin2lin(datas[4], 4, 3),[](#l1.60)
packs[3](0, 0x123456, 0x456789, -0x45678a,[](#l1.61)
0x7fffff, -0x800000, -1))[](#l1.62)
def test_adpcm2lin(self): self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 1, None), (b'\x00\x00\x00\xff\x00\xff', (-179, 40))) self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 2, None), (packs[2](0, 0xb, 0x29, -0x16, 0x72, -0xb3), (-179, 40)))
self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 3, None),[](#l1.69)
(packs[3](0, 0xb00, 0x2900, -0x1600, 0x7200,[](#l1.70)
-0xb300), (-179, 40)))[](#l1.71) self.assertEqual(audioop.adpcm2lin(b'\x07\x7f\x7f', 4, None),[](#l1.72) (packs[4](0, 0xb0000, 0x290000, -0x160000, 0x720000,[](#l1.73) -0xb30000), (-179, 40)))[](#l1.74)
@@ -260,6 +293,9 @@ class TestAudioop(unittest.TestCase): b'\x00\x24\x7f\x80\x7f\x80\xfe') self.assertEqual(audioop.mul(datas[2], 2, 2), packs[2](0, 0x2468, 0x7fff, -0x8000, 0x7fff, -0x8000, -2))
self.assertEqual(audioop.mul(datas[3], 3, 2),[](#l1.79)
packs[3](0, 0x2468ac, 0x7fffff, -0x800000,[](#l1.80)
0x7fffff, -0x800000, -2))[](#l1.81) self.assertEqual(audioop.mul(datas[4], 4, 2),[](#l1.82) packs[4](0, 0x2468acf0, 0x7fffffff, -0x80000000,[](#l1.83) 0x7fffffff, -0x80000000, -2))[](#l1.84)
--- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -985,10 +985,12 @@ audioop_bias(PyObject *self, PyObject *a val = GETINTX(unsigned char, cp, i); else if (size == 2) val = GETINTX(unsigned short, cp, i);
else if (size == 2)[](#l2.7)
else if (size == 3)[](#l2.8) val = ((unsigned int)GETINT24(cp, i)) & 0xffffffu;[](#l2.9)
else[](#l2.10)
else {[](#l2.11)
assert(size == 4);[](#l2.12) val = GETINTX(PY_UINT32_T, cp, i);[](#l2.13)
}[](#l2.14)
val += (unsigned int)bias; /* wrap around in case of overflow */ @@ -998,10 +1000,12 @@ audioop_bias(PyObject *self, PyObject *a SETINTX(unsigned char, ncp, i, val); else if (size == 2) SETINTX(unsigned short, ncp, i, val);
else if (size == 2)[](#l2.22)
else if (size == 3)[](#l2.23) SETINT24(ncp, i, (int)val);[](#l2.24)
else[](#l2.25)