From 7236e6212315387ed32db9027fcbff53d6bd4da6 Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Sun, 10 Mar 2019 04:15:40 +0100 Subject: [PATCH 01/10] Add tests for large arrays --- Lib/test/test_array.py | 111 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 2399980d134c8bb..0161e460cdb20fb 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1396,5 +1396,116 @@ def test_alloc_overflow(self): self.fail("Array of size > maxsize created - MemoryError expected") +class LargeListTest(unittest.TestCase): + typecode = 'b' + values1 = [0, 1, 2, 3, 4, 5, 6, 7] + values2 = [8, 9, 10, 11] + example_multiplier = 0x10000000 + + def example(self): + return array.array(self.typecode, self.values1) * self.example_multiplier + array.array(self.typecode, self.values2) + + def test_build_example(self): + example = self.example() + self.assertEqual(len(example), 0x80000004) + + def test_access(self): + example = self.example() + self.assertEqual(example[0], 0) + self.assertEqual(example[-0x80000004], 0) + self.assertEqual(example[0x80000000], 8) + self.assertEqual(example[-4], 8) + self.assertEqual(example[0x80000003], 11) + self.assertEqual(example[-1], 11) + + def test_count(self): + example = self.example() + for value in [0, 1, 6, 7]: + self.assertEqual(example.count(value), 0x10000000) + for value in [8, 11]: + self.assertEqual(example.count(value), 1) + + def test_append(self): + example = self.example() + example.append(12) + self.assertEqual(example[-1], 12) + + def test_extend(self): + example = self.example() + example.extend(iter([12, 13, 14, 15])) + self.assertEqual(len(example), 0x80000008) + self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) + + def test_frombytes(self): + example = self.example() + example.frombytes(b'abcd') + self.assertEqual(len(example), 0x80000008) + self.assertEqual(list(example[-8:]), [8, 9, 10, 11] + list(b'abcd')) + + def test_fromlist(self): + example = self.example() + example.fromlist([12, 13, 14, 15]) + self.assertEqual(len(example), 0x80000008) + self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) + + def test_index(self): + example = self.example() + self.assertEqual(example.index(0), 0) + self.assertEqual(example.index(1), 1) + self.assertEqual(example.index(7), 7) + self.assertEqual(example.index(8), 0x80000000) + self.assertEqual(example.index(11), 0x80000003) + + def test_insert(self): + example = self.example() + example.insert(0, 12) + example.insert(10, 13) + example.insert(0x80000001, 14) + self.assertEqual(len(example), 0x80000007) + self.assertEqual(example[0], 12) + self.assertEqual(example[10], 13) + self.assertEqual(example[0x80000001], 14) + + def test_pop(self): + example = self.example() + self.assertEqual(example.pop(0), 0) + self.assertEqual(example[0], 1) + self.assertEqual(example.pop(0x80000001), 10) + self.assertEqual(example[0x80000001], 11) + self.assertEqual(example.pop(1), 2) + self.assertEqual(example[1], 3) + self.assertEqual(len(example), 0x80000001) + self.assertEqual(example.pop(), 11) + self.assertEqual(len(example), 0x80000000) + + def test_remove(self): + example = self.example() + example.remove(0) + self.assertEqual(len(example), 0x80000003) + self.assertEqual(example[0], 1) + example.remove(10) + self.assertEqual(len(example), 0x80000002) + self.assertEqual(example[0x80000000], 9) + self.assertEqual(example[0x80000001], 11) + + def test_reverse(self): + example = self.example() + example.reverse() + self.assertEqual(len(example), 0x80000004) + self.assertEqual(example[0], 11) + self.assertEqual(example[4], 7) + self.assertEqual(example[-1], 0) + example.reverse() + self.assertEqual(len(example), 0x80000004) + self.assertEqual(list(example[:4]), [0, 1, 2, 3]) + self.assertEqual(list(example[-4:]), [8, 9, 10, 11]) + + def test_tolist(self): + example = self.example() + ls = example.tolist() + self.assertEqual(len(ls), len(example)) + self.assertEqual(ls[:8], list(example[:8])) + self.assertEqual(ls[-8:], list(example[-8:])) + if __name__ == "__main__": unittest.main() From 5a93ffe0a872b3a15d2dba0d53cc8ee52544c9a3 Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Tue, 12 Mar 2019 00:16:37 +0100 Subject: [PATCH 02/10] Guard tests @bigmemtest --- Lib/test/test_array.py | 120 +++++++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 52 deletions(-) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 0161e460cdb20fb..44a1a8abcdb69a1 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -4,6 +4,7 @@ import unittest from test import support +from test.support import _2G import weakref import pickle import operator @@ -1402,106 +1403,121 @@ class LargeListTest(unittest.TestCase): values2 = [8, 9, 10, 11] example_multiplier = 0x10000000 - def example(self): - return array.array(self.typecode, self.values1) * self.example_multiplier + array.array(self.typecode, self.values2) + def example(self, size): + base = array.array(self.typecode, [0, 1, 2, 3, 4, 5, 6, 7]) * (size // 8) + base += array.array(self.typecode, [100]*(size % 8) + self.values2) + return base - def test_build_example(self): - example = self.example() - self.assertEqual(len(example), 0x80000004) + @support.bigmemtest(_2G, memuse=1) + def test_build_example(self, size): + example = self.example(size) + self.assertEqual(len(example), size+4) - def test_access(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_access(self, size): + example = self.example(size) self.assertEqual(example[0], 0) - self.assertEqual(example[-0x80000004], 0) - self.assertEqual(example[0x80000000], 8) + self.assertEqual(example[-(size+4)], 0) + self.assertEqual(example[size], 8) self.assertEqual(example[-4], 8) - self.assertEqual(example[0x80000003], 11) + self.assertEqual(example[size+3], 11) self.assertEqual(example[-1], 11) - def test_count(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_count(self, size): + example = self.example(size) for value in [0, 1, 6, 7]: - self.assertEqual(example.count(value), 0x10000000) + self.assertEqual(example.count(value), size//8) # TODO for value in [8, 11]: self.assertEqual(example.count(value), 1) - def test_append(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_append(self, size): + example = self.example(size) example.append(12) self.assertEqual(example[-1], 12) - def test_extend(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_extend(self, size): + example = self.example(size) example.extend(iter([12, 13, 14, 15])) - self.assertEqual(len(example), 0x80000008) + self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) - def test_frombytes(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_frombytes(self, size): + example = self.example(size) example.frombytes(b'abcd') - self.assertEqual(len(example), 0x80000008) + self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11] + list(b'abcd')) - def test_fromlist(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_fromlist(self, size): + example = self.example(size) example.fromlist([12, 13, 14, 15]) - self.assertEqual(len(example), 0x80000008) + self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) - def test_index(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_index(self, size): + example = self.example(size) self.assertEqual(example.index(0), 0) self.assertEqual(example.index(1), 1) self.assertEqual(example.index(7), 7) - self.assertEqual(example.index(8), 0x80000000) - self.assertEqual(example.index(11), 0x80000003) + self.assertEqual(example.index(8), size) + self.assertEqual(example.index(11), size+3) - def test_insert(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_insert(self, size): + example = self.example(size) example.insert(0, 12) example.insert(10, 13) - example.insert(0x80000001, 14) - self.assertEqual(len(example), 0x80000007) + example.insert(size+1, 14) + self.assertEqual(len(example), size+7) self.assertEqual(example[0], 12) self.assertEqual(example[10], 13) - self.assertEqual(example[0x80000001], 14) + self.assertEqual(example[size+1], 14) - def test_pop(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_pop(self, size): + example = self.example(size) self.assertEqual(example.pop(0), 0) self.assertEqual(example[0], 1) - self.assertEqual(example.pop(0x80000001), 10) - self.assertEqual(example[0x80000001], 11) + self.assertEqual(example.pop(size+1), 10) + self.assertEqual(example[size+1], 11) self.assertEqual(example.pop(1), 2) self.assertEqual(example[1], 3) - self.assertEqual(len(example), 0x80000001) + self.assertEqual(len(example), size+1) self.assertEqual(example.pop(), 11) - self.assertEqual(len(example), 0x80000000) + self.assertEqual(len(example), size) - def test_remove(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_remove(self, size): + example = self.example(size) example.remove(0) - self.assertEqual(len(example), 0x80000003) + self.assertEqual(len(example), size+3) self.assertEqual(example[0], 1) example.remove(10) - self.assertEqual(len(example), 0x80000002) - self.assertEqual(example[0x80000000], 9) - self.assertEqual(example[0x80000001], 11) + self.assertEqual(len(example), size+2) + self.assertEqual(example[size], 9) + self.assertEqual(example[size+1], 11) - def test_reverse(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1) + def test_reverse(self, size): + example = self.example(size) example.reverse() - self.assertEqual(len(example), 0x80000004) + self.assertEqual(len(example), size+4) self.assertEqual(example[0], 11) - self.assertEqual(example[4], 7) + self.assertEqual(example[3], 8) self.assertEqual(example[-1], 0) example.reverse() - self.assertEqual(len(example), 0x80000004) + self.assertEqual(len(example), size+4) self.assertEqual(list(example[:4]), [0, 1, 2, 3]) self.assertEqual(list(example[-4:]), [8, 9, 10, 11]) - def test_tolist(self): - example = self.example() + @support.bigmemtest(_2G, memuse=1+9) + def test_tolist(self, size): + example = self.example(size) ls = example.tolist() self.assertEqual(len(ls), len(example)) self.assertEqual(ls[:8], list(example[:8])) From 74999adc2a5ce143b824952f63b59eff38c70fa9 Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Tue, 12 Mar 2019 00:17:27 +0100 Subject: [PATCH 03/10] Use Py_ssize_t in loops --- Modules/arraymodule.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index a5ba27cb36e2180..4be3beb29ccbae9 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1174,7 +1174,7 @@ static PyObject * array_array_remove(arrayobject *self, PyObject *v) /*[clinic end generated code: output=bef06be9fdf9dceb input=0b1e5aed25590027]*/ { - int i; + Py_ssize_t i; for (i = 0; i < Py_SIZE(self); i++) { PyObject *selfi; @@ -2029,7 +2029,7 @@ array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, switch (mformat_code) { case IEEE_754_FLOAT_LE: case IEEE_754_FLOAT_BE: { - int i; + Py_ssize_t i; int le = (mformat_code == IEEE_754_FLOAT_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 4; const unsigned char *memstr = @@ -2051,7 +2051,7 @@ array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, } case IEEE_754_DOUBLE_LE: case IEEE_754_DOUBLE_BE: { - int i; + Py_ssize_t i; int le = (mformat_code == IEEE_754_DOUBLE_LE) ? 1 : 0; Py_ssize_t itemcount = Py_SIZE(items) / 8; const unsigned char *memstr = @@ -2106,7 +2106,7 @@ array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype, case UNSIGNED_INT64_BE: case SIGNED_INT64_LE: case SIGNED_INT64_BE: { - int i; + Py_ssize_t i; const struct mformatdescr mf_descr = mformat_descriptors[mformat_code]; Py_ssize_t itemcount = Py_SIZE(items) / mf_descr.size; From 1fada132918edafaf65b08f56b99b121d2a3283c Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Tue, 12 Mar 2019 02:07:36 +0100 Subject: [PATCH 04/10] Clean up example data creation --- Lib/test/test_array.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 44a1a8abcdb69a1..c1ca9f27cbf7c16 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1399,17 +1399,14 @@ def test_alloc_overflow(self): class LargeListTest(unittest.TestCase): typecode = 'b' - values1 = [0, 1, 2, 3, 4, 5, 6, 7] - values2 = [8, 9, 10, 11] - example_multiplier = 0x10000000 def example(self, size): base = array.array(self.typecode, [0, 1, 2, 3, 4, 5, 6, 7]) * (size // 8) - base += array.array(self.typecode, [100]*(size % 8) + self.values2) + base += array.array(self.typecode, [99]*(size % 8) + [8, 9, 10, 11]) return base @support.bigmemtest(_2G, memuse=1) - def test_build_example(self, size): + def test_example_data(self, size): example = self.example(size) self.assertEqual(len(example), size+4) From 9cab158ec557705d767ec7807d55f7172ecf5943 Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Tue, 12 Mar 2019 02:09:27 +0100 Subject: [PATCH 05/10] Test fewer count() and index() cases because they are slow --- Lib/test/test_array.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index c1ca9f27cbf7c16..0aef705c66e12ee 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1423,10 +1423,8 @@ def test_access(self, size): @support.bigmemtest(_2G, memuse=1) def test_count(self, size): example = self.example(size) - for value in [0, 1, 6, 7]: - self.assertEqual(example.count(value), size//8) # TODO - for value in [8, 11]: - self.assertEqual(example.count(value), 1) + self.assertEqual(example.count(0), size//8) + self.assertEqual(example.count(11), 1) @support.bigmemtest(_2G, memuse=1) def test_append(self, size): @@ -1461,7 +1459,6 @@ def test_index(self, size): self.assertEqual(example.index(0), 0) self.assertEqual(example.index(1), 1) self.assertEqual(example.index(7), 7) - self.assertEqual(example.index(8), size) self.assertEqual(example.index(11), size+3) @support.bigmemtest(_2G, memuse=1) From 5eabf4284af1fd5414b650cbc6dc44e5172c28c5 Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Wed, 13 Mar 2019 23:52:30 +0100 Subject: [PATCH 06/10] Improve test name --- Lib/test/test_array.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 0aef705c66e12ee..62f2a0d24447d21 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1397,7 +1397,7 @@ def test_alloc_overflow(self): self.fail("Array of size > maxsize created - MemoryError expected") -class LargeListTest(unittest.TestCase): +class LargeArrayTest(unittest.TestCase): typecode = 'b' def example(self, size): From 0cc62656fc254c791f14cbe41fa6752e79e968ce Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Wed, 13 Mar 2019 23:57:05 +0100 Subject: [PATCH 07/10] Explain memuse --- Lib/test/test_array.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 62f2a0d24447d21..5fac42aa799ae83 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1509,6 +1509,7 @@ def test_reverse(self, size): self.assertEqual(list(example[:4]), [0, 1, 2, 3]) self.assertEqual(list(example[-4:]), [8, 9, 10, 11]) + # list takes about 9 bytes per element @support.bigmemtest(_2G, memuse=1+9) def test_tolist(self, size): example = self.example(size) From c337e90ab56380b74e183b4f44ac2d997e28fa7b Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Thu, 14 Mar 2019 00:38:32 +0100 Subject: [PATCH 08/10] Add test for slices --- Lib/test/test_array.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 5fac42aa799ae83..d7002a59b4ee7e0 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1420,6 +1420,24 @@ def test_access(self, size): self.assertEqual(example[size+3], 11) self.assertEqual(example[-1], 11) + @support.bigmemtest(_2G, memuse=2) + def test_slice(self, size): + example = self.example(size) + self.assertEqual(list(example[:4]), [0, 1, 2, 3]) + self.assertEqual(list(example[-4:]), [8, 9, 10, 11]) + part = example[1:-1] + self.assertEqual(len(part), size+2) + self.assertEqual(part[0], 1) + self.assertEqual(part[-1], 10) + del part + part = example[::2] + self.assertEqual(len(part), (size+5)//2) + self.assertEqual(list(part[:4]), [0, 2, 4, 6]) + if size % 2: + self.assertEqual(list(part[-2:]), [9, 11]) + else: + self.assertEqual(list(part[-2:]), [8, 10]) + @support.bigmemtest(_2G, memuse=1) def test_count(self, size): example = self.example(size) From 255e5fd8c62403835142414c824879ad4844769b Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Thu, 14 Mar 2019 01:10:09 +0100 Subject: [PATCH 09/10] Add news --- .../NEWS.d/next/Library/2019-03-14-01-09-59.bpo-36285.G-usj8.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Library/2019-03-14-01-09-59.bpo-36285.G-usj8.rst diff --git a/Misc/NEWS.d/next/Library/2019-03-14-01-09-59.bpo-36285.G-usj8.rst b/Misc/NEWS.d/next/Library/2019-03-14-01-09-59.bpo-36285.G-usj8.rst new file mode 100644 index 000000000000000..bf16170c5f6f396 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-03-14-01-09-59.bpo-36285.G-usj8.rst @@ -0,0 +1 @@ +Fix integer overflows in the array module. Patch by Stephan Hohe. From 506f7f9f77f46c9444ad6a1edb143389e4e4236e Mon Sep 17 00:00:00 2001 From: Stephan Hohe Date: Fri, 15 Mar 2019 01:16:08 +0100 Subject: [PATCH 10/10] Constructing the base array can take more than memuse=1 --- Lib/test/test_array.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index d7002a59b4ee7e0..57c396d610b75c1 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -1401,16 +1401,17 @@ class LargeArrayTest(unittest.TestCase): typecode = 'b' def example(self, size): + # We assess a base memuse of <=2.125 for constructing this array base = array.array(self.typecode, [0, 1, 2, 3, 4, 5, 6, 7]) * (size // 8) base += array.array(self.typecode, [99]*(size % 8) + [8, 9, 10, 11]) return base - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_example_data(self, size): example = self.example(size) self.assertEqual(len(example), size+4) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_access(self, size): example = self.example(size) self.assertEqual(example[0], 0) @@ -1420,7 +1421,7 @@ def test_access(self, size): self.assertEqual(example[size+3], 11) self.assertEqual(example[-1], 11) - @support.bigmemtest(_2G, memuse=2) + @support.bigmemtest(_2G, memuse=2.125+1) def test_slice(self, size): example = self.example(size) self.assertEqual(list(example[:4]), [0, 1, 2, 3]) @@ -1438,40 +1439,40 @@ def test_slice(self, size): else: self.assertEqual(list(part[-2:]), [8, 10]) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_count(self, size): example = self.example(size) self.assertEqual(example.count(0), size//8) self.assertEqual(example.count(11), 1) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_append(self, size): example = self.example(size) example.append(12) self.assertEqual(example[-1], 12) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_extend(self, size): example = self.example(size) example.extend(iter([12, 13, 14, 15])) self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_frombytes(self, size): example = self.example(size) example.frombytes(b'abcd') self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11] + list(b'abcd')) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_fromlist(self, size): example = self.example(size) example.fromlist([12, 13, 14, 15]) self.assertEqual(len(example), size+8) self.assertEqual(list(example[-8:]), [8, 9, 10, 11, 12, 13, 14, 15]) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_index(self, size): example = self.example(size) self.assertEqual(example.index(0), 0) @@ -1479,7 +1480,7 @@ def test_index(self, size): self.assertEqual(example.index(7), 7) self.assertEqual(example.index(11), size+3) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_insert(self, size): example = self.example(size) example.insert(0, 12) @@ -1490,7 +1491,7 @@ def test_insert(self, size): self.assertEqual(example[10], 13) self.assertEqual(example[size+1], 14) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_pop(self, size): example = self.example(size) self.assertEqual(example.pop(0), 0) @@ -1503,7 +1504,7 @@ def test_pop(self, size): self.assertEqual(example.pop(), 11) self.assertEqual(len(example), size) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_remove(self, size): example = self.example(size) example.remove(0) @@ -1514,7 +1515,7 @@ def test_remove(self, size): self.assertEqual(example[size], 9) self.assertEqual(example[size+1], 11) - @support.bigmemtest(_2G, memuse=1) + @support.bigmemtest(_2G, memuse=2.125) def test_reverse(self, size): example = self.example(size) example.reverse() @@ -1528,7 +1529,7 @@ def test_reverse(self, size): self.assertEqual(list(example[-4:]), [8, 9, 10, 11]) # list takes about 9 bytes per element - @support.bigmemtest(_2G, memuse=1+9) + @support.bigmemtest(_2G, memuse=2.125+9) def test_tolist(self, size): example = self.example(size) ls = example.tolist()