package Ġworld . ph ant asm al . ps ol ib . asm Ċ Ċ import Ġworld . ph ant asm al . ps ol ib . test . Lib TestSuite Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠOpcode Tests Ġ: ĠLib TestSuite Ġ{ ĊĠĠĠ Ġ// ĠWe Ġdo Ġthese Ġchecks Ġin Ġa Ġunit Ġtest Ġinstead Ġof Ġin Ġthe ĠOpcode Ġconstructor Ġto Ġavoid Ġthe Ġruntime ĊĠĠĠ Ġ// Ġoverhead . ĠThis Ġis Ġstatic Ġdata Ġthat Ġis Ġbuilt Ġup Ġonce Ġand Ġonly Ġneeds Ġto Ġbe Ġverified Ġonce . ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġall _ op codes _ are _ consistent () Ġ= Ġtest Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( code Ġin Ġ( 0 x 0 0 .. 0 xFF ). as Sequence () Ġ+ Ġ( 0 xF 8 0 0 .. 0 xF 8 FF ) Ġ+ Ġ( 0 xF 9 0 0 .. 0 xF 9 FF )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġopcode Ġ= Ġcode To Opcode ( code ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( code , Ġopcode . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( opcode . mn emonic . isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( opcode . doc Ġ== Ġnull Ġ|| Ġopcode . doc !!. isNotBlank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġan Ġop codes Ġp ushes Ġsomething Ġonto Ġthe Ġstack , Ġit Ġneeds Ġat Ġleast Ġone Ġimmediate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġargument . ĠIf Ġan Ġopcode Ġp ops Ġthe Ġstack , Ġit Ġneeds Ġat Ġleast Ġone Ġstack Ġargument . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( opcode . stack Ġ== Ġnull Ġ|| Ġopcode . params . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠVar args . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvar arg Count Ġ= Ġopcode . params . count Ġ{ Ġit . var args Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas Var args Ġ= Ġvar arg Count Ġ>= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOnly Ġthe Ġlast Ġparameter Ġcan Ġbe Ġvari adic . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( var arg Count Ġ<= Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (! has Var args Ġ|| Ġopcode . params . last OrNull ()?. var args Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( has Var args , Ġopcode . var args ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( param Ġin Ġopcode . params ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġparam . type ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAny Ġshould Ġonly Ġbe Ġused Ġwith Ġregister Ġparameters . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Not Equals ( Any Type . Instance , Ġtype ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRegister Ġreferences . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( type Ġis ĠReg Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġregisters Ġ= Ġtype . registers ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( registers Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( param . read Ġ|| Ġparam . write ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( registers . isNotEmpty ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( register Ġin Ġregisters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( register . read Ġ|| Ġregister . write ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