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))
Esempio n. 2
0
    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])
Esempio n. 4
0
    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])