package Ġworld . ph ant asm al . ps ol ib . asm Ċ Ċ import Ġworld . ph ant asm al . core . Success Ċ import Ġworld . ph ant asm al . ps ol ib . file Formats . quest . parse Bin Ċ import Ġworld . ph ant asm al . ps ol ib . file Formats . quest . parse Byte code Ċ import Ġworld . ph ant asm al . ps ol ib . file Formats . quest . write Byte code Ċ import Ġworld . ph ant asm al . ps ol ib . test . Lib TestSuite Ċ import Ġworld . ph ant asm al . ps ol ib . test . assert Deep Equals Ċ import Ġworld . ph ant asm al . ps ol ib . test . readFile Ċ import Ġworld . ph ant asm al . test Utils . assert Deep Equals Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠDis assembly Assembly Round Trip Tests Ġ: ĠLib TestSuite Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġassemb ling _ dis as semb led _ byte code _ should _ result _ in _ the _ same _ IR () Ġ= Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠ Ġassemb ling _ dis as semb led _ byte code _ should _ result _ in _ the _ same _ IR ( inline Stack Args Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġassemb ling _ dis as semb led _ byte code _ should _ result _ in _ the _ same _ IR _ inline _ args () Ġ= Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠ Ġassemb ling _ dis as semb led _ byte code _ should _ result _ in _ the _ same _ IR ( inline Stack Args Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġassemb ling _ dis as semb led _ byte code _ should _ result _ in _ the _ same _ IR ( ĊĠĠĠĠĠĠĠ Ġinline Stack Args : ĠBoolean , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbin Ġ= Ġparse Bin ( readFile ("/ quest 2 7 _ e _ de compressed . bin ")) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ir Ġ= Ġparse Byte code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin . byte code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin . label Offsets , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdc Gc Format Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen ient Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). unwrap () ĊĊĠĠĠĠĠĠĠ Ġval Ġassembly Result Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassemble ( dis assemble ( expected Ir , Ġinline Stack Args ), Ġinline Stack Args ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( assembly Result . problems . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( assembly Result Ġis ĠSuccess ) ĊĠĠĠĠĠĠĠ Ġassert Deep Equals ( expected Ir , Ġassembly Result . value , Ġignore Src Loc s Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdis as semb ling _ as semb led _ byte code _ should _ result _ in _ the _ same _ ASM () Ġ= Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠ Ġdis as semb ling _ as semb led _ byte code _ should _ result _ in _ the _ same _ ASM ( inline Stack Args Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdis as semb ling _ as semb led _ byte code _ should _ result _ in _ the _ same _ ASM _ inline _ args () Ġ= Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠ Ġdis as semb ling _ as semb led _ byte code _ should _ result _ in _ the _ same _ ASM ( inline Stack Args Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġdis as semb ling _ as semb led _ byte code _ should _ result _ in _ the _ same _ ASM ( ĊĠĠĠĠĠĠĠ Ġinline Stack Args : ĠBoolean , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbin Ġ= Ġparse Bin ( readFile ("/ quest 2 7 _ e _ de compressed . bin ")) ĊĠĠĠĠĠĠĠ Ġval Ġir Ġ= Ġparse Byte code ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin . byte code , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbin . label Offsets , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdc Gc Format Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlen ient Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġ). unwrap () ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Asm Ġ= Ġdis assemble ( ir , Ġinline Stack Args ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Asm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis assemble ( assemble ( expected Asm , Ġinline Stack Args ). unwrap (), Ġinline Stack Args ) ĊĊĠĠĠĠĠĠĠ Ġassert Deep Equals ( expected Asm , Ġactual Asm , Ġ:: assertEquals ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġassemb ling _ dis as semb led _ byte code _ without _ inline _ stack _ args _ results _ in _ the _ same _ byte code () Ġ= ĊĠĠĠĠĠĠĠ Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassemb ling _ dis as semb led _ byte code _ without _ inline _ stack _ args _ results _ in _ the _ same _ byte code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Stack Args Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġassemb ling _ dis as semb led _ byte code _ without _ inline _ stack _ args _ results _ in _ the _ same _ byte code _ inline _ args () Ġ= ĊĠĠĠĠĠĠĠ Ġtest Async Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassemb ling _ dis as semb led _ byte code _ without _ inline _ stack _ args _ results _ in _ the _ same _ byte code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Stack Args Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠParse Ġand Ġdis assemble ĠSe at Ġof Ġthe ĠHeart Ġbytecode , Ġassemble Ġthe ĠAS M Ġto ĠIR Ġand Ġwrite Ġthe ĠIR Ġto ĊĠĠĠĠ Ġ* Ġbytecode Ġagain , Ġthen Ġcheck Ġwhether Ġthe Ġoriginal Ġand Ġthe Ġnew Ġbytecode Ġare Ġbyte - for - byte Ġequal . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġassemb ling _ dis as semb led _ byte code _ without _ inline _ stack _ args _ results _ in _ the _ same _ byte code ( ĊĠĠĠĠĠĠĠ Ġinline Stack Args : ĠBoolean , ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorig Bin Ġ= Ġparse Bin ( readFile ("/ quest 2 7 _ e _ de compressed . bin ")) ĊĠĠĠĠĠĠĠ Ġval Ġorig Byte code Ġ= Ġorig Bin . byte code ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġassemble ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis assemble ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Byte code ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig Byte code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorig Bin . label Offsets , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdc Gc Format Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlen ient Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). unwrap (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinline Stack Args , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġinline Stack Args ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( result Ġis ĠSuccess ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . problems . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Byte code Ġ= Ġwrite Byte code ( result . value , Ġdc Gc Format Ġ= Ġfalse ). byte code ĊĊĠĠĠĠĠĠĠ Ġassert Deep Equals ( orig Byte code , Ġnew Byte code ) ĊĠĠĠ Ġ} Ċ } Ċ