package Ġrs . d us k . engine . entity . character . contain Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġorg . junit . jupiter . api . Assertions .* Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Dynamic Test . dynamic Test Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Factory Ċ import Ġrs . d us k . cache . definition . data . Item Definition Ċ import Ġrs . d us k . engine . entity . definition . Item Definitions Ċ Ċ internal Ġclass ĠContainer Test Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontainer : ĠContainer ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdefinitions : ĠItem Definitions ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġitems : ĠInt Array ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġamounts : ĠInt Array ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . size Ġ} Ġreturns Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġamounts Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= definitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġitems , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamounts Ġ= Ġamounts , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Stack Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Stack able Ġtrue Ġif Ġalways Ġstack Ġmode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Mode Ġ= ĠStack Mode . Always , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . get ( id ) Ġ} Ġreturns ĠItem Definition ( stack able Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġstack able Ġ= Ġcontainer . stack able ( id ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( stack able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Stack able Ġfalse Ġif Ġnever Ġstack Ġmode `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Mode Ġ= ĠStack Mode . Never , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . get ( id ) Ġ} Ġreturns ĠItem Definition ( stack able Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġstack able Ġ= Ġcontainer . stack able ( id ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( stack able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Stack able Ġtrue Ġif Ġnormal Ġstack Ġmode Ġand Ġitem Ġstacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Mode Ġ= ĠStack Mode . Normal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . get ( id ) Ġ} Ġreturns ĠItem Definition ( stack able Ġ= Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġstack able Ġ= Ġcontainer . stack able ( id ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( stack able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Stack able Ġfalse Ġif Ġnormal Ġstack Ġmode Ġand Ġitem Ġun stack able `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Mode Ġ= ĠStack Mode . Normal , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . get ( id ) Ġ} Ġreturns ĠItem Definition ( stack able Ġ= Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġstack able Ġ= Ġcontainer . stack able ( id ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( stack able ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Spaces Ġcounts Ġnumber Ġof Ġamounts Ġequal Ġto Ġmin Ġstack `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġamounts [ 1 ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġamounts [ 4 ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġamounts [ 5 ] Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠ Ġcontainer Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= definitions , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= ĠInt Array ( 1 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamounts Ġ= Ġamounts , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġminimum Stack Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġspaces Ġ= Ġcontainer . spaces ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġspaces ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Bounds Ġchecks Ġover Ġmaximum `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġwithin Ġ= Ġcontainer . in Bounds ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( within ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Bounds Ġchecks Ġunder Ġminimum `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġwithin Ġ= Ġcontainer . in Bounds ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( within ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġchecks Ġindex Ġvalues Ġmatch Ġexpected `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid ( index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( valid ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . in Bounds ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġid Ġequals Ġexactly Ġregardless Ġof Ġamount `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ- 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Id ( index , Ġid ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( valid ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . in Bounds ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Invalid Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ- 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Id ( index , Ġid ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġamount Ġequals Ġexactly Ġregardless Ġof Ġid `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ- 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Amount ( index , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( valid ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . in Bounds ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Invalid Ġamount `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ- 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Amount ( index , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġchecks Ġindex Ġid Ġmatches Ġexpected `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid ( index , Ġ 3 , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . in Bounds ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġchecks Ġindex Ġamount Ġmatches Ġexpected `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid ( index , Ġid , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . in Bounds ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġinput Ġchecks Ġid Ġis Ġpositive `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Input (- 1 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġinput Ġchecks Ġid Ġis Ġless Ġthan Ġdefinitions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . size Ġ} Ġreturns Ġ 1 5 0 0 0 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Input ( 2 0 0 0 0 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġinput Ġchecks Ġamount Ġis Ġpositive `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . minimum Stack Ġ} Ġreturns Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Input ( 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġinput Ġchecks Ġvalues Ġmatch Ġexpected `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Input ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Valid Ġinput Ġchecks Ġpredicate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġcontainer . predicate Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġvalid Ġ= Ġcontainer . isValid Input ( 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( valid ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠINSERT ĠINDEX ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Insert Ġsingle Ġun stack able `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . insert ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Insert Ġmultiple Ġun stack able `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . insert ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Un stack able , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Insert Ġinto Ġfull Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 1 Ġuntil Ġitems . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ i ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamounts [ i ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . insert ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Insert Ġsh ifts Ġother Ġitems Ġforward `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġrepeat ( items . size Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ it ] Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamounts [ it ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . insert ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 0 , Ġ 1 , Ġ 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 , Ġ 6 , Ġ 7 , Ġ 8 ), Ġitems ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 1 , Ġ 2 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 , Ġ 1 ), Ġamounts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠADD ĠINDEX ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġzero Ġamount Ġat Ġindex Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( index , Ġ 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġat Ġout Ġof Ġbounds Ġindex Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( index , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġat Ġindex Ġwith Ġdifferent Ġid Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( index , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Wrong Type , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġat Ġfree Ġindex Ġwith Ġid Ġisn 't Ġwrong Ġtype `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( index , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( Container Result . Wrong Type , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġover Ġinteger Ġmax Ġat Ġindex Ġoverflow s `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Overflow , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġmore Ġthan Ġone Ġun stack able Ġitem Ġat Ġindex Ġadds Ġnormally `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . add ( id , Ġany ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( index , Ġid , Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . add ( id , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġone Ġun stack able Ġitem Ġat Ġa Ġfree Ġindex Ġis Ġsuccessful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġmultiple Ġstack able Ġitems Ġat Ġfree Ġindex Ġis Ġsuccessful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġstack able Ġitems Ġto Ġindex Ġwith Ġsame Ġitems Ġcombin es Ġstacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . set ( index , Ġid , Ġ 2 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠADD ĠANY WHERE ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġzero Ġamount Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġexisting Ġstack able Ġitem Ġover Ġinteger Ġmax Ġoverflow s `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= ĠInt . MAX _ VALUE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Overflow , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġexisting Ġstack able Ġitem Ġcombin es Ġstacks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . set ( index , Ġid , Ġ 2 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġnon - existent Ġstack able Ġitem Ġwith Ġno Ġfree Ġspaces Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . free Index () Ġ} Ġreturns Ġ- 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġnon - existent Ġstack able Ġitem Ġadds Ġto Ġfree Ġspace `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . free Index () Ġ} Ġreturns Ġindex ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( id , Ġamount )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . set ( index , Ġid , Ġamount ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġun stack able Ġitem Ġwith Ġnot Ġenough Ġspaces Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . spaces Ġ} Ġreturns Ġamount Ġ- Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . add ( id , Ġamount )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Adding Ġun stack able Ġitem Ġwith Ġenough Ġspaces Ġis Ġsuccessful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ 0 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . add ( id , Ġamount )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( 1 , Ġid , Ġ 1 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( 2 , Ġid , Ġ 1 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠREMOVE ĠAT ĠINDEX ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġzero Ġamount Ġat Ġindex Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġ 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġat Ġout Ġof Ġbounds Ġindex Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġitems . size Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġat Ġindex Ġwith Ġdifferent Ġid Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Wrong Type , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmore Ġthan Ġone Ġun stack able Ġat Ġindex Ġremoves Ġnormally `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġother Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ other Index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ other Index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( id , Ġany ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( id , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġover Ġinteger Ġmax Ġat Ġindex Ġunder flows `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ- 1 0 // ĠShould Ġbe Ġimpossible ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġid , ĠInt . MAX _ VALUE )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmore Ġthan Ġexists Ġat Ġindex Ġunder flows `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġexact Ġamount Ġthat Ġexists Ġat Ġindex Ġclears Ġslot `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . clear ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmore Ġthan Ġone Ġun stack able Ġitem Ġat Ġindex Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 3 // ĠShould Ġbe Ġimpossible ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Un stack able , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġone Ġun stack able Ġitem Ġat Ġindex Ġis Ġsuccessful `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( index , Ġid , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . clear ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmultiple Ġstack able Ġitems Ġat Ġindex Ġreduces Ġstack `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( index , Ġid , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . set ( index , Ġid , Ġ 2 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ ĠREMOVE ĠANY WHERE ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġzero Ġamount Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Invalid , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġnon - existent Ġitem Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( id , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġexisting Ġstack able Ġitem Ġover Ġinteger Ġmax Ġunder flows `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( id , ĠInt . MAX _ VALUE )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmore Ġstack able Ġitems Ġthan Ġexists Ġunder flows `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( id , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġexact Ġnumber Ġof Ġexisting Ġstack able Ġitems Ġclears Ġslot `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( id , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . clear ( index ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġa Ġnumber Ġexisting Ġstack able Ġitems Ġreduces Ġstack `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( id , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġcontainer . set ( index , Ġid , Ġ 2 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġmore Ġun stack able Ġitems Ġthan Ġexists Ġfails `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġitems [ 2 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . remove ( id , Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġexact Ġnumber Ġof Ġun stack able Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġitems [ 2 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( id , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( 0 , Ġ- 1 , Ġ 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( 2 , Ġ- 1 , Ġ 0 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Removing Ġless Ġthan Ġexisting Ġun stack able Ġitems Ġleaves Ġremaining `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġitems [ 2 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġitems [ 4 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( id ) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . remove ( id , Ġ 2 )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . clear ( 0 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . clear ( 2 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . clear ( 4 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sort Ġmoves Ġempty Ġindices Ġto Ġback `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġitems ( null , ĠTYPE _ 1 Ġto Ġ 1 , Ġnull , ĠTYPE _ 2 Ġto Ġ 2 , Ġnull , ĠTYPE _ 3 Ġto Ġ 3 , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġcontainer . sort () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( items ( TYPE _ 1 Ġto Ġ 1 , ĠTYPE _ 2 Ġto Ġ 2 , ĠTYPE _ 3 Ġto Ġ 3 , Ġnull , Ġnull , Ġnull , Ġnull ), Ġcontainer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Sort Ġdoesn 't Ġchange Ġorder Ġof Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġitems ( TYPE _ 3 Ġto Ġ 3 , ĠTYPE _ 2 Ġto Ġ 2 , ĠTYPE _ 1 Ġto Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġcontainer . sort () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( items ( TYPE _ 3 Ġto Ġ 3 , ĠTYPE _ 2 Ġto Ġ 2 , ĠTYPE _ 1 Ġto Ġ 1 ), Ġcontainer ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġitems ( var arg Ġitems : ĠPair < Int , ĠInt > ?) Ġ= ĠContainer ( ĊĠĠĠĠĠĠĠ Ġdefinitions Ġ= definitions , ĊĠĠĠĠĠĠĠ Ġitems Ġ= Ġitems . map Ġ{ Ġit ?. first Ġ?: Ġ- 1 Ġ}. to IntArray (), ĊĠĠĠĠĠĠĠ Ġamounts Ġ= Ġitems . map Ġ{ Ġit ?. second Ġ?: Ġ 0 Ġ}. to IntArray (), ĊĠĠĠĠĠĠĠ Ġminimum Stack Ġ= Ġ 0 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġindex Ġin Ġone Ġcontainer Ġto Ġindex Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġother Index Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . add ( other Index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġindex , Ġtarget Index Ġ= Ġother Index )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( other Index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġindex Ġin Ġone Ġcontainer Ġto Ġinsert Ġat Ġindex Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġother Index Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . insert ( other Index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġindex , Ġtarget Index Ġ= Ġother Index , Ġinsert Ġ= Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . insert ( other Index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġindex Ġin Ġone Ġcontainer Ġto Ġanywhere Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . add ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġindex )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( id , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġanywhere Ġin Ġone Ġcontainer Ġto Ġindex Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġother Index Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . add ( other Index , Ġid , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġtarget Index Ġ= Ġother Index )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( id , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( other Index , Ġid , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġanywhere Ġin Ġone Ġcontainer Ġto Ġanywhere Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . add ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġnull , Ġtarget Index Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( id , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( id , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġone Ġcontainer Ġto Ġa Ġdifferent Ġitem Ġid Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġnew Id Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefinitions . get ( new Id ) Ġ} Ġreturns ĠItem Definition () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . remove ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . add ( id , Ġamount ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġnull , Ġtarget Index Ġ= Ġnull , Ġtarget Id Ġ= Ġnew Id )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( id , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( new Id , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġone Ġcontainer Ġfails Ġdeletion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . move ( other , Ġid , Ġamount )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Def icient , Ġcontainer . result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġitem Ġfrom Ġone Ġcontainer Ġfails Ġaddition Ġre verts Ġdeletion `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . stack able ( any ()) Ġ} Ġreturns Ġfalse ĊĠĠĠĠĠĠĠ Ġitems [ 0 ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġamounts [ 0 ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . move ( other , Ġid , Ġamount , Ġindex Ġ= Ġnull , Ġtarget Index Ġ= Ġnull )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . remove ( id , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . add ( id , Ġamount ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . add ( id , Ġamount ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Swap Ġtwo Ġindices `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġfirst Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsecond Index Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġitems [ first Index ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ first Index ] Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġitems [ second Index ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġamounts [ second Index ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontainer . swap ( first Index , Ġsecond Index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( first Index , Ġ 4 , Ġ 5 , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( second Index , Ġ 2 , Ġ 3 , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Swap Ġindex Ġin Ġone Ġcontainer Ġwith Ġindex Ġin Ġanother `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġother Items Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Amount s Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= definitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġother Items , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamounts Ġ= Ġother Amount s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfirst Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsecond Index Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġitems [ first Index ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ first Index ] Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġother Items [ second Index ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġother Amount s [ second Index ] Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontainer . swap ( first Index , Ġother , Ġsecond Index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( first Index , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . set ( second Index , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Swap Ġempty Ġslot Ġwith Ġitem Ġin Ġanother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġother Items Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ- 1 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Amount s Ġ= ĠInt Array ( 1 0 ) Ġ{ Ġ 0 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= definitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems Ġ= Ġother Items , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamounts Ġ= Ġother Amount s ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġfirst Index Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsecond Index Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġitems [ first Index ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ first Index ] Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontainer . swap ( first Index , Ġother , Ġsecond Index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertTrue ( result ) ĊĠĠĠĠĠĠĠ Ġverify Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer . set ( first Index , Ġ- 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġother . set ( second Index , Ġ 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Swap Ġchecks Ġindices Ġaren 't Ġout Ġof Ġbounds `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcontainer . swap ( 0 , Ġitems . size Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertFalse ( result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Listeners Ġnotified Ġof Ġupdates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġvar Ġcaptured : ĠList < Container Modification >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcontainer . listeners . add Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Ġ= Ġit . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġcontainer . set ( 2 , Ġ 1 2 3 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Container Modification ( 2 , Ġ- 1 , Ġ 0 , Ġ 1 2 3 , Ġ 2 )), Ġcaptured ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Listeners Ġnotified Ġmultiple Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġvar Ġcaptured : ĠList < Container Modification >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcontainer . listeners . add Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcaptured Ġ= Ġit . toList () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġcontainer . swap ( 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Modification ( 2 , Ġ- 1 , Ġ 0 , Ġ- 1 , Ġ 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer Modification ( 3 , Ġ- 1 , Ġ 0 , Ġ- 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġcaptured ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Container Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . isEmpty ()) ĊĠĠĠĠĠĠĠ Ġitems [ 4 ] Ġ= Ġ 1 2 3 ĊĠĠĠĠĠĠĠ Ġamounts [ 4 ] Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġcontainer Ġitem Ġby Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontainer . getItem ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( id , Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġcontainer Ġitem Ġout Ġof Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontainer . getItem ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals (- 1 , Ġitem ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġcontainer Ġamount Ġby Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġamount Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġamount ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcontainer . get Amount ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( amount , Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġcontainer Ġamount Ġout Ġof Ġindex `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ- 2 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġcontainer . get Amount ( index ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġcount ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġall Ġcontainer Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġitems [ 1 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġitems [ 3 ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġcontainer . getItems () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( this . items , Ġitems ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġall Ġcontainer Ġamounts `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġamounts [ 1 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ 3 ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġamounts Ġ= Ġcontainer . get Amount s () ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( this . amount s , Ġamounts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Get Ġcount Ġof Ġall Ġitem Ġamounts `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( 2 ) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġitems [ 1 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġitems [ 2 ] Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġitems [ 3 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġitems [ 4 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ 1 ] Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġamounts [ 2 ] Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġamounts [ 3 ] Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġamounts [ 4 ] Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġval Ġamounts Ġ= Ġcontainer . getCount ( 2 ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 L , Ġamounts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġall Ġitems Ġfrom Ġone Ġcontainer Ġto Ġanother `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġrepeat ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ it Ġ* Ġ 2 ] Ġ= Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamounts [ it Ġ* Ġ 2 ] Ġ= Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertTrue ( container . move All ( other )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Success , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 4 , Ġ 3 , Ġ 2 , Ġ 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ), Ġother . getItems ()) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 4 , Ġ 3 , Ġ 2 , Ġ 1 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ġother . get Amount s ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Move Ġall Ġpartial Ġto Ġother Ġcontainer `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġrepeat ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ it Ġ* Ġ 2 ] Ġ= Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġamounts [ it Ġ* Ġ 2 ] Ġ= Ġit Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ ĠassertFalse ( container . move All ( other )) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 4 , Ġ 3 ), Ġother . getItems ()) ĊĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 4 , Ġ 3 ), Ġother . get Amount s ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Factory ĊĠĠĠ Ġfun Ġ` Move Ġmore Ġthan Ġmax Ġamount Ġoverflow s Ġclean ly `() Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠ 1 0 0 0 Ġto ĠInt . MAX _ VALUE , ĊĠĠĠĠĠĠĠ ĠInt . MAX _ VALUE Ġto Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠ ĠInt . MAX _ VALUE Ġ- Ġ 1 0 0 0 Ġto Ġ 2 0 0 0 , ĊĠĠĠĠĠĠĠĠ 2 0 0 0 Ġto ĠInt . MAX _ VALUE Ġ- Ġ 1 0 0 0 ĊĠĠĠ Ġ). flatMap Ġ{ Ġ( from , Ġto ) Ġ-> ĊĠĠĠĠĠĠĠ Ġ( 0 Ġuntil Ġ 2 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindexed Ġ= Ġit Ġ== Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdynamic Test (" Move Ġ$ from Ġto Ġ$ to Ġindexed : Ġ$ indexed ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems [ index ] Ġ= Ġid ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġamounts [ index ] Ġ= Ġfrom ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġother Ġ= Ġspy k ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContainer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdefinitions Ġ= Ġdefinitions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapacity Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġother . set ( index , Ġid , Ġto ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontainer . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġother . stack able ( any ()) Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( indexed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( container . move ( other , Ġid , Ġfrom )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse ( container . move ( other , Ġid , Ġfrom )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( Container Result . Full , Ġcontainer . result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( id ), Ġother . getItems ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( Int . MAX _ VALUE ), Ġother . get Amount s ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( id , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 , Ġ- 1 ), Ġitems ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ArrayEquals ( int ArrayOf ( 1 0 0 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ġamounts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ 1 Ġ= Ġ 1 1 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ 2 Ġ= Ġ 2 1 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTYPE _ 3 Ġ= Ġ 3 1 5 ĊĠĠĠ Ġ} Ċ }