blob: 2504a9f7e7be70748dd0d3d25c5f8b8d10051b7f [file]
# Copyright 2026 The IREE Authors
#
# Licensed under the Apache License v2.0 with LLVM Exceptions.
# See https://llvm.org/LICENSE.txt for license information.
# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
import enum
import operator
import unittest
from iree import runtime as rt
class HalEnumsTest(unittest.TestCase):
def findEnums(self, base):
enums = [
value
for value in vars(rt._binding).values()
if isinstance(value, enum.EnumMeta) and issubclass(value, base)
]
self.assertTrue(enums, f"found no enums of type {base.__name__}")
return enums
def testBitwiseOps(self):
for enum_type in self.findEnums(int):
members = enum_type.__members__.values()
for a in members:
for b in members:
self.assertEqual(a | b, int(a) | int(b))
self.assertEqual(a & b, int(a) & int(b))
def testIndex(self):
for enum_type in self.findEnums(int):
for member in enum_type.__members__.values():
self.assertEqual(operator.index(member), int(member))
def testFlagEnumsOnlyHaveBitsOfSingleBitMembers(self):
for enum_type in self.findEnums(enum.Flag):
single_bits = 0
multi_bits = 0
for member in enum_type.__members__.values():
value = int(member)
if value & (value - 1):
multi_bits |= value
else:
single_bits |= value
self.assertEqual(multi_bits & ~single_bits, 0, enum_type.__name__)
if __name__ == "__main__":
unittest.main()