def testInsertFull(self):
		tiles = {}
		for coord in self.default_rect.tuple_iter():
			tiles[coord] = _FakeTile(coord[0], coord[1])
			tree = TileQuadTree(Rect.init_from_topleft_and_size(0,0, 5, 5))

		for coord, tile in tiles.iteritems():
			self.assertEqual( tree.get_tile(*coord), None )
			tree.add_tile(tile)
			self.assertEqual( tree.get_tile(*coord), tile )
	def testInsert(self):
		tiles = {}
		tiles[(2,2)] = _FakeTile(2, 2)
		tiles[(2,3)] = _FakeTile(2, 3)
		tiles[(3,2)] = _FakeTile(3, 2)
		tiles[(3,3)] = _FakeTile(3, 3)
		tiles[(0,0)] = _FakeTile(0, 0)
		tree = TileQuadTree(Rect.init_from_topleft_and_size(0,0, 5, 5))

		for coord, tile in tiles.iteritems():
			self.assertEqual( tree.get_tile(*coord), None )
			tree.add_tile(tile)
			self.assertEqual( tree.get_tile(*coord), tile )
	def testRadiusCoordsSpeed(self):
		tree = TileQuadTree(Rect.init_from_topleft_and_size(0, 0, 300, 300) )

		print 'testing speed (may take a while)'
		for x in xrange(0,300):
			if x % 20 == 0: print int((float(x)/300)*100)
			for y in xrange(0,300):
				tree.add_tile(_FakeTile(x, y) )

		center = Rect.init_from_topleft_and_size(144,145,10,10)

		import cProfile as profile
		import tempfile
		#outfilename = tempfile.mkstemp(text = True)[1]
		#print 'profile to ', outfilename
		#profile.runctx( "for i in tree.get_radius_tiles(center, 100): a_app(i)" , globals(), locals(), outfilename)
		def cb(x): pass
		outfilename = tempfile.mkstemp(text = True)[1]
		print 'profile to ', outfilename
		profile.runctx( "tree.visit_radius_tiles(center, 120, cb)" , globals(), locals(), outfilename)
	def testRadiusCoords(self):
		area = Rect.init_from_topleft_and_size(0, 0, 100, 100)
		tree = TileQuadTree(area)
		tree2 = TileQuadTree(area)
		tree2_check = lambda coord : coord[0] % 2 == 0 and coord[0] % 3 == 0 and coord[1] % 5 == 0
		for coord in area.tuple_iter():
			tree.add_tile( _FakeTile(coord[0], coord[1] ) )
			if tree2_check(coord):
				tree2.add_tile( _FakeTile(coord[0], coord[1]) )

		def get_diff_msg(l1, l2):
			msg = 'unequal at radius '+ str(radius)
			msg += '\nl1: ' + str(l1)
			msg += '\nl2: ' + str(l2)
			diff1 = [ i for i in l1 if i not in l2 ]
			diff2 = [ i for i in l2 if i not in l1 ]
			msg += '\ndiff1: ' + str(diff1)
			msg += '\ndiff2: ' + str(diff2)
			return msg
		def do_test(center, radius):
			l1 = []
			for tile in tree.get_radius_tiles(center, radius):
				l1.append((tile.x, tile.y))
			l2 = []
			tree.visit_radius_tiles(center, radius, lambda x : l2.append((x.x, x.y)))
			l1.sort()
			l2.sort()
			l3 = sorted(center.get_radius_coordinates(radius, include_self=True))
			self.assertEqual(l1, l3, get_diff_msg(l1, l3))
			self.assertEqual(l1, l2, get_diff_msg(l1, l2))
		def do_test2(center, radius):
			l1 = []
			for tile in tree2.get_radius_tiles(center, radius):
				l1.append((tile.x, tile.y))
			l2 = []
			tree2.visit_radius_tiles(center, radius, lambda x : l2.append((x.x, x.y)))
			l1.sort()
			l2.sort()
			l3 = [ x for x in sorted(center.get_radius_coordinates(radius, include_self=True)) if tree2_check(x)]
			self.assertEqual(l1, l3, get_diff_msg(l1, l3))
			self.assertEqual(l1, l2, get_diff_msg(l1, l2))


		center = Rect.init_from_topleft_and_size(20, 20, 0, 0)
		center2 = Rect.init_from_topleft_and_size(20, 20, 3, 3)
		center3 = Rect.init_from_topleft_and_size(20, 20, 5, 2)

		print 'checking for correctness'
		for radius in xrange(0,15):
			do_test(center, radius)
			do_test(center2, radius)
			do_test(center3, radius)
			do_test2(center, radius)
			do_test2(center2, radius)
			do_test2(center3, radius)