Example #1
0
class Map:

    def __init__(self, compare):
        self.__items = []
        self.__keys_with_items = []
        self.__sorted_set = SortedSet(compare)

    def __iter__(self):
        return Iter(self.__items)

    def add(self, key, value):
        if key is not None:
            if value is not None:
                self.__sorted_set.add(key)
                self.__items.append(value)
                key_index = self.__sorted_set.index_of(key)
                value_index = self.__items.index(value)
                self.__keys_with_items.insert(key_index, value_index)
            else:
                raise Exception('map method add must have two parameters(key, value)')
        else:
            raise Exception('map method add must have two parameters(key, value)')

    def get_item(self, key):
        if key is not None:
            index_value = self.__keys_with_items[self.__sorted_set.index_of(key)]
            if index_value is not None:
                return self.__items[index_value]
            else:
                raise Exception('Your map don\'t have this item')
        else:
            raise Exception('map method get_item must have one parameter(key)')

    def get_items(self):
        for item in self:
            yield item

    def remove(self, key):
        if key is not None:
            set_key = self.__sorted_set.index_of(key)
            index_value = self.__keys_with_items[self.__sorted_set.index_of(key)]
            if set_key and index_value is None:
                raise Exception('Your map don\'t have this item')
            else:
                self.__sorted_set.remove(key)
                del self.__items[index_value]
                del self.__keys_with_items[set_key]
        else:
            raise Exception('map method remove must have one parameter(key)')

    def get_size(self):
        return len(self.__items)
 def test_add(self):
     s = SortedSet({1, 2, 3})
     t = [4, 5]
     self.assertEqual(s.add(t), SortedSet({1, 2, 3, 4, 5}))