package Ġkotlin mud . mob Ċ Ċ import Ġassert k . assertThat Ċ import Ġassert k . assertions . has Size Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġassert k . assertions . is GreaterThan OrEqualTo Ċ import Ġassert k . assertions . is LessThan Ċ import Ġassert k . assertions . is LessThan OrEqualTo Ċ import Ġkotlin mud . a ffect . factory . create A ffect Ċ import Ġkotlin mud . a ffect . type . A ffect Type Ċ import Ġkotlin mud . attributes . constant . starting Hp Ċ import Ġkotlin mud . attributes . type . Attribute Ċ import Ġkotlin mud . item . type . ItemType Ċ import Ġkotlin mud . item . type . Material Ċ import Ġkotlin mud . item . type . Position Ċ import Ġkotlin mud . mob . fight . type . Damage Type Ċ import Ġkotlin mud . mob . race . impl . E lf Ċ import Ġkotlin mud . mob . race . impl . Fa er ie Ċ import Ġkotlin mud . mob . race . impl . G ob lin Ċ import Ġkotlin mud . mob . race . impl . O gre Ċ import Ġkotlin mud . mob . special ization . impl . C ler ic Ċ import Ġkotlin mud . mob . special ization . impl . M age Ċ import Ġkotlin mud . mob . type . Currency Type Ċ import Ġkotlin mud . mob . type . Disposition Ċ import Ġkotlin mud . test . helper . create Test Service Ċ import Ġkotlin mud . test . model . Probability Test Ċ import Ġorg . junit . Test Ċ import Ġkotlin . math . round ToInt Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠMob Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Equipment In creases Attributes () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġmob Ġ= Ġtest Service . create Mob () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġinitial Hp Ġ= Ġmob . calc ( Attribute . HP ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Man a Ġ= Ġmob . calc ( Attribute . MAN A ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Mv Ġ= Ġmob . calc ( Attribute . MV ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Stat Ġ= Ġmob . calc ( Attribute . STR ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Hit Ġ= Ġmob . calc ( Attribute . HIT ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial D am Ġ= Ġmob . calc ( Attribute . D AM ) ĊĠĠĠĠĠĠĠ Ġval Ġinitial Ac Ġ= Ġmob . calc ( Attribute . AC _ BASH ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġtest Service . create Item Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠItem Type . EQ U IP MENT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . material Ġ= ĠMaterial . IRON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . attributes Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . HP , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . MAN A , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . MV , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . STR , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . INT , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . W IS , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . DEX , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . CON , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . HIT , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . D AM , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . AC _ BASH , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . AC _ SL ASH , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . AC _ PI ER CE , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . AC _ MAGIC , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġmob . equ ipped . add ( item ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Hp Ġ+ Ġ 1 , Ġmob . calc ( Attribute . HP )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Man a Ġ+ Ġ 1 , Ġmob . calc ( Attribute . MAN A )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Mv Ġ+ Ġ 1 , Ġmob . calc ( Attribute . MV )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Stat Ġ+ Ġ 1 , Ġmob . calc ( Attribute . STR )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Stat Ġ+ Ġ 1 , Ġmob . calc ( Attribute . INT )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Stat Ġ+ Ġ 1 , Ġmob . calc ( Attribute . W IS )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Stat Ġ+ Ġ 1 , Ġmob . calc ( Attribute . DEX )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Stat Ġ+ Ġ 1 , Ġmob . calc ( Attribute . CON )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Hit Ġ+ Ġ 1 , Ġmob . calc ( Attribute . HIT )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial D am Ġ+ Ġ 1 , Ġmob . calc ( Attribute . D AM )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Ac Ġ+ Ġ 1 , Ġmob . calc ( Attribute . AC _ BASH )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Ac Ġ+ Ġ 1 , Ġmob . calc ( Attribute . AC _ SL ASH )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Ac Ġ+ Ġ 1 , Ġmob . calc ( Attribute . AC _ PI ER CE )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( initial Ac Ġ+ Ġ 1 , Ġmob . calc ( Attribute . AC _ MAGIC )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest E lf Save Bonus () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service . create Mob () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . race Ġ= ĠElf () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġprob . test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġmob 1 . s aves Again st ( Damage Type . NONE ) Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġmob 2 . s aves Again st ( Damage Type . NONE ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 () Ġ* Ġ 0 . 5 0 ). is LessThan ( prob . get Outcome 2 () Ġ* Ġ 1 . 2 5 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Cur se Save Pen alty () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service . create Mob () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĠĠĠĠĠĠĠ Ġval Ġaffect Ġ= Ġcreate A ffect ( A ffect Type . CUR SE ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . a ffect s Ġ= Ġmutable ListOf ( a ffect ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is GreaterThan OrEqualTo (( prob . get Outcome 2 () Ġ* Ġ 0 . 5 ). round ToInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest B ers erk Save Bonus () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġaffect Ġ= Ġcreate A ffect ( A ffect Type . BER SER K ) ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service . create Mob Ġ{ Ġit . level Ġ= Ġ 5 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . level Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmob 2 . a ffect s . add ( a ffect ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is LessThan OrEqualTo ( prob . get Outcome 2 () Ġ* Ġ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest W is Int Save Bonus () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . race Ġ= ĠF aer ie () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . race Ġ= ĠO gre () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is GreaterThan OrEqualTo ( prob . get Outcome 2 () Ġ/ Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Fight ing Reduc es S aves () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service . create Mob () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob Ġ{ Ġit . dis position Ġ= ĠDis position . F IGHT ING Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is GreaterThan OrEqualTo ( prob . get Outcome 2 () Ġ/ Ġ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Imm une S aves () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . race Ġ= ĠG ob lin () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . race Ġ= ĠO gre () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . PO IS ON ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . PO IS ON ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). isEqualTo ( prob . total Iterations ) ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 2 ()). is LessThan ( prob . total Iterations ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest M age Save Bonus () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . special ization Ġ= ĠMage () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is GreaterThan OrEqualTo (( prob . get Outcome 2 () Ġ* Ġ 0 . 5 ). round ToInt ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest C ler ic Save Bonus () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġprob Ġ= ĠProb ability Test () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create Mob Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. also Ġ{ Ġit . special ization Ġ= ĠC ler ic () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob () ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġwhile Ġ( prob . is Iter ating ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprob . decrement Iteration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 1 . s aves Again st ( Damage Type . NONE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmob 2 . s aves Again st ( Damage Type . NONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( prob . get Outcome 1 ()). is GreaterThan OrEqualTo ( prob . get Outcome 2 () Ġ/ Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Equip Item In creases Attribute () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĠĠĠĠĠĠĠ Ġval Ġmob Ġ= Ġtest Service . create Mob () ĊĠĠĠĠĠĠĠ Ġval Ġbase Hp Ġ= Ġstarting Hp ĊĠĠĠĠĠĠĠ Ġval Ġbonus Hp Ġ= Ġ 1 0 0 ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġmob . equ ipped . add ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Service . create Item Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . position Ġ= ĠPosition . SH I ELD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . attributes Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( Attribute . HP , Ġbonus Hp ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . type Ġ= ĠItem Type . EQ U IP MENT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . material Ġ= ĠMaterial . IRON ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġexpect ĊĠĠĠĠĠĠĠ ĠassertThat ( mob . calc ( Attribute . HP )). isEqualTo ( base Hp Ġ+ Ġbonus Hp ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Currency Trans fers When Mob Is K illed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Service Ġ= Ġcreate Test Service () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob 1 Ġ= Ġtest Service . create Mob () ĊĠĠĠĠĠĠĠ Ġval Ġmob 2 Ġ= Ġtest Service . create Mob Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Currency ( Currency Type . Gold , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Currency ( Currency Type . Silver , Ġ 2 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . add Currency ( Currency Type . Cop per , Ġ 2 3 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġand ĊĠĠĠĠĠĠĠ Ġval Ġfight Ġ= Ġtest Service . add Fight ( mob 1 , Ġmob 2 ) ĊĠĠĠĠĠĠĠ Ġmob 2 . dis position Ġ= ĠDis position . DEAD ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġtest Service . publish ( fight . create Kill Event ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġmob 1 . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Gold )). isEqualTo ( 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Silver )). isEqualTo ( 2 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Cop per )). isEqualTo ( 2 3 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmob 2 . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Gold )). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Silver )). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . getC urrency ( Currency Type . Cop per )). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Create Cor p se Trans fers Inventory And Equipment () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsetup ĊĠĠĠĠĠĠĠ Ġval Ġtest Ġ= Ġcreate Test Service () ĊĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠĠĠĠĠ Ġval Ġmob Ġ= Ġtest . create Mob () ĊĠĠĠĠĠĠĠ Ġmob . items . add ( test . create Item ()) ĊĠĠĠĠĠĠĠ Ġmob . equ ipped . add ( test . create Item ()) ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġmob . items . size Ġ+ Ġmob . equ ipped . size ĊĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġcor p se Ġ= Ġtest . create Cor p se From ( mob ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ ĠassertThat ( corp se . items !! ). has Size ( amount ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mob . equ ipped ). has Size ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( mob . items ). has Size ( 0 ) ĊĠĠĠ Ġ} Ċ } Ċ