package Ġarrow . fx . coroutines Ċ Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġio . kot est . matchers . types . shouldBe InstanceOf Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlin . time . Experimental Time Ċ import Ġkotlin . time . seconds Ċ Ċ @ Experimental Time Ċ class ĠCancel Boundary Ġ: ĠString Spec ({ ĊĊĠ Ġsuspend Ġfun Ġforever (): ĠUnit Ġ{ ĊĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠ Ġcancel Boundary () Ġ// Ġcancell able Ġcomputation Ġloop ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ" end less Ġloop Ġcan Ġbe Ġcancelled Ġif Ġit Ġincludes Ġa Ġboundary " Ġ{ ĊĠĠĠ Ġval Ġl atch Ġ= ĠPromise < Unit >() ĊĠĠĠ Ġval Ġexit Ġ= ĠPromise < Exit Case >() ĊĠĠĠ Ġval Ġf Ġ= ĠFork Connected Ġ{ ĊĠĠĠĠĠ Ġguarantee Case ( ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġl atch . complete ( Unit ) ĊĠĠĠĠĠĠĠĠĠ Ġforever () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġ{ Ġec Ġ-> Ġexit . complete ( ec ) Ġ} ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġl atch . get () ĊĠĠĠ Ġf . cancel () ĊĠĠĠ Ġexit . get (). shouldBe InstanceOf < Exit Case . Cancelled >() ĊĠĠĠ Ġdelay ( 1 . seconds ) ĊĠ Ġ} Ċ }) Ċ