make enums hashable

This commit is contained in:
Madeleine Thompson
2016-12-05 22:27:40 -05:00
parent 468375d566
commit 93ea35e558
2 changed files with 10 additions and 0 deletions

View File

@@ -943,6 +943,10 @@ cdef class _DynamicEnum:
elif op == 5: # >= elif op == 5: # >=
return left >= right return left >= right
def __hash__(_DynamicEnum self):
return hash(self._as_str())
cdef class _DynamicEnumField: cdef class _DynamicEnumField:
cdef _init(self, proto): cdef _init(self, proto):
self.thisptr = proto self.thisptr = proto

View File

@@ -415,6 +415,12 @@ def check_all_types(reader):
assert subSubReader.structField.textField == "really nested" assert subSubReader.structField.textField == "really nested"
assert subReader.enumField == "baz" assert subReader.enumField == "baz"
# Check that enums are hashable and can be used as keys in dicts
# interchangably with their string version.
assert hash(subReader.enumField) == hash('baz')
assert {subReader.enumField: 17}.get(subReader.enumField) == 17
assert {subReader.enumField: 17}.get('baz') == 17
assert {'baz': 17}.get(subReader.enumField) == 17
check_list(subReader.voidList, [None, None, None]) check_list(subReader.voidList, [None, None, None])
check_list(subReader.boolList, [False, True, False, True, True]) check_list(subReader.boolList, [False, True, False, True, True])