else:
return val
+
+def UniqueFrozenset(seq):
+ """Makes C{frozenset} from sequence after checking for duplicate elements.
+
+ @raise ValueError: When there are duplicate elements
+
+ """
+ if isinstance(seq, (list, tuple)):
+ items = seq
+ else:
+ items = list(seq)
+
+ result = frozenset(items)
+
+ if len(items) != len(result):
+ raise ValueError("Duplicate values found")
+
+ return result
+
+
#: returns the first element of a list-like value
fst = operator.itemgetter(0)
self.assertEquals(compat.TryToRoman("19", convert=False), "19")
+class TestUniqueFrozenset(unittest.TestCase):
+ def testDuplicates(self):
+ for values in [["", ""], ["Hello", "World", "Hello"]]:
+ self.assertRaises(ValueError, compat.UniqueFrozenset, values)
+
+ def testEmpty(self):
+ self.assertEqual(compat.UniqueFrozenset([]), frozenset([]))
+
+ def testUnique(self):
+ self.assertEqual(compat.UniqueFrozenset([1, 2, 3]), frozenset([1, 2, 3]))
+
+ def testGenerator(self):
+ seq = ("Foo%s" % i for i in range(10))
+ self.assertTrue(callable(seq.next))
+ self.assertFalse(isinstance(seq, (list, tuple)))
+ self.assertEqual(compat.UniqueFrozenset(seq),
+ frozenset(["Foo%s" % i for i in range(10)]))
+
+
if __name__ == "__main__":
testutils.GanetiTestProgram()