\FF\D8\FF\E0\00JFIF\00\00\00d\00d\00\00\FF\FE\00\border bs:0 bc:#000000 ps:0 pc:#ffffff es:0 ec:#000000 ck:feee6c715d26fd9f38b0ca4278c05026\FF\DB\00C\00P7<F<2PFAFZUP_xxnnx\F5\AF\B9\91\C8\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\DB\00CUZZxix‚\EB\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\FF\C0\00\00b\00d\00\FF\C4\00\00\00\00\00\00\00\00\00\00\00\00\00\00\FF\C4\00\00\00\00\00\00\00\00\00\00\001A!Q\FF\C4\00\00\00\00\00\00\00\00\00\00\00\00\00\FF\C4\00\00\00\00\00\00\00\00\00\00!1AQ\FF\DA\00\00\00?\00\F6\00\00\00\00\00\00\00\00\00\00\A0\00\00\C5\CF\F8\E7Ó\FCjD~\B9^\AD\%\B3]\D8cs-\BBs,-\A0\00"\80\00%\B83rÏ^K~F\A4ea\00E\00\C6\EE=u\B1\9B\D1\00@\00r\BE8\F9:\FE5#.M\00\E7\CB\C9q\CBq\D6\F2\BE\B7\C7>\C9n5×\D6?\BDê\9Ds\EBp\9F[`8m\B7)o\B5\E8\E6I\99\FE3]]A2\BA\8Cw\D6E\93\\DEv\C8\009\F2\F1NI?uc\\F5\EA\96k\xN<~buv\EA\C8\D7	\8B\84\CEcxI\BBg\AE\9E=\D6+n\EC\80\C8A\8C\AE\EB\CF\D5\DA\E9"2\A4\B9j5\EB\F3W\B63\96\B30Yu\DA\FC8\ED\DF\E7Ms\FB\F1\8E\B3\FA\EA\E8\E6(\883zs\F2_\8DFk\8Bh
\00\8C\DCw\D3R\B5+6X\BA\B2\C4j\AB0\B4\FCMw\C2I\8E\9B\E3\A9~9u\FA\D3l\80\C8%p\EE\FDn2€
\00$\FEj\C4e\A9\DB\~\95\A7\A5\80EK\BB\8DDsP\00@@AD'k\CF\E8\DB\D2(\80\9AK\D3\85\D6lb\F2\BA\8C*\80\00)\95
59\A3R:\F3\CE"\B6\80\88\00\00i1u4ê\E9\F2á\A6\A2\FACM\93WMb*\E0*\00\00\00\00\00(\A8\80\00\00\80\00\00\00\00\00\00\00\00\00\FF\D9<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>C///</title>
</head>
from guppy.heapy.test import support
class TestCase(support.TestCase):
    def setUp(self):
	support.TestCase.setUp(self)
	self.types = self.heapy.UniSet.types

class FirstCase(TestCase):
    def test_cal_hiding(self):
	V = self.View
	iso = self.iso

	# Tests that our workspace nodesets are hidden. 

	a = []
	b = []
	as_ = iso(a)
	bs = iso(b)
	ab = as_ | bs
	# Make sure hiding is carried on with set operations
	self.assert_(ab.referrers.kind == self.types.FrameType)
	self.assert_((as_ | bs).referrers.kind == self.types.FrameType)
	self.assert_(V.referrers(iso(a)).kind == self.types.FrameType)
	self.assert_(V.referrers(iso(b)).kind == self.types.FrameType)

	# Test that we can still see nodesets created with other hiding_tag

	c = []
	chold = self.guppy.sets.immnodeset(
	    [c],
	    hiding_tag = []	# Make sure we see it whether or not View uses default or not
	    )
	cs = iso(c)
	del c

	self.assert_(cs.referrers.kind == type(self.guppy.sets.immnodeset()))

    def test_dominos(self):
	# Test dominos and domisize
	iso = self.iso
	x = []
	y = [x, []]
	z = [y]
	self.aseq(iso(y).dominos, iso(y, y[1]))
	self.aseq(iso(y).domisize, iso(y, y[1]).indisize)
	self.aseq(iso(z).dominos, iso(z))
	del y
	self.aseq(iso(z).dominos, iso(z, z[0], z[0][1]))

    def test_exports(self):
	# Test a few exports; the other defined in _unp_exports use the same mechanism
	iso = self.iso
	x = []
	y = [x, []]
	z = [y]
	p = iso(z).referents.indisize
	self.aseq(p, iso(y).indisize)

    def test_horizon(self):
	iso = self.iso
	h = self.View.horizon()
	x = []
	hn = h.news()
	self.aseq(hn, iso(x))
	del hn
	hn = h.news()
	self.aseq(hn, iso(x))
	del x, hn
	hn = h.news()
	self.aseq(hn, iso())

    def test_imdom(self):
	iso = self.iso
	x = []
	y = [x, []]
	z = [x, y]
	del x, y
	self.aseq(iso(z[0]).imdom, iso(z))

    def test_referents(self):
	iso = self.iso
	x = []
	y = [x, []]
	z = [y]
	self.aseq( iso(x).referents, iso())
	self.aseq( iso(y).referents, iso(x, y[1]))
	self.aseq( iso(z).referents, iso(y))
	self.aseq( iso(y, z).referents, iso(x, y, y[1]))

        


