def test_ops(self): a = set([1, 2, 4]) b = set([1, 5, 6]) A = IntSet(a) B = IntSet(b) C = IntSet([2, 4]) self.assertEqual(tuple(sorted(a | b)), tuple(sorted(A | B))) self.assertEqual(tuple(sorted(a & b)), tuple(sorted(A & B))) self.assertEqual(tuple(sorted(a - b)), tuple(sorted(A - B))) self.assertEqual(tuple(sorted(a ^ b)), tuple(sorted(A ^ B))) self.assertTrue(C < A) self.assertTrue(C <= A) self.assertTrue(A > C) self.assertTrue(A | B == B | A) self.assertTrue(C.isdisjoint(B)) self.assertFalse(A | B != B | A)
def __init__(self, V: "Iterable<T>"=[], E: "Iterable<(T,T)>"=[], directed: "bool"=True): capacity = max(V)+1 super().__init__(V, E, directed, createMap=lambda V: IntKeyMap(capacity=capacity), createSet=lambda V: IntSet(capacity=capacity), redimMap=lambda map, v: map.set_capacity(v+1), redimSet=lambda set, v: set.set_capacity(v+1))
def setUp(self): self.edges = [(0,1), (1,2), (2,3), (3,4), (4,5),(5,0), (0,3), (3,0), (0,2), (0,4), (0,7)] self.g = AdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1), redimMap=lambda map, maxkey: map.set_capacity(max(map.capacity, maxkey+1)), redimSet=lambda set, maxkey: set.set_capacity(max(set.capacity, maxkey+1)))
def test_topsort(self): G = Digraph(E=[(0,1), (1,2), (2,3), (3,4), (4,5)]) topsorter = Topsorter() self.assertEqual(tuple(topsorter.topsorted(G)), tuple(range(6))) int_topsorter = Topsorter(createDepthFirstTraverser= lambda G: DepthFirstTraverser(createSet=lambda V: IntSet(capacity=max(V)+1))) self.assertEqual(tuple(int_topsorter.topsorted(G)), tuple(range(6))) G = Digraph(E={'C': ['C++', 'Objective C', 'Java', 'C#'], 'C++': ['C#', 'Java'], 'Java': ['C#']}) ts = tuple(topsorter.topsorted(G)) for (u,v) in G.E: self.assertTrue(ts.index(u) < ts.index(v))
def setUp(self): self.edges = [(0,1), (1,2), (2,3), (3,4), (4,5),(5,0), (0,3), (3,0), (0,2), (0,4), (0,7)] self.undirected_edges = set() for (u,v) in self.edges: self.undirected_edges.add((u,v)) self.undirected_edges.add((v,u)) self.g1 = UndirectedGraph(V=range(8), E=self.edges) self.g1bis = UndirectedGraph(E=self.edges) self.g1bis.V.add(6) self.g2 = AdjacencyDigraph(V=range(8), E=self.edges, directed=False, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1)) self.g3 = LinkedListSetAdjacencyDigraph(V=range(8), E=self.edges, directed=False, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g4 = ListSetAdjacencyDigraph(V=range(8), E=self.edges, directed=False, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g5 = SetAdjacencyDigraph(V=range(8), E=self.edges, directed=False, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g6 = AdjacencyMatrixDigraph(V=range(8), E=self.edges, directed=False) self.g7 = InvAdjacencyDigraph(V=range(8), E=self.edges, directed=False, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1))
def setUp(self): self.edges = [(0,1), (1,2), (2,3), (3,4), (4,5), (5,0), (0,3), (3,0), (0,2), (0,4), (0,7)] self.g1 = Digraph(V=range(8), E=self.edges) self.g1bis = Digraph(E=self.edges) self.g1bis.V.add(6) self.g2 = AdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1)) self.g3 = LinkedListSetAdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g4 = ListSetAdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g5 = SetAdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1)) self.g6 = AdjacencyMatrixDigraph(V=range(8), E=self.edges, directed=True) self.g7 = InvAdjacencyDigraph(V=range(8), E=self.edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1)) edges = self.edges + [(1,1)] self.g8 = InvAdjacencyDigraph(V=range(8), E=edges, directed=True, createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1))
def setUp(self): self.data = [10, 60, 20, 30, 30, 40, 50] self.set0 = set(self.data) self.set1 = IntSet(self.data)
class Test_IntSet(unittest.TestCase): def setUp(self): self.data = [10, 60, 20, 30, 30, 40, 50] self.set0 = set(self.data) self.set1 = IntSet(self.data) def test_init(self): self.assertEqual(self.set1, self.set0) def test_len(self): self.assertEqual(len(self.set1), len(self.set0)) def test_remove(self): self.set0.remove(10) self.set1.remove(10) self.assertEqual(self.set1, self.set0) self.assertRaises(KeyError, self.set0.remove, 1000) def test_discard(self): self.set0.discard(10) self.set1.discard(10) self.assertEqual(self.set1, self.set0) n = len(self.set0) self.set0.discard(10000) self.assertEqual(n, len(self.set0)) def test_contains(self): self.assertEqual(10 in self.set1, 10 in self.set0) self.assertEqual(1 in self.set1, 1 in self.set0) def test_clear(self): self.set1.clear() self.assertEqual(len(self.set1), 0) def test_iter(self): self.assertEqual(sorted(self.set1), sorted(self.set0)) def test_add(self): n = len(self.set1) self.set1.add(5) self.assertEqual(len(self.set1), n + 1) self.assertTrue(5 in self.set1) self.set1.add(10) self.assertEqual(len(self.set1), n + 1) def test_ops(self): a = set([1, 2, 4]) b = set([1, 5, 6]) A = IntSet(a) B = IntSet(b) C = IntSet([2, 4]) self.assertEqual(tuple(sorted(a | b)), tuple(sorted(A | B))) self.assertEqual(tuple(sorted(a & b)), tuple(sorted(A & B))) self.assertEqual(tuple(sorted(a - b)), tuple(sorted(A - B))) self.assertEqual(tuple(sorted(a ^ b)), tuple(sorted(A ^ B))) self.assertTrue(C < A) self.assertTrue(C <= A) self.assertTrue(A > C) self.assertTrue(A | B == B | A) self.assertTrue(C.isdisjoint(B)) self.assertFalse(A | B != B | A) def test_capacity(self): self.assertEqual(self.set1.capacity, 61) self.set1.capacity = 100 self.set1.add(99) self.assertEqual(self.set1.capacity, 100) self.assertTrue(99 in self.set1) self.set1.capacity = 10 self.set1.add(9) self.assertEqual(self.set1.capacity, 10) self.assertTrue(9 in self.set1) def test_repr(self): self.assertEqual(list(sorted(set(self.data))), list(sorted(eval(repr(self.set1)))))
from algoritmia.datastructures.digraphs import AdjacencyDigraph #[full from algoritmia.datastructures.sets import IntSet from algoritmia.datastructures.maps import IntKeyMap from algoritmia.problems.traversals.breadthfirst import BreadthFirstTraverser G = AdjacencyDigraph(E=[(0,1), (0,3), (1,4), (2,5), (3,1), (4,3)], createMap=lambda V: IntKeyMap(capacity=max(V)+1), createSet=lambda V: IntSet(capacity=max(V)+1)) bft = BreadthFirstTraverser(createSet=lambda V: IntSet(capacity=max(V)+1)) print(list(bft.traverse(G, 0)))#]full