def test_get_stats(self): total = 0 count = 0 objs = [] for index in range(5): size = 1234 obj, source = allocate_bytes(size) objs.append(obj) total += size count += 1 stats = tracemalloc._get_stats() filename, lineno = source self.assertEqual(stats[filename][lineno], (total, count))
def test_free_lists(self): data = None if sys.version_info < (3,): # Python 2.x test_types = (int, unicode, tuple, list, dict, set) # FIXME: test more types: float, binded method, C function else: # Python 3.x test_types = (tuple, list, dict, set) for test_type in test_types: clear_stats() if test_type in (tuple, list): length = 10 ** 5 if test_type == tuple: base = (None,) else: base = [None] filename, lineno = get_source(1) data = base * length min_size = MIN_SIZE_PTR * length elif test_type == dict: length = 1024 items = [(str(key), key) for key in range(length)] filename, lineno = get_source(1) data = dict(items) min_size = MIN_SIZE_PTR * length elif test_type == set: length = 1024 items = tuple(map(str, range(length))) filename, lineno = get_source(1) data = set(items) min_size = MIN_SIZE_PTR * length elif test_type == unicode: length = 4 * 1024 filename, lineno = get_source(1) data = u"\uffff" * length if hasattr(sys, 'getsizeof'): min_size = sys.getsizeof(data) else: # In narrow mode, Python uses UCS-2: 16-bit per character min_size = 2 * length else: assert test_type == int # build an integer bigger than 4 KB pow2 = 1000000 filename, lineno = get_source(1) data = 2 ** pow2 if hasattr(sys, 'getsizeof'): min_size = sys.getsizeof(data) else: # Python 2.7 on 64-bit system uses 30 bits per digit ndigits = (pow2 + 1) // 30 # 32 bits per Python digit min_size = ndigits * 4 stats = tracemalloc._get_stats() trace = stats[filename][lineno] self.assertGreaterEqual(trace[0], min_size) self.assertGreaterEqual(trace[1], 1) # Deallocate data = None stats = tracemalloc._get_stats() self.assertNotIn(lineno, stats[filename])
def test_free_lists(self): data = None if sys.version_info < (3, ): # Python 2.x test_types = (int, unicode, tuple, list, dict, set) # FIXME: test more types: float, binded method, C function else: # Python 3.x test_types = (tuple, list, dict, set) for test_type in test_types: clear_stats() if test_type in (tuple, list): length = 10**5 if test_type == tuple: base = (None, ) else: base = [None] filename, lineno = get_source(1) data = base * length min_size = MIN_SIZE_PTR * length elif test_type == dict: length = 1024 items = [(str(key), key) for key in range(length)] filename, lineno = get_source(1) data = dict(items) min_size = MIN_SIZE_PTR * length elif test_type == set: length = 1024 items = tuple(map(str, range(length))) filename, lineno = get_source(1) data = set(items) min_size = MIN_SIZE_PTR * length elif test_type == unicode: length = 4 * 1024 filename, lineno = get_source(1) data = u"\uffff" * length if hasattr(sys, 'getsizeof'): min_size = sys.getsizeof(data) else: # In narrow mode, Python uses UCS-2: 16-bit per character min_size = 2 * length else: assert test_type == int # build an integer bigger than 4 KB pow2 = 1000000 filename, lineno = get_source(1) data = 2**pow2 if hasattr(sys, 'getsizeof'): min_size = sys.getsizeof(data) else: # Python 2.7 on 64-bit system uses 30 bits per digit ndigits = (pow2 + 1) // 30 # 32 bits per Python digit min_size = ndigits * 4 stats = tracemalloc._get_stats() trace = stats[filename][lineno] self.assertGreaterEqual(trace[0], min_size) self.assertGreaterEqual(trace[1], 1) # Deallocate data = None stats = tracemalloc._get_stats() self.assertNotIn(lineno, stats[filename])