class GCCase(TestCase):
    def test_gc_mechanism(self):
	# Test the underlying GC system for having the properties that
	# support the method of automatic reclamation of nodegraphs
	# that is relied on in other tests. Failure here, dependent on
	# changed GC behaviour, would explain the other failures.

	from weakref import ref
	import gc
	class C:
	    pass

	c = C()
	cbs = []
	def cb(wr):
	    cbs.append(wr)

	wr = ref(c, cb)

	c.x = c
	gc.collect()
	strc = str(c)
	self.aseq(str(wr()), strc)
	self.asis(wr(), c)
	c=None
	self.aseq(str(wr()), strc)
	self.aseq(cbs, [])
	gc.collect()
	self.asis(wr(), None)
	self.aseq(cbs, [wr])
    
    def test_gc_hook(self):
	# Test the GC hook as implemented in View

	hos = []
	def ho():
	    hos.append(1)
	    
	import gc
	gc.collect()
	hook = self.heapy.View.gchook(ho)
	self.aseq(hos, [])
	gc.collect()
	self.aseq(hos, [1])
	hook = None
	gc.collect()
	self.aseq(hos, [1])

    def test_gc_drg(self):
	# Test automatic reclamation issues for dict owner nodegraph
	# This mechanism changed so the old test here is
	# not valid anymore
	# XXX MAKE NEW TEST
	return

	import gc
	View = self.View
	hv = View.hv
	drg = View.nodegraph()
	def clear_drg():
	    if drg.is_sorted:
		#print 'yes'
		drg.clear()
	    else:
		#print 'no'
		pass
	_clear_drg_hook = View.gchook(clear_drg)

	hv.update_dictowners(drg)
	gc.collect()
	lendrg = len(drg)
	self.assert_(lendrg > 0)    # Before any use, it will not be cleared
	# Now it is used by taking its length
	gc.collect()
	self.aseq(len(drg), 0)
	
	byclodo = hv.cli_clodo(drg, {})

	class C:
	    pass
	c=C()

	byclodo.partition([c.__dict__])
	self.assert_(len(drg) > 0)
	gc.collect()
	self.assert_(len(drg) == 0)

    def test_gc_rg(self):
	# Test automatic reclamation issues for referrer nodegraph
	iso = self.iso
	immnodeset = self.guppy.sets.immnodeset
	self.View.is_rg_update_all = False
	import gc
	
	gc.collect()

	dst = []

	gc.collect()
	self.assert_( len(self.View.rg) == 0)

	# Test that rg is automatically updated with the set target(s)
	
	a = [dst]
	b = [dst]
	c = [a, b]

	class T:
	    def __init__(self, set):
		self.set = set

	ta = T(iso(a))
	self.View.referrers_add_target(ta)
	tb = T(iso(b))
	self.View.referrers_add_target(tb)

	self.View.referrers(iso(c))
	self.assert_(c in immnodeset(self.V