Skip to content

Commit

Permalink
add some nicer methods on MultiSet
Browse files Browse the repository at this point in the history
  • Loading branch information
Brian Hicks committed Nov 26, 2012
1 parent 9d9139a commit 5e5d2d5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 1 deletion.
11 changes: 10 additions & 1 deletion cowboy/base.py
Expand Up @@ -55,12 +55,21 @@ def __eq__(self, other):
'equality of two ranges'
return type(self) == type(other) and self.start == other.start and self.end == other.end

def __hash__(self):
'return the hash of this object' # TODO: find out if this is the best way to do this
return id(self)


class MultiRange(object):
def __init__(self, *ranges):
self.ranges = set(ranges)

def __contains__(self, value):
'see if any member ranges contain the value'
print [(value, member, value in member) for member in self.ranges]
return any([value in member for member in self.ranges])

def __eq__(self, other):
return self.ranges == other.ranges

def __repr__(self):
return '<MultiRange: %s>' % self.ranges
19 changes: 19 additions & 0 deletions test/base_test.py
Expand Up @@ -127,6 +127,12 @@ def test_repr(self):
repr(Range(1, 2))
)

# hash
def test_hash(self):
'hash of Range object'
r = Range(1, 2)
self.assertEqual(id(r), hash(r))


class MultiRangeTests(TestCase):
'tests for MultiRange'
Expand All @@ -139,3 +145,16 @@ def test_contains(self):
self.assertTrue(2 in mr)
self.assertFalse(4 in mr)
self.assertTrue(6 in mr)

def test_equal(self):
'two multiranges equal each other'
r = Range(1, 2)
a, b = MultiRange(r), MultiRange(r)
self.assertEqual(a, b)

def test_repr(self):
'repr returns an informative string'
self.assertEqual(
'<MultiRange: {<Range: 1 to 2>}>',
repr(MultiRange(Range(1, 2)))
)

0 comments on commit 5e5d2d5

Please sign in to comment.