# 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 # CHECK-LABEL: TEST: testContextEnterExit def testContextEnterExit(): with Context() as ctx: assert Context.current is ctx try: _ = Context.current except ValueError as e: # CHECK: No current Context print(e) else: assert False, "Expected exception" run(testContextEnterExit) # CHECK-LABEL: TEST: testLocationEnterExit def testLocationEnterExit(): ctx1 = Context() with Location.unknown(ctx1) as loc1: assert Context.current is ctx1 assert Location.current is loc1 # Re-asserting the same context should not change the location. with ctx1: assert Context.current is ctx1 assert Location.current is loc1 # Asserting a different context should clear it. with Context() as ctx2: assert Context.current is ctx2 try: _ = Location.current except ValueError: pass else: assert False, "Expected exception" # And should restore. assert Context.current is ctx1 assert Location.current is loc1 # All should clear. try: _ = Location.current except ValueError as e: # CHECK: No current Location print(e) else: assert False, "Expected exception" run(testLocationEnterExit) # CHECK-LABEL: TEST: testInsertionPointEnterExit def testInsertionPointEnterExit(): ctx1 = Context() m = Module.create(Location.unknown(ctx1)) ip = InsertionPoint.at_block_terminator(m.body) with ip: assert InsertionPoint.current is ip # Asserting a location from the same context should preserve. with Location.unknown(ctx1) as loc1: assert InsertionPoint.current is ip assert Location.current is loc1 # Location should clear. try: _ = Location.current except ValueError: pass else: assert False, "Expected exception" # Asserting the same Context should preserve. with ctx1: assert InsertionPoint.current is ip # Asserting a different context should clear it. with Context() as ctx2: assert Context.current is ctx2 try: _ = InsertionPoint.current except ValueError: pass else: assert False, "Expected exception" # All should clear. try: _ = InsertionPoint.current except ValueError as e: # CHECK: No current InsertionPoint print(e) else: assert False, "Expected exception" run(testInsertionPointEnterExit)