예제 #1
0
 def test_add_known_item(self):
     """Test that OrderedSet.add(known) returns False."""
     contents = ["foo", "bar", "baz"]
     known = contents[1]
     os = utility.OrderedSet(contents)
     self.assertFalse(os.add(known))
     self.assertEqual(list(os), contents)
예제 #2
0
 def test_discard_unknown_item(self):
     """Test that OrderedSet.discard(unknown) returns False."""
     contents = ["foo", "bar", "baz"]
     unknown = "qux"
     os = utility.OrderedSet(contents)
     self.assertFalse(os.discard(unknown))
     self.assertEqual(list(os), contents)
예제 #3
0
 def test_add_unknown_item(self):
     """Test that OrderedSet.add(unknown) returns True."""
     contents = ["foo", "bar", "baz"]
     unknown = "qux"
     os = utility.OrderedSet(contents)
     self.assertTrue(os.add(unknown))
     self.assertEqual(list(os), contents + [unknown])
예제 #4
0
 def test_creation_with_duplicates(self):
     """"Test that OrderedSet instantiation removes duplicates."""
     contents = ["foo", "bar", "foo", "baz"]
     os = utility.OrderedSet(contents)
     self.assertNotEqual(list(os), contents)
     self.assertEqual(len(os), len(contents) - 1)
     self.assertEqual(set(os), set(contents))
예제 #5
0
 def test_creation_simple(self):
     """"Test basic OrderedSet instantiation."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertEqual(list(os), contents)
     self.assertEqual(len(os), len(contents))
     self.assertEqual(set(os), set(contents))
예제 #6
0
 def test_discard_known_item(self):
     """Test that OrderedSet.discard(known) returns True."""
     contents = ["foo", "bar", "baz"]
     known = contents[1]
     new_contents = [x for x in contents if x != known]
     os = utility.OrderedSet(contents)
     self.assertTrue(os.discard(known))
     self.assertEqual(list(os), new_contents)
예제 #7
0
    def _add_literal_to_index(self, literal, index_name):
        index_key = ((index_name[0], ) +
                     tuple([(i, literal.head.arguments[i].name)
                            for i in index_name[1:]]))

        # Populate the index
        if index_key not in self.indicies[index_name]:
            self.indicies[index_name][index_key] = utility.OrderedSet()
        self.indicies[index_name][index_key].add(literal)
예제 #8
0
 def test_equals_other_iterable(self):
     """Test that OrderedSet-to-other-iterable equality returns False."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertNotEqual(os, set(os))
     self.assertNotEqual(os, frozenset(os))
     self.assertNotEqual(os, list(os))
     self.assertNotEqual(os, tuple(os))
     self.assertNotEqual(os, {x: 0 for x in os})
예제 #9
0
    def test_contains(self):
        """Test that basic OrderedSet.__contains__ functionality works."""
        contents = ["foo", "bar", "baz"]
        missing = "qux"
        os = utility.OrderedSet(contents)
        self.assertTrue(all(x in os for x in contents))
        self.assertTrue(missing not in os)

        discarded = contents[1]
        os.discard(discarded)
        self.assertTrue(all(x in os for x in contents if x != discarded))
        self.assertTrue(discarded not in os)
예제 #10
0
    def add_rule(self, key, rule):
        # rule can be a rule or a literal
        # returns True on change

        if len(rule.body):
            dest = self.rules
        else:
            dest = self.literals
            # Update indicies
            for index_name in self.indicies.keys():
                if key == index_name[0]:
                    self._add_literal_to_index(rule, index_name)

        if key in dest:
            return dest[key].add(rule)
        else:
            dest[key] = utility.OrderedSet([rule])
            return True
예제 #11
0
 def test_reversed_reverses_order(self):
     """Test that reversed(OrderedSet()) reverses correctly."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertEqual(list(reversed(os)), list(reversed(contents)))
예제 #12
0
 def test_pop_not_first_item(self):
     """Test that OrderedSet.pop(last=False) returns the first item."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertEqual(os.pop(last=False), contents[0])
     self.assertEqual(list(os), contents[1:])
예제 #13
0
 def test_pop_last_item(self):
     """Test that OrderedSet.pop() returns the final item."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertEqual(os.pop(), contents[-1])
     self.assertEqual(list(os), contents[:-1])
예제 #14
0
 def test_equals_other_ordered_set(self):
     """Test that OrderedSet equality accounts for order."""
     contents = ["foo", "bar", "baz"]
     os = utility.OrderedSet(contents)
     self.assertNotEqual(os, utility.OrderedSet(reversed(os)))
     self.assertEqual(os, utility.OrderedSet(contents))