def test_os_stat(self): '''Test sizing os.stat and os.statvfs objects. ''' try: stat = os.stat(__file__) except Exception: pass else: stat_size = asizeof.asizeof(stat) self.assertTrue(stat_size > 0, stat_size) refs = asizeof.named_refs(stat) ref_names = set([name for name, _ in refs]) self.assertTrue( set(['st_mode', 'st_size', 'st_mtime']) <= ref_names, ref_names) try: stat = os.statvfs(__file__) except Exception: pass else: stat_size = asizeof.asizeof(stat) self.assertTrue(stat_size > 0, stat_size) refs = asizeof.named_refs(stat) ref_names = set([name for name, _ in refs]) self.assertTrue( set(['f_bsize', 'f_blocks']) <= ref_names, ref_names)
def test_weakref(self): '''Test sizing weak references. ''' alive = Foo('alive') aref = weakref.ref(alive) dead = Foo('dead') dref = weakref.ref(dead) del dead aref_size = asizeof.asizeof(aref) self.assertTrue(aref_size > asizeof.asizeof(alive), aref_size) refs = asizeof.named_refs(aref) # TODO: Should a weakref return ('ref', obj)? dref_size = asizeof.asizeof(dref) self.assertTrue(dref_size > 0, dref_size) self.assertNotEqual(dref_size, aref_size) refs = asizeof.named_refs(dref)
def test_enumerate(self): '''Test sizing enumerators. ''' enum = enumerate([1,2,3]) enum_size = asizeof.asizeof(enum) self.assertTrue(enum_size > 0, enum_size) refs = asizeof.named_refs(enum) ref_names = set([name for name, _ in refs]) self.assertTrue(set(['__doc__']) <= ref_names, ref_names)
def test_enumerate(self): '''Test sizing enumerators. ''' enum = enumerate([1, 2, 3]) enum_size = asizeof.asizeof(enum) self.assertTrue(enum_size > 0, enum_size) refs = asizeof.named_refs(enum) ref_names = set([name for name, _ in refs]) self.assertTrue(set(['__doc__']) <= ref_names, ref_names)
def get_obj_referents(oid): referents = {} obj = get_obj(oid) if type(obj) is dict: named_objects = asizeof.named_refs(obj) else: refs = asizeof._getreferents(obj) named_objects = [(repr(type(x)), x) for x in refs] for name, o in named_objects: referents[name] = (get_ref(o), type(o).__name__, safe_repr(o, clip=48), asizeof.asizeof(o)) return dict(referents=referents)
def test_os_stat(self): '''Test sizing os.stat and os.statvfs objects. ''' try: stat = os.stat(__file__) except Exception: pass else: stat_size = asizeof.asizeof(stat) self.assertTrue(stat_size > 0, stat_size) refs = asizeof.named_refs(stat) ref_names = set([name for name, _ in refs]) self.assertTrue(set(['st_mode', 'st_size', 'st_mtime']) <= ref_names, ref_names) try: stat = os.statvfs(__file__) except Exception: pass else: stat_size = asizeof.asizeof(stat) self.assertTrue(stat_size > 0, stat_size) refs = asizeof.named_refs(stat) ref_names = set([name for name, _ in refs]) self.assertTrue(set(['f_bsize', 'f_blocks']) <= ref_names, ref_names)
def test_exception(self): '''Test sizing exceptions. ''' try: raise Exception("Test exception-sizing.") except Exception: etype, exc, etb = sys.exc_info() try: tb_size = asizeof.asizeof(etb) self.assertTrue(tb_size > 0, tb_size) refs = asizeof.named_refs(etb) ref_names = set([name for name, _ in refs]) self.assertTrue(set(['tb_frame', 'tb_next']) <= ref_names, ref_names) ex_size = asizeof.asizeof(etype, exc) self.assertTrue(ex_size > 0, ex_size) finally: del etb
def _get_edges(self): """ Compute the edges for the reference graph. The function returns a set of tuples (id(a), id(b), ref) if a references b with the referent 'ref'. """ idset = set([id(x) for x in self.objects]) self.edges = set([]) for n in self.objects: refset = set([id(x) for x in get_referents(n)]) for ref in refset.intersection(idset): label = '' members = None if isinstance(n, dict): members = n.items() if not members: members = named_refs(n) for (k, v) in members: if id(v) == ref: label = k break self.edges.add(_Edge(id(n), ref, label))