// ĠIG NORE _ BACKEND : ĠJS _ IR Ċ // ĠIG NORE _ BACKEND : ĠJS Ċ // ĠCOMMON _ COR OUT IN ES _ TEST Ċ // ĠWITH _ RUNTIME Ċ // ĠWITH _ COR OUT IN ES Ċ // ĠCHECK _ BYTE CODE _ LIST ING Ċ import Ġhelpers .* Ċ import ĠCOR OUT IN ES _ PACKAGE .* Ċ import ĠCOR OUT IN ES _ PACKAGE . intr insics .* Ċ Ċ interface ĠSource Cross inline < out ĠE > Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġconsume ( sink : ĠS ink < E >) ĊĠĠĠ Ġcompanion Ġobject ĠFactory Ċ } Ċ Ċ interface ĠS ink < in ĠE > Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġsend ( item : ĠE ) ĊĠĠĠ Ġfun Ġclose ( cause : ĠThrowable ?) Ċ } Ċ Ċ inline Ġfun Ġ< E > Ġsource ( cross inline Ġaction : Ġsuspend ĠS ink < E >. () Ġ-> ĠUnit ): ĠSource Cross inline < E > Ġ= Ġobject Ġ: ĠSource Cross inline < E > Ġ{ ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġconsume ( sink : ĠS ink < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcause : ĠThrowable ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( sink ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcause Ġ= Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsink . close ( cause ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠSource Cross inline . Factory . range ( start : ĠInt , Ġcount : ĠInt ): ĠSource Cross inline < Int > Ġ= Ġsource < Int > Ġ{ ĊĠĠĠ Ġfor Ġ( i Ġin Ġstart Ġuntil Ġ( start Ġ+ Ġcount )) Ġ{ ĊĠĠĠĠĠĠĠ Ġsend ( i ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< E > ĠSource Cross inline < E >. consume Each ( cross inline Ġaction : Ġsuspend Ġ( E ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġconsume ( object Ġ: ĠS ink < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġsend ( item : ĠE ) Ġ= Ġaction ( item ) ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġclose ( cause : ĠThrowable ?) Ġ{ Ġcause ?. let Ġ{ Ġthrow Ġit Ġ} Ġ} ĊĠĠĠ Ġ}) Ċ } Ċ Ċ suspend Ġinline Ġfun Ġ< E , ĠR > ĠSource Cross inline < E >. fold ( initial : ĠR , Ġcross inline Ġoperation : Ġsuspend Ġ( acc : ĠR , ĠE ) Ġ-> ĠR ): ĠR Ġ{ ĊĠĠĠ Ġvar Ġacc Ġ= Ġinitial ĊĠĠĠ Ġconsume Each Ġ{ ĊĠĠĠĠĠĠĠ Ġacc Ġ= Ġoperation ( acc , Ġit ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġacc Ċ } Ċ Ċ inline Ġfun Ġ< E > ĠSource Cross inline < E >. filter ( cross inline Ġpredicate : Ġ( E ) Ġ-> ĠBoolean ) Ġ= Ġsource < E > Ġ{ ĊĠĠĠ Ġconsume Each Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( predicate ( it )) Ġsend ( it ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġbuilder ( c : Ġsuspend Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġc . start Coroutine ( Empty Continuation ) Ċ } Ċ Ċ fun ĠInt . is Good () Ġ= Ġthis Ġ% Ġ 4 Ġ== Ġ 0 Ċ Ċ fun Ġbox (): ĠString Ġ{ ĊĠĠĠ Ġvar Ġres Ġ= Ġ 0 ĊĠĠĠ Ġbuilder Ġ{ ĊĠĠĠĠĠĠĠ Ġres Ġ= ĠSource Cross inline ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. range ( 1 , Ġ 1 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . is Good () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fold ( 0 , Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( res Ġ!= Ġ 1 2 ) Ġreturn Ġ" FAIL " ĊĠĠĠ Ġreturn Ġ" OK " Ċ }