package Ġcom . github . p av pon n . configuration Ċ Ċ import Ġcom . github . p av pon n . transaction . Transaction Ċ import Ġcom . github . p av pon n . utils . Default Values . INIT _ SEND ER Ċ import Ġcom . github . p av pon n . utils . Default Values . INIT _ TRANSACTION _ ID Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* Ġ@ author Ġp av pon n Ċ Ġ*/ Ċ class ĠConfiguration Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTOT AL _ STA KE Ġ= Ġ 4 5 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR _ INIT Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINIT _ TRANSACTION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠINIT _ SEND ER , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 1 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġ 2 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 1 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty Set () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR _ 1 _ BY _ 1 Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Pair ( INIT _ SEND ER , ĠINIT _ TRANSACTION _ ID )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR _ 1 _ BY _ 2 Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġ 7 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 1 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Pair ( INIT _ SEND ER , ĠINIT _ TRANSACTION _ ID )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR _ 1 _ BY _ 3 Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 1 5 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( INIT _ SEND ER , ĠINIT _ TRANSACTION _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 2 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTR _ 2 _ BY _ 2 Ġ= ĠTransaction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Pair ( 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġtotal Ġstake Ġcorrectly Ġwith Ġone Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfiguration . getTotal Stake () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( TOTAL _ STA KE , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġtotal Ġstake Ġcorrectly Ġwith Ġtwo Ġtransactions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 1 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfiguration . getTotal Stake () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( TOTAL _ STA KE , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġtotal Ġstake Ġcorrectly Ġwith Ġseveral Ġtransactions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 1 , ĠTR _ 1 _ BY _ 2 , ĠTR _ 1 _ BY _ 3 , ĠTR _ 2 _ BY _ 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġconfiguration . getTotal Stake () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( TOTAL _ STA KE , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġstake Ġfor Ġevery Ġparticipant Ġcorrectly Ġwith Ġone Ġtransaction `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT )) ĊĠĠĠĠĠĠĠ Ġval Ġstake Distribution Ġ= Ġconfiguration . get Stake Distribution () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 0 , Ġstake Distribution . get OrDefault ( 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 2 , Ġstake Distribution . get OrDefault ( 2 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 3 , Ġstake Distribution . get OrDefault ( 3 , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 0 , Ġconfiguration . get Process Stake ( 1 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 2 , Ġconfiguration . get Process Stake ( 2 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 3 , Ġconfiguration . get Process Stake ( 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġstake Ġfor Ġevery Ġparticipant Ġcorrectly Ġwith Ġtwo Ġtransactions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġstake Distribution Ġ= Ġconfiguration . get Stake Distribution () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 3 , Ġstake Distribution . get OrDefault ( 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 7 , Ġstake Distribution . get OrDefault ( 2 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 5 , Ġstake Distribution . get OrDefault ( 3 , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 3 , Ġconfiguration . get Process Stake ( 1 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 7 , Ġconfiguration . get Process Stake ( 2 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 5 , Ġconfiguration . get Process Stake ( 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġcalculate Ġstake Ġfor Ġevery Ġparticipant Ġwith Ġseveral Ġtransactions `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 2 , ĠTR _ 1 _ BY _ 1 , ĠTR _ 1 _ BY _ 3 , ĠTR _ 2 _ BY _ 2 )) ĊĠĠĠĠĠĠĠ Ġval Ġstake Distribution Ġ= Ġconfiguration . get Stake Distribution () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 4 , Ġstake Distribution . get OrDefault ( 1 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 8 , Ġstake Distribution . get OrDefault ( 2 , Ġ 0 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 , Ġstake Distribution . get OrDefault ( 3 , Ġ 0 )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 2 4 , Ġconfiguration . get Process Stake ( 1 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 8 , Ġconfiguration . get Process Stake ( 2 )) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 3 , Ġconfiguration . get Process Stake ( 3 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetermine Ġwhether Ġset Ġof Ġprocess Ġis Ġa Ġqu orum Ġin Ġone Ġtransaction Ġconfiguration `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 3 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 2 , Ġ 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 , Ġ 3 ))) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetermine Ġwhether Ġset Ġof Ġprocess Ġis Ġa Ġqu orum Ġin Ġtwo Ġtransactions Ġconfiguration `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 2 )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 3 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 2 , Ġ 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 , Ġ 3 ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` should Ġdetermine Ġwhether Ġset Ġof Ġprocess Ġis Ġa Ġqu orum Ġin Ġseveral Ġtransactions Ġconfiguration `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= ĠP astro Configuration ( set Of ( TR _ INIT , ĠTR _ 1 _ BY _ 2 , ĠTR _ 1 _ BY _ 1 , ĠTR _ 2 _ BY _ 2 , ĠTR _ 1 _ BY _ 3 )) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 3 ))) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( false , Ġconfiguration . has Qu orum ( set Of ( 2 , Ġ 3 ))) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( true , Ġconfiguration . has Qu orum ( set Of ( 1 , Ġ 2 , Ġ 3 ))) ĊĠĠĠ Ġ} Ċ Ċ } Ċ