diff --git a/stone/ir/api.py b/stone/ir/api.py index 1b23e182..5ea57ccb 100644 --- a/stone/ir/api.py +++ b/stone/ir/api.py @@ -441,6 +441,20 @@ def __ge__(self, other): return self._compare(self, other) >= 0 def __ne__(self, other): return self._compare(self, other) != 0 + def __hash__(self): + return hash(( + self.name, + self.version, + self._ast_node, + self.deprecated, + self.raw_doc, + self.doc, + self.arg_data_type, + self.result_data_type, + self.error_data_type, + id(self.attrs) + )) + class DeprecationInfo(object): diff --git a/test/test_backend.py b/test/test_backend.py index c559ec10..56a045ce 100755 --- a/test/test_backend.py +++ b/test/test_backend.py @@ -505,5 +505,14 @@ def test_no_preserve_aliases_from_api(self): field = dependent_struct.fields[0] self.assertIsInstance(field.data_type, String) + def test_route_hashing(self): + route = ApiRoute('test/route', 1, None) + same_route = ApiRoute("test/route", 1, None) + diff_version = ApiRoute("test/route", 2, None) + diff_route = ApiRoute("test/route_2", 1, None) + self.assertEqual(hash(route), hash(same_route)) + self.assertNotEqual(hash(route), hash(diff_version)) + self.assertNotEqual(hash(route), hash(diff_route)) + if __name__ == '__main__': unittest.main()