| # RUN: %PYTHON %s | FileCheck %s | |
| import gc | |
| from mlir.ir import * | |
| def run(f): | |
| print("\nTEST:", f.__name__) | |
| f() | |
| gc.collect() | |
| assert Context._get_live_count() == 0 | |
| return f | |
| # CHECK-LABEL: TEST: testIntegerSetCapsule | |
| @run | |
| def testIntegerSetCapsule(): | |
| with Context() as ctx: | |
| is1 = IntegerSet.get_empty(1, 1, ctx) | |
| capsule = is1._CAPIPtr | |
| # CHECK: mlir.ir.IntegerSet._CAPIPtr | |
| print(capsule) | |
| is2 = IntegerSet._CAPICreate(capsule) | |
| assert is1 == is2 | |
| assert is2.context is ctx | |
| # CHECK-LABEL: TEST: testIntegerSetGet | |
| @run | |
| def testIntegerSetGet(): | |
| with Context(): | |
| d0 = AffineDimExpr.get(0) | |
| d1 = AffineDimExpr.get(1) | |
| s0 = AffineSymbolExpr.get(0) | |
| c42 = AffineConstantExpr.get(42) | |
| # CHECK: (d0, d1)[s0] : (d0 - d1 == 0, s0 - 42 >= 0) | |
| set0 = IntegerSet.get(2, 1, [d0 - d1, s0 - c42], [True, False]) | |
| print(set0) | |
| # CHECK: (d0)[s0] : (1 == 0) | |
| set1 = IntegerSet.get_empty(1, 1) | |
| print(set1) | |
| # CHECK: (d0)[s0, s1] : (d0 - s1 == 0, s0 - 42 >= 0) | |
| set2 = set0.get_replaced([d0, AffineSymbolExpr.get(1)], [s0], 1, 2) | |
| print(set2) | |
| try: | |
| IntegerSet.get(2, 1, [], []) | |
| except ValueError as e: | |
| # CHECK: Expected non-empty list of constraints | |
| print(e) | |
| try: | |
| IntegerSet.get(2, 1, [d0 - d1], [True, False]) | |
| except ValueError as e: | |
| # CHECK: Expected the number of constraints to match that of equality flags | |
| print(e) | |
| try: | |
| IntegerSet.get(2, 1, [0], [True]) | |
| except RuntimeError as e: | |
| # CHECK: Invalid expression when attempting to create an IntegerSet | |
| print(e) | |
| try: | |
| IntegerSet.get(2, 1, [None], [True]) | |
| except RuntimeError as e: | |
| # CHECK: Invalid expression (None?) when attempting to create an IntegerSet | |
| print(e) | |
| try: | |
| set0.get_replaced([d0], [s0], 1, 1) | |
| except ValueError as e: | |
| # CHECK: Expected the number of dimension replacement expressions to match that of dimensions | |
| print(e) | |
| try: | |
| set0.get_replaced([d0, d1], [s0, s0], 1, 1) | |
| except ValueError as e: | |
| # CHECK: Expected the number of symbol replacement expressions to match that of symbols | |
| print(e) | |
| try: | |
| set0.get_replaced([d0, 1], [s0], 1, 1) | |
| except RuntimeError as e: | |
| # CHECK: Invalid expression when attempting to create an IntegerSet by replacing dimensions | |
| print(e) | |
| try: | |
| set0.get_replaced([d0, d1], [None], 1, 1) | |
| except RuntimeError as e: | |
| # CHECK: Invalid expression (None?) when attempting to create an IntegerSet by replacing symbols | |
| print(e) | |
| # CHECK-LABEL: TEST: testIntegerSetProperties | |
| @run | |
| def testIntegerSetProperties(): | |
| with Context(): | |
| d0 = AffineDimExpr.get(0) | |
| d1 = AffineDimExpr.get(1) | |
| s0 = AffineSymbolExpr.get(0) | |
| c42 = AffineConstantExpr.get(42) | |
| set0 = IntegerSet.get(2, 1, [d0 - d1, s0 - c42, s0 - d0], [True, False, False]) | |
| # CHECK: 2 | |
| print(set0.n_dims) | |
| # CHECK: 1 | |
| print(set0.n_symbols) | |
| # CHECK: 3 | |
| print(set0.n_inputs) | |
| # CHECK: 1 | |
| print(set0.n_equalities) | |
| # CHECK: 2 | |
| print(set0.n_inequalities) | |
| # CHECK: 3 | |
| print(len(set0.constraints)) | |
| # CHECK-DAG: d0 - d1 == 0 | |
| # CHECK-DAG: s0 - 42 >= 0 | |
| # CHECK-DAG: -d0 + s0 >= 0 | |
| for cstr in set0.constraints: | |
| print(cstr.expr, end="") | |
| print(" == 0" if cstr.is_eq else " >= 0") | |
| # TODO-LABEL: TEST: testHash | |
| @run | |
| def testHash(): | |
| with Context(): | |
| d0 = AffineDimExpr.get(0) | |
| d1 = AffineDimExpr.get(1) | |
| set = IntegerSet.get(2, 0, [d0 + d1], [True]) | |
| assert hash(set) == hash(IntegerSet.get(2, 0, [d0 + d1], [True])) | |
| dictionary = dict() | |
| dictionary[set] = 42 | |
| assert set in dictionary |