# HG changeset patch # User Jeff Hammel # Date 1505683716 25200 # Node ID 4b20694b8a16ac1861768abcf287ab82c59303fb # Parent 111997fa04d1604781136cb76ba026d3aa2355f5 add module + test for uniqueness diff -r 111997fa04d1 -r 4b20694b8a16 tests/test_unique.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test_unique.py Sun Sep 17 14:28:36 2017 -0700 @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +import os +import unittest +from tvii.unique import unique +from tvii.unique import NotUnique + +class TestUnique(unittest.TestCase): + + def test_positive(self): + """ensure the unique functionality works as expected""" + + # true positive + a_unique_value = [7] * 7 + assert unique(a_unique_value) == 7 + + def test_negative(self): + """what if a set is not unique?""" + + data = [1,2,3,4] + e = None + try: + unique(data) + except NotUnique as e: + pass + assert e is not None + assert isinstance(e, NotUnique) + +if __name__ == '__main__': + unittest.main() diff -r 111997fa04d1 -r 4b20694b8a16 tvii/unique.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tvii/unique.py Sun Sep 17 14:28:36 2017 -0700 @@ -0,0 +1,21 @@ +class NotUnique(Exception): + """exception for a set of items that are not unique""" + + msg_tmpl = "Not unique: {items}" + + def __init__(self, multiples): + self.multiples = multiples + message = self.msg_tmpl.format(items=', '.join([str(item) + for item in multiples])) + Exception.__init__(self, message) + + +def unique(items): + """asserts that a `items` is a set of one""" + + types = set(items) + unique = types.pop() + if types: + types.add(unique) + raise NotUnique(types) + return unique