diff -r c81dd9fe0d87 Lib/test/test_bigmem.py --- a/Lib/test/test_bigmem.py Mon Apr 13 11:30:56 2015 -0400 +++ b/Lib/test/test_bigmem.py Mon Apr 13 16:12:34 2015 -0400 @@ -11,6 +11,7 @@ from test import support from test.support import bigmemtest, _1G, _2G, _4G +from ctypes import c_voidp, sizeof import unittest import operator import sys @@ -905,9 +906,8 @@ def test_repeat_large_2(self, size): return self.basic_test_repeat(size) - @bigmemtest(size=_1G - 1, memuse=9) - def test_from_2G_generator(self, size): - self.skipTest("test needs much more memory than advertised, see issue5438") + @bigmemtest(size=_1G - 1, memuse=sys.getsizeof(_1G - 1) + sizeof(c_voidp)) + def test_from_2G_iterable(self, size): try: t = tuple(range(size)) except MemoryError: @@ -919,6 +919,22 @@ count += 1 self.assertEqual(count, size) + @bigmemtest(size=_1G - 1, memuse=sys.getsizeof(_1G - 1) + sizeof(c_voidp)) + def test_from_2G_generator(self, size): + def no_len_range(a): + yield from range(a) + + try: + t = tuple(no_len_range(size)) + except MemoryError: + pass # acceptable on 32-bit + else: + count = 0 + for item in t: + self.assertEqual(item, count) + count += 1 + self.assertEqual(count, size) + @bigmemtest(size=_1G - 25, memuse=9) def test_from_almost_2G_generator(self, size): self.skipTest("test needs much more memory than advertised, see issue5438")