def test_is_subset(self):
        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'C', 'D', 'X'])
        assert sA.is_subset(sB) == True
        assert sB.is_subset(sA) == True

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B'])
        assert sA.is_subset(sB) == False
        assert sB.is_subset(sA) == True

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'M'])
        assert sA.is_subset(sB) == False
        assert sB.is_subset(sA) == False

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set()
        assert sA.is_subset(sB) == False
        assert sB.is_subset(sA) == True

        sA = Set()
        sB = Set()
        assert sA.is_subset(sB) == True
        assert sB.is_subset(sA) == True
    def test_intersection(self):
        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'C', 'D', 'X'])
        assert sA.intersection(sB).sort() == ['A', 'B', 'C', 'D', 'X'].sort()
        assert sB.intersection(sA).sort() == ['A', 'B', 'C', 'D', 'X'].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'M', 'P', 'Z'])
        assert sA.intersection(sB).sort() == ['A', 'B', 'C', 'D', 'X'].sort()
        assert sB.intersection(sA).sort() == ['A', 'B'].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['M', 'N', 'O', 'A', 'P'])
        assert sA.intersection(sB).sort() == ['A'].sort()
        assert sB.intersection(sA).sort() == ['A'].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set()
        assert sA.intersection(sB).sort() == [].sort()
        assert sB.intersection(sA).sort() == [].sort()
        #
        sA = Set()
        sB = Set()
        assert sA.intersection(sB) == []
        assert sB.intersection(sA) == []
    def test_difference(self):
        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'C', 'D', 'X'])
        assert sA.difference(sB).sort() == [].sort()
        assert sB.difference(sA).sort() == [].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['A', 'B', 'M', 'P', 'Z'])
        assert sA.difference(sB).sort() == ['C', 'D', 'X'].sort()
        assert sB.difference(sA).sort() == ['M', 'P', 'Z'].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['M', 'N', 'O', 'A', 'P'])
        assert sA.difference(sB).sort() == ['D'].sort()
        assert sB.difference(sA).sort() == ['M', 'N', 'O', 'P'].sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set()
        assert sA.difference(sB).sort() == ['A', 'B', 'C', 'D', 'X'].sort()
        assert sB.difference(sA).sort() == [].sort()

        sA = Set()
        sB = Set()
        assert sA.difference(sB) == []
        assert sB.difference(sA) == []
    def test_contains(self):
        s = Set(['A', 'B', 'C', 'D', 'X'])
        assert s.contains('C') == True
        assert s.contains('A') == True

        s.add('Y')
        assert s.contains('Y') == True
        assert s.contains('Z') == False

        s.add('Z')
        assert s.contains('Z') == True

        s.remove('Y')
        assert s.contains('Y') == False
    def test_add(self):
        s = Set()
        assert s.size == 0

        s.add('Y')
        assert s.contains('Y') == True
        assert s.size == 1

        s.add('Y')
        assert s.size == 1

        assert s.contains('Z') == False
        s.add('Z')
        assert s.contains('Z') == True
        assert s.size == 2
    def test_remove(self):
        s = Set(['A', 'B', 'C', 'D', 'X'])
        assert s.size == 5

        s.remove('A')
        assert s.contains('A') == False
        assert s.size == 4

        with self.assertRaises(KeyError):
            s.remove('Z')  # item not in set

        assert s.size == 4

        s.remove('B')
        assert s.contains('B') == False
        assert s.size == 3

        s.remove('C')
        assert s.size == 2
        s.remove('D')
        assert s.size == 1
        s.remove('X')
        assert s.size == 0
    def test_union(self):
        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set(['M', 'N', 'O', 'A', 'P'])
        psA = set(['A', 'B', 'C', 'D', 'X'])
        psB = set(['M', 'N', 'O', 'A', 'P'])
        assert sA.union(sB).sort() == [
            'A', 'B', 'C', 'D', 'X', 'M', 'N', 'O', 'P'
        ].sort()
        assert sB.union(sA).sort() == [
            'A', 'B', 'C', 'D', 'X', 'M', 'N', 'O', 'P'
        ].sort()
        assert sA.table.keys().sort() == Set(['A', 'B', 'C', 'D',
                                              'X']).table.keys().sort()

        sA = Set(['A', 'B', 'C', 'D', 'X'])
        sB = Set()
        assert sA.union(sB).sort() == ['A', 'B', 'C', 'D', 'X'].sort()
        assert sB.union(sA).sort() == ['A', 'B', 'C', 'D', 'X'].sort()

        sA = Set()
        sB = Set()
        assert sA.union(sB) == []
        assert sB.union(sA) == []
 def test_init(self):
     s = Set()
     assert s.size == 0
     assert s.table.length() == 0
 def test_init_with_list(self):
     s = Set(['A', 'B', 'C'])
     assert s.size == 3
     assert s.table.length() == 3
     assert s.is_empty() is False