import unittest
from igraph import *

class CliqueTests(unittest.TestCase):
    def setUp(self):
	self.g=Graph.Full(6)
	self.g.delete_edges([(0, 1), (0, 2), (3, 5)])

    def testCliques(self):
	tests = {(4, -1): [[1, 2, 3, 4], [1, 2, 4, 5]],
		 (2, 2): [[0, 3], [0, 4], [0, 5],
			  [1, 2], [1, 3], [1, 4], [1, 5],
			  [2, 3], [2, 4], [2, 5], [3, 4], [4, 5]],
		 (-1, -1): [[0], [1], [2], [3], [4], [5],
			    [0, 3], [0, 4], [0, 5],
			    [1, 2], [1, 3], [1, 4], [1, 5],
			    [2, 3], [2, 4], [2, 5], [3, 4], [4, 5],
			    [0, 3, 4], [0, 4, 5],
			    [1, 2, 3], [1, 2, 4], [1, 2, 5],
			    [1, 3, 4], [1, 4, 5], [2, 3, 4], [2, 4, 5],
			    [1, 2, 3, 4], [1, 2, 4, 5]]}
	for (lo, hi), exp in tests.iteritems():
	    self.assertEqual(map(tuple, exp), self.g.cliques(lo, hi))

    def testLargestCliques(self):
	self.assertEqual(self.g.largest_cliques(),
			 [(1, 2, 3, 4), (1, 2, 4, 5)])

    def testMaximalCliques(self):
	self.assertEqual(self.g.maximal_cliques(),
			 [(0, 3, 4), (0, 4, 5),
			  (1, 2, 3, 4), (1, 2, 4, 5)])

    def testCliqueNumber(self):
	self.assertEqual(self.g.clique_number(), 4)
	self.assertEqual(self.g.omega(), 4)

class IndependentVertexSetTests(unittest.TestCase):
    def setUp(self):
	self.g1=Graph.Tree(5, 2, TREE_OUT)
	self.g2=Graph.Tree(10, 2, TREE_OUT)

    def testIndependentVertexSets(self):
	tests = {(4, -1): [],
		 (2, 2): [(0, 3), (0, 4), (1, 2), (2, 3), (2, 4), (3, 4)],
		 (-1, -1): [(0,), (1,), (2,), (3,), (4,),
			    (0, 3), (0, 4), (1, 2), (2, 3), (2, 4),
			    (3, 4), (0, 3, 4), (2, 3, 4)]}
	for (lo, hi), exp in tests.iteritems():
	    self.assertEqual(exp, self.g1.independent_vertex_sets(lo, hi))

    def testLargestIndependentVertexSets(self):
	self.assertEqual(self.g1.largest_independent_vertex_sets(),
			 [(0, 3, 4), (2, 3, 4)])

    def testMaximalIndependentVertexSets(self):
	self.assertEqual(self.g2.maximal_independent_vertex_sets(),
			 [(0, 3, 4, 5, 6), (0, 3, 5, 6, 9),
			  (0, 4, 5, 6, 7, 8), (0, 5, 6, 7, 8, 9),
			  (1, 2, 7, 8, 9), (1, 5, 6, 7, 8, 9),
			  (2, 3, 4), (2, 3, 9), (2, 4, 7, 8)])

    def testIndependenceNumber(self):
	self.assertEqual(self.g2.independence_number(), 6)
	self.assertEqual(self.g2.alpha(), 6)

def suite():
    clique_suite = unittest.makeSuite(CliqueTests)
    indvset_suite = unittest.makeSuite(IndependentVertexSetTests)
    return unittest.TestSuite([clique_suite, indvset_suite])

def test():
    runner = unittest.TextTestRunner()
    runner.run(suite())
    
if __name__ == "__main__":
    test()



syntax highlighted by Code2HTML, v. 0.9.1