19f3f6d7bSStella Laurenzo# RUN: %PYTHON %s | FileCheck %s
29f3f6d7bSStella Laurenzo
39f3f6d7bSStella Laurenzoimport gc
49f3f6d7bSStella Laurenzofrom mlir.ir import *
59f3f6d7bSStella Laurenzo
69f3f6d7bSStella Laurenzodef run(f):
79f3f6d7bSStella Laurenzo  print("\nTEST:", f.__name__)
89f3f6d7bSStella Laurenzo  f()
99f3f6d7bSStella Laurenzo  gc.collect()
109f3f6d7bSStella Laurenzo  assert Context._get_live_count() == 0
1178f2dae0SAlex Zinenko  return f
129f3f6d7bSStella Laurenzo
139f3f6d7bSStella Laurenzo
149f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprCapsule
1578f2dae0SAlex Zinenko@run
169f3f6d7bSStella Laurenzodef testAffineExprCapsule():
179f3f6d7bSStella Laurenzo  with Context() as ctx:
189f3f6d7bSStella Laurenzo    affine_expr = AffineExpr.get_constant(42)
199f3f6d7bSStella Laurenzo
209f3f6d7bSStella Laurenzo  affine_expr_capsule = affine_expr._CAPIPtr
219f3f6d7bSStella Laurenzo  # CHECK: capsule object
229f3f6d7bSStella Laurenzo  # CHECK: mlir.ir.AffineExpr._CAPIPtr
239f3f6d7bSStella Laurenzo  print(affine_expr_capsule)
249f3f6d7bSStella Laurenzo
259f3f6d7bSStella Laurenzo  affine_expr_2 = AffineExpr._CAPICreate(affine_expr_capsule)
269f3f6d7bSStella Laurenzo  assert affine_expr == affine_expr_2
279f3f6d7bSStella Laurenzo  assert affine_expr_2.context == ctx
289f3f6d7bSStella Laurenzo
299f3f6d7bSStella Laurenzo
309f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprEq
3178f2dae0SAlex Zinenko@run
329f3f6d7bSStella Laurenzodef testAffineExprEq():
339f3f6d7bSStella Laurenzo  with Context():
349f3f6d7bSStella Laurenzo    a1 = AffineExpr.get_constant(42)
359f3f6d7bSStella Laurenzo    a2 = AffineExpr.get_constant(42)
369f3f6d7bSStella Laurenzo    a3 = AffineExpr.get_constant(43)
379f3f6d7bSStella Laurenzo    # CHECK: True
389f3f6d7bSStella Laurenzo    print(a1 == a1)
399f3f6d7bSStella Laurenzo    # CHECK: True
409f3f6d7bSStella Laurenzo    print(a1 == a2)
419f3f6d7bSStella Laurenzo    # CHECK: False
429f3f6d7bSStella Laurenzo    print(a1 == a3)
439f3f6d7bSStella Laurenzo    # CHECK: False
449f3f6d7bSStella Laurenzo    print(a1 == None)
459f3f6d7bSStella Laurenzo    # CHECK: False
469f3f6d7bSStella Laurenzo    print(a1 == "foo")
479f3f6d7bSStella Laurenzo
489f3f6d7bSStella Laurenzo
499f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprContext
5078f2dae0SAlex Zinenko@run
519f3f6d7bSStella Laurenzodef testAffineExprContext():
529f3f6d7bSStella Laurenzo  with Context():
539f3f6d7bSStella Laurenzo    a1 = AffineExpr.get_constant(42)
549f3f6d7bSStella Laurenzo  with Context():
559f3f6d7bSStella Laurenzo    a2 = AffineExpr.get_constant(42)
569f3f6d7bSStella Laurenzo
579f3f6d7bSStella Laurenzo  # CHECK: False
589f3f6d7bSStella Laurenzo  print(a1 == a2)
599f3f6d7bSStella Laurenzo
609f3f6d7bSStella Laurenzorun(testAffineExprContext)
619f3f6d7bSStella Laurenzo
629f3f6d7bSStella Laurenzo
639f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprConstant
6478f2dae0SAlex Zinenko@run
659f3f6d7bSStella Laurenzodef testAffineExprConstant():
669f3f6d7bSStella Laurenzo  with Context():
679f3f6d7bSStella Laurenzo    a1 = AffineExpr.get_constant(42)
689f3f6d7bSStella Laurenzo    # CHECK: 42
699f3f6d7bSStella Laurenzo    print(a1.value)
709f3f6d7bSStella Laurenzo    # CHECK: 42
719f3f6d7bSStella Laurenzo    print(a1)
729f3f6d7bSStella Laurenzo
739f3f6d7bSStella Laurenzo    a2 = AffineConstantExpr.get(42)
749f3f6d7bSStella Laurenzo    # CHECK: 42
759f3f6d7bSStella Laurenzo    print(a2.value)
769f3f6d7bSStella Laurenzo    # CHECK: 42
779f3f6d7bSStella Laurenzo    print(a2)
789f3f6d7bSStella Laurenzo
799f3f6d7bSStella Laurenzo    assert a1 == a2
809f3f6d7bSStella Laurenzo
819f3f6d7bSStella Laurenzo
829f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprDim
8378f2dae0SAlex Zinenko@run
849f3f6d7bSStella Laurenzodef testAffineExprDim():
859f3f6d7bSStella Laurenzo  with Context():
869f3f6d7bSStella Laurenzo    d1 = AffineExpr.get_dim(1)
879f3f6d7bSStella Laurenzo    d11 = AffineDimExpr.get(1)
889f3f6d7bSStella Laurenzo    d2 = AffineDimExpr.get(2)
899f3f6d7bSStella Laurenzo
909f3f6d7bSStella Laurenzo    # CHECK: 1
919f3f6d7bSStella Laurenzo    print(d1.position)
929f3f6d7bSStella Laurenzo    # CHECK: d1
939f3f6d7bSStella Laurenzo    print(d1)
949f3f6d7bSStella Laurenzo
959f3f6d7bSStella Laurenzo    # CHECK: 2
969f3f6d7bSStella Laurenzo    print(d2.position)
979f3f6d7bSStella Laurenzo    # CHECK: d2
989f3f6d7bSStella Laurenzo    print(d2)
999f3f6d7bSStella Laurenzo
1009f3f6d7bSStella Laurenzo    assert d1 == d11
1019f3f6d7bSStella Laurenzo    assert d1 != d2
1029f3f6d7bSStella Laurenzo
1039f3f6d7bSStella Laurenzo
1049f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprSymbol
10578f2dae0SAlex Zinenko@run
1069f3f6d7bSStella Laurenzodef testAffineExprSymbol():
1079f3f6d7bSStella Laurenzo  with Context():
1089f3f6d7bSStella Laurenzo    s1 = AffineExpr.get_symbol(1)
1099f3f6d7bSStella Laurenzo    s11 = AffineSymbolExpr.get(1)
1109f3f6d7bSStella Laurenzo    s2 = AffineSymbolExpr.get(2)
1119f3f6d7bSStella Laurenzo
1129f3f6d7bSStella Laurenzo    # CHECK: 1
1139f3f6d7bSStella Laurenzo    print(s1.position)
1149f3f6d7bSStella Laurenzo    # CHECK: s1
1159f3f6d7bSStella Laurenzo    print(s1)
1169f3f6d7bSStella Laurenzo
1179f3f6d7bSStella Laurenzo    # CHECK: 2
1189f3f6d7bSStella Laurenzo    print(s2.position)
1199f3f6d7bSStella Laurenzo    # CHEKC: s2
1209f3f6d7bSStella Laurenzo    print(s2)
1219f3f6d7bSStella Laurenzo
1229f3f6d7bSStella Laurenzo    assert s1 == s11
1239f3f6d7bSStella Laurenzo    assert s1 != s2
1249f3f6d7bSStella Laurenzo
1259f3f6d7bSStella Laurenzo
1269f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineAddExpr
12778f2dae0SAlex Zinenko@run
1289f3f6d7bSStella Laurenzodef testAffineAddExpr():
1299f3f6d7bSStella Laurenzo  with Context():
1309f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
1319f3f6d7bSStella Laurenzo    d2 = AffineDimExpr.get(2)
1329f3f6d7bSStella Laurenzo    d12 = AffineExpr.get_add(d1, d2)
1339f3f6d7bSStella Laurenzo    # CHECK: d1 + d2
1349f3f6d7bSStella Laurenzo    print(d12)
1359f3f6d7bSStella Laurenzo
1369f3f6d7bSStella Laurenzo    d12op = d1 + d2
1379f3f6d7bSStella Laurenzo    # CHECK: d1 + d2
1389f3f6d7bSStella Laurenzo    print(d12op)
1399f3f6d7bSStella Laurenzo
140*fc7594ccSAlex Zinenko    d1cst_op = d1 + 2
141*fc7594ccSAlex Zinenko    # CHECK: d1 + 2
142*fc7594ccSAlex Zinenko    print(d1cst_op)
143*fc7594ccSAlex Zinenko
144*fc7594ccSAlex Zinenko    d1cst_op2 = 2 + d1
145*fc7594ccSAlex Zinenko    # CHECK: d1 + 2
146*fc7594ccSAlex Zinenko    print(d1cst_op2)
147*fc7594ccSAlex Zinenko
1489f3f6d7bSStella Laurenzo    assert d12 == d12op
1499f3f6d7bSStella Laurenzo    assert d12.lhs == d1
1509f3f6d7bSStella Laurenzo    assert d12.rhs == d2
1519f3f6d7bSStella Laurenzo
1529f3f6d7bSStella Laurenzo
1539f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineMulExpr
15478f2dae0SAlex Zinenko@run
1559f3f6d7bSStella Laurenzodef testAffineMulExpr():
1569f3f6d7bSStella Laurenzo  with Context():
1579f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
1589f3f6d7bSStella Laurenzo    c2 = AffineConstantExpr.get(2)
1599f3f6d7bSStella Laurenzo    expr = AffineExpr.get_mul(d1, c2)
1609f3f6d7bSStella Laurenzo    # CHECK: d1 * 2
1619f3f6d7bSStella Laurenzo    print(expr)
1629f3f6d7bSStella Laurenzo
1639f3f6d7bSStella Laurenzo    # CHECK: d1 * 2
1649f3f6d7bSStella Laurenzo    op = d1 * c2
1659f3f6d7bSStella Laurenzo    print(op)
1669f3f6d7bSStella Laurenzo
167*fc7594ccSAlex Zinenko    # CHECK: d1 * 2
168*fc7594ccSAlex Zinenko    op_cst = d1 * 2
169*fc7594ccSAlex Zinenko    print(op_cst)
170*fc7594ccSAlex Zinenko
171*fc7594ccSAlex Zinenko    # CHECK: d1 * 2
172*fc7594ccSAlex Zinenko    op_cst2 = 2 * d1
173*fc7594ccSAlex Zinenko    print(op_cst2)
174*fc7594ccSAlex Zinenko
1759f3f6d7bSStella Laurenzo    assert expr == op
176*fc7594ccSAlex Zinenko    assert expr == op_cst
1779f3f6d7bSStella Laurenzo    assert expr.lhs == d1
1789f3f6d7bSStella Laurenzo    assert expr.rhs == c2
1799f3f6d7bSStella Laurenzo
1809f3f6d7bSStella Laurenzo
1819f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineModExpr
18278f2dae0SAlex Zinenko@run
1839f3f6d7bSStella Laurenzodef testAffineModExpr():
1849f3f6d7bSStella Laurenzo  with Context():
1859f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
1869f3f6d7bSStella Laurenzo    c2 = AffineConstantExpr.get(2)
1879f3f6d7bSStella Laurenzo    expr = AffineExpr.get_mod(d1, c2)
1889f3f6d7bSStella Laurenzo    # CHECK: d1 mod 2
1899f3f6d7bSStella Laurenzo    print(expr)
1909f3f6d7bSStella Laurenzo
1919f3f6d7bSStella Laurenzo    # CHECK: d1 mod 2
1929f3f6d7bSStella Laurenzo    op = d1 % c2
1939f3f6d7bSStella Laurenzo    print(op)
1949f3f6d7bSStella Laurenzo
195*fc7594ccSAlex Zinenko    # CHECK: d1 mod 2
196*fc7594ccSAlex Zinenko    op_cst = d1 % 2
197*fc7594ccSAlex Zinenko    print(op_cst)
198*fc7594ccSAlex Zinenko
199*fc7594ccSAlex Zinenko    # CHECK: 2 mod d1
200*fc7594ccSAlex Zinenko    print(2 % d1)
201*fc7594ccSAlex Zinenko
2029f3f6d7bSStella Laurenzo    assert expr == op
203*fc7594ccSAlex Zinenko    assert expr == op_cst
2049f3f6d7bSStella Laurenzo    assert expr.lhs == d1
2059f3f6d7bSStella Laurenzo    assert expr.rhs == c2
2069f3f6d7bSStella Laurenzo
207*fc7594ccSAlex Zinenko    expr2 = AffineExpr.get_mod(c2, d1)
208*fc7594ccSAlex Zinenko    expr3 = AffineExpr.get_mod(2, d1)
209*fc7594ccSAlex Zinenko    expr4 = AffineExpr.get_mod(d1, 2)
210*fc7594ccSAlex Zinenko
211*fc7594ccSAlex Zinenko    # CHECK: 2 mod d1
212*fc7594ccSAlex Zinenko    print(expr2)
213*fc7594ccSAlex Zinenko    # CHECK: 2 mod d1
214*fc7594ccSAlex Zinenko    print(expr3)
215*fc7594ccSAlex Zinenko    # CHECK: d1 mod 2
216*fc7594ccSAlex Zinenko    print(expr4)
217*fc7594ccSAlex Zinenko
218*fc7594ccSAlex Zinenko    assert expr2 == expr3
219*fc7594ccSAlex Zinenko    assert expr4 == expr
220*fc7594ccSAlex Zinenko
2219f3f6d7bSStella Laurenzo
2229f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineFloorDivExpr
22378f2dae0SAlex Zinenko@run
2249f3f6d7bSStella Laurenzodef testAffineFloorDivExpr():
2259f3f6d7bSStella Laurenzo  with Context():
2269f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
2279f3f6d7bSStella Laurenzo    c2 = AffineConstantExpr.get(2)
2289f3f6d7bSStella Laurenzo    expr = AffineExpr.get_floor_div(d1, c2)
2299f3f6d7bSStella Laurenzo    # CHECK: d1 floordiv 2
2309f3f6d7bSStella Laurenzo    print(expr)
2319f3f6d7bSStella Laurenzo
2329f3f6d7bSStella Laurenzo    assert expr.lhs == d1
2339f3f6d7bSStella Laurenzo    assert expr.rhs == c2
2349f3f6d7bSStella Laurenzo
235*fc7594ccSAlex Zinenko    expr2 = AffineExpr.get_floor_div(c2, d1)
236*fc7594ccSAlex Zinenko    expr3 = AffineExpr.get_floor_div(2, d1)
237*fc7594ccSAlex Zinenko    expr4 = AffineExpr.get_floor_div(d1, 2)
238*fc7594ccSAlex Zinenko
239*fc7594ccSAlex Zinenko    # CHECK: 2 floordiv d1
240*fc7594ccSAlex Zinenko    print(expr2)
241*fc7594ccSAlex Zinenko    # CHECK: 2 floordiv d1
242*fc7594ccSAlex Zinenko    print(expr3)
243*fc7594ccSAlex Zinenko    # CHECK: d1 floordiv 2
244*fc7594ccSAlex Zinenko    print(expr4)
245*fc7594ccSAlex Zinenko
246*fc7594ccSAlex Zinenko    assert expr2 == expr3
247*fc7594ccSAlex Zinenko    assert expr4 == expr
248*fc7594ccSAlex Zinenko
2499f3f6d7bSStella Laurenzo
2509f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineCeilDivExpr
25178f2dae0SAlex Zinenko@run
2529f3f6d7bSStella Laurenzodef testAffineCeilDivExpr():
2539f3f6d7bSStella Laurenzo  with Context():
2549f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
2559f3f6d7bSStella Laurenzo    c2 = AffineConstantExpr.get(2)
2569f3f6d7bSStella Laurenzo    expr = AffineExpr.get_ceil_div(d1, c2)
2579f3f6d7bSStella Laurenzo    # CHECK: d1 ceildiv 2
2589f3f6d7bSStella Laurenzo    print(expr)
2599f3f6d7bSStella Laurenzo
2609f3f6d7bSStella Laurenzo    assert expr.lhs == d1
2619f3f6d7bSStella Laurenzo    assert expr.rhs == c2
2629f3f6d7bSStella Laurenzo
263*fc7594ccSAlex Zinenko    expr2 = AffineExpr.get_ceil_div(c2, d1)
264*fc7594ccSAlex Zinenko    expr3 = AffineExpr.get_ceil_div(2, d1)
265*fc7594ccSAlex Zinenko    expr4 = AffineExpr.get_ceil_div(d1, 2)
266*fc7594ccSAlex Zinenko
267*fc7594ccSAlex Zinenko    # CHECK: 2 ceildiv d1
268*fc7594ccSAlex Zinenko    print(expr2)
269*fc7594ccSAlex Zinenko    # CHECK: 2 ceildiv d1
270*fc7594ccSAlex Zinenko    print(expr3)
271*fc7594ccSAlex Zinenko    # CHECK: d1 ceildiv 2
272*fc7594ccSAlex Zinenko    print(expr4)
273*fc7594ccSAlex Zinenko
274*fc7594ccSAlex Zinenko    assert expr2 == expr3
275*fc7594ccSAlex Zinenko    assert expr4 == expr
276*fc7594ccSAlex Zinenko
2779f3f6d7bSStella Laurenzo
2789f3f6d7bSStella Laurenzo# CHECK-LABEL: TEST: testAffineExprSub
27978f2dae0SAlex Zinenko@run
2809f3f6d7bSStella Laurenzodef testAffineExprSub():
2819f3f6d7bSStella Laurenzo  with Context():
2829f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
2839f3f6d7bSStella Laurenzo    d2 = AffineDimExpr.get(2)
2849f3f6d7bSStella Laurenzo    expr = d1 - d2
2859f3f6d7bSStella Laurenzo    # CHECK: d1 - d2
2869f3f6d7bSStella Laurenzo    print(expr)
2879f3f6d7bSStella Laurenzo
2889f3f6d7bSStella Laurenzo    assert expr.lhs == d1
2899f3f6d7bSStella Laurenzo    rhs = AffineMulExpr(expr.rhs)
2909f3f6d7bSStella Laurenzo    # CHECK: d2
2919f3f6d7bSStella Laurenzo    print(rhs.lhs)
2929f3f6d7bSStella Laurenzo    # CHECK: -1
2939f3f6d7bSStella Laurenzo    print(rhs.rhs)
2949f3f6d7bSStella Laurenzo
295*fc7594ccSAlex Zinenko    # CHECK: d1 - 42
296*fc7594ccSAlex Zinenko    print(d1 - 42)
297*fc7594ccSAlex Zinenko    # CHECK: -d1 + 42
298*fc7594ccSAlex Zinenko    print(42 - d1)
299*fc7594ccSAlex Zinenko
300*fc7594ccSAlex Zinenko    c42 = AffineConstantExpr.get(42)
301*fc7594ccSAlex Zinenko    assert d1 - 42 == d1 - c42
302*fc7594ccSAlex Zinenko    assert 42 - d1 == c42 - d1
303*fc7594ccSAlex Zinenko
30478f2dae0SAlex Zinenko# CHECK-LABEL: TEST: testClassHierarchy
30578f2dae0SAlex Zinenko@run
3069f3f6d7bSStella Laurenzodef testClassHierarchy():
3079f3f6d7bSStella Laurenzo  with Context():
3089f3f6d7bSStella Laurenzo    d1 = AffineDimExpr.get(1)
3099f3f6d7bSStella Laurenzo    c2 = AffineConstantExpr.get(2)
3109f3f6d7bSStella Laurenzo    add = AffineAddExpr.get(d1, c2)
3119f3f6d7bSStella Laurenzo    mul = AffineMulExpr.get(d1, c2)
3129f3f6d7bSStella Laurenzo    mod = AffineModExpr.get(d1, c2)
3139f3f6d7bSStella Laurenzo    floor_div = AffineFloorDivExpr.get(d1, c2)
3149f3f6d7bSStella Laurenzo    ceil_div = AffineCeilDivExpr.get(d1, c2)
3159f3f6d7bSStella Laurenzo
3169f3f6d7bSStella Laurenzo    # CHECK: False
3179f3f6d7bSStella Laurenzo    print(isinstance(d1, AffineBinaryExpr))
3189f3f6d7bSStella Laurenzo    # CHECK: False
3199f3f6d7bSStella Laurenzo    print(isinstance(c2, AffineBinaryExpr))
3209f3f6d7bSStella Laurenzo    # CHECK: True
3219f3f6d7bSStella Laurenzo    print(isinstance(add, AffineBinaryExpr))
3229f3f6d7bSStella Laurenzo    # CHECK: True
3239f3f6d7bSStella Laurenzo    print(isinstance(mul, AffineBinaryExpr))
3249f3f6d7bSStella Laurenzo    # CHECK: True
3259f3f6d7bSStella Laurenzo    print(isinstance(mod, AffineBinaryExpr))
3269f3f6d7bSStella Laurenzo    # CHECK: True
3279f3f6d7bSStella Laurenzo    print(isinstance(floor_div, AffineBinaryExpr))
3289f3f6d7bSStella Laurenzo    # CHECK: True
3299f3f6d7bSStella Laurenzo    print(isinstance(ceil_div, AffineBinaryExpr))
3309f3f6d7bSStella Laurenzo
3319f3f6d7bSStella Laurenzo    try:
3329f3f6d7bSStella Laurenzo      AffineBinaryExpr(d1)
3339f3f6d7bSStella Laurenzo    except ValueError as e:
3349f3f6d7bSStella Laurenzo      # CHECK: Cannot cast affine expression to AffineBinaryExpr
3359f3f6d7bSStella Laurenzo      print(e)
3369f3f6d7bSStella Laurenzo
3379f3f6d7bSStella Laurenzo    try:
3389f3f6d7bSStella Laurenzo      AffineBinaryExpr(c2)
3399f3f6d7bSStella Laurenzo    except ValueError as e:
3409f3f6d7bSStella Laurenzo      # CHECK: Cannot cast affine expression to AffineBinaryExpr
3419f3f6d7bSStella Laurenzo      print(e)
3429f3f6d7bSStella Laurenzo
34378f2dae0SAlex Zinenko# CHECK-LABEL: TEST: testIsInstance
34478f2dae0SAlex Zinenko@run
34578f2dae0SAlex Zinenkodef testIsInstance():
34678f2dae0SAlex Zinenko  with Context():
34778f2dae0SAlex Zinenko    d1 = AffineDimExpr.get(1)
34878f2dae0SAlex Zinenko    c2 = AffineConstantExpr.get(2)
34978f2dae0SAlex Zinenko    add = AffineAddExpr.get(d1, c2)
35078f2dae0SAlex Zinenko    mul = AffineMulExpr.get(d1, c2)
35178f2dae0SAlex Zinenko
35278f2dae0SAlex Zinenko    # CHECK: True
35378f2dae0SAlex Zinenko    print(AffineDimExpr.isinstance(d1))
35478f2dae0SAlex Zinenko    # CHECK: False
35578f2dae0SAlex Zinenko    print(AffineConstantExpr.isinstance(d1))
35678f2dae0SAlex Zinenko    # CHECK: True
35778f2dae0SAlex Zinenko    print(AffineConstantExpr.isinstance(c2))
35878f2dae0SAlex Zinenko    # CHECK: False
35978f2dae0SAlex Zinenko    print(AffineMulExpr.isinstance(c2))
36078f2dae0SAlex Zinenko    # CHECK: True
36178f2dae0SAlex Zinenko    print(AffineAddExpr.isinstance(add))
36278f2dae0SAlex Zinenko    # CHECK: False
36378f2dae0SAlex Zinenko    print(AffineMulExpr.isinstance(add))
36478f2dae0SAlex Zinenko    # CHECK: True
36578f2dae0SAlex Zinenko    print(AffineMulExpr.isinstance(mul))
36678f2dae0SAlex Zinenko    # CHECK: False
36778f2dae0SAlex Zinenko    print(AffineAddExpr.isinstance(mul))
368*fc7594ccSAlex Zinenko
369*fc7594ccSAlex Zinenko
370*fc7594ccSAlex Zinenko# CHECK-LABEL: TEST: testCompose
371*fc7594ccSAlex Zinenko@run
372*fc7594ccSAlex Zinenkodef testCompose():
373*fc7594ccSAlex Zinenko  with Context():
374*fc7594ccSAlex Zinenko    # d0 + d2.
375*fc7594ccSAlex Zinenko    expr = AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(2))
376*fc7594ccSAlex Zinenko
377*fc7594ccSAlex Zinenko    # (d0, d1, d2)[s0, s1] -> (d0 + s1, d1 + s0, d0 + d1 + d2)
378*fc7594ccSAlex Zinenko    map1 = AffineAddExpr.get(AffineDimExpr.get(0), AffineSymbolExpr.get(1))
379*fc7594ccSAlex Zinenko    map2 = AffineAddExpr.get(AffineDimExpr.get(1), AffineSymbolExpr.get(0))
380*fc7594ccSAlex Zinenko    map3 = AffineAddExpr.get(
381*fc7594ccSAlex Zinenko        AffineAddExpr.get(AffineDimExpr.get(0), AffineDimExpr.get(1)),
382*fc7594ccSAlex Zinenko        AffineDimExpr.get(2))
383*fc7594ccSAlex Zinenko    map = AffineMap.get(3, 2, [map1, map2, map3])
384*fc7594ccSAlex Zinenko
385*fc7594ccSAlex Zinenko    # CHECK: d0 + s1 + d0 + d1 + d2
386*fc7594ccSAlex Zinenko    print(expr.compose(map))
387*fc7594ccSAlex Zinenko
388*fc7594ccSAlex Zinenko
389*fc7594ccSAlex Zinenko# CHECK-LABEL: TEST: testHash
390*fc7594ccSAlex Zinenko@run
391*fc7594ccSAlex Zinenkodef testHash():
392*fc7594ccSAlex Zinenko  with Context():
393*fc7594ccSAlex Zinenko    d0 = AffineDimExpr.get(0)
394*fc7594ccSAlex Zinenko    s1 = AffineSymbolExpr.get(1)
395*fc7594ccSAlex Zinenko    assert hash(d0) == hash(AffineDimExpr.get(0))
396*fc7594ccSAlex Zinenko    assert hash(d0 + s1) == hash(AffineAddExpr.get(d0, s1))
397*fc7594ccSAlex Zinenko
398*fc7594ccSAlex Zinenko    dictionary = dict()
399*fc7594ccSAlex Zinenko    dictionary[d0] = 0
400*fc7594ccSAlex Zinenko    dictionary[s1] = 1
401*fc7594ccSAlex Zinenko    assert d0 in dictionary
402*fc7594ccSAlex Zinenko    assert s1 in dictionary
403