Skip to content

Commit 2e9639b

Browse files
author
washort
committed
Merge pull request #43 from jml/hash
Make hash of equivalent terms the same
2 parents e58c0c6 + 099d7b7 commit 2e9639b

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

terml/nodes.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@ def __eq__(self, other):
2424
return False
2525

2626

27+
def __hash__(self):
28+
return hash((Term, self.tag, self.data, self.args))
29+
30+
2731
def __repr__(self):
2832
return "term('%s')" % (self._unparse(4).replace("'", "\\'"))
2933

@@ -105,6 +109,9 @@ def __ne__(self, other):
105109
def __repr__(self):
106110
return "Tag(%r)" % (self.name,)
107111

112+
def __hash__(self):
113+
return hash((Tag, self.name))
114+
108115
def _unparse(self, indentLevel=0):
109116
return self.name
110117

terml/test/test_terml.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from twisted.trial import unittest
22
from ometa.runtime import ParseError
3-
from terml.nodes import Tag, Term, coerceToTerm, TermMaker
3+
from terml.nodes import Tag, Term, coerceToTerm, TermMaker, termMaker
44
from terml.parser import TermLParser, character, parseTerm
55

66

@@ -156,3 +156,9 @@ def test_coerce(self):
156156
coerceToTerm({3: 4, "a": character('x'), (2, 3): [4, 5]}),
157157
parseTerm('{"a": \'x\', 3: 4, [2, 3]: [4, 5]}'))
158158

159+
160+
def test_hash(self):
161+
t = TermMaker()
162+
a = t.Arbitrary('foo')
163+
b = t.Arbitrary('foo')
164+
self.assertEqual(hash(a), hash(b))

0 commit comments

Comments
 (0)