package Ġpw . for st . kat lib Ċ Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġjava . util . Random Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . fail Ċ Ċ internal Ġclass ĠMap Extensions Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Weighted Random () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmap Of ( Pair ("- 1 ", Ġ 0 . 0 ), ĠPair (" 0 ", Ġ 0 . 5 ), ĠPair (" 1 ", Ġ 0 . 7 5 ), ĠPair (" 2 ", Ġ 0 . 5 ), ĠPair (" 3 ", Ġ 0 . 2 5 )) ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠSet table Random () ĊĠĠĠĠĠĠĠ Ġrand . set Next Double Values ( 0 . 0 , Ġ 0 . 2 , Ġ 0 . 6 , Ġ 0 . 2 5 , Ġ 0 . 9 9 9 9 , Ġ 0 . 8 5 , Ġ 0 . 9 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 0 ", Ġitems . get Weighted Random ( rand ), Ġ"- 1 Ġshould Ġbe Ġnever Ġselected , Ġit Ġhas Ġweight Ġ 0 . 0 ") ĊĠĠĠĠĠĠĠ ĠassertEquals (" 0 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 3 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 2 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 3 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepeat ( 1 0 0 ) Ġ{ Ġitems . get Weighted Random ( Random ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfail (" this Ġmethod Ġshould Ġnot Ġthrow Ġwith Ġdefault Ġrandom Ġclass . ĠException Ġis Ġ$ e ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Keys In Weighted Random Order () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmap Of ( Pair ("- 1 ", Ġ 0 . 0 ), ĠPair (" 0 ", Ġ 0 . 5 ), ĠPair (" 1 ", Ġ 0 . 7 5 ), ĠPair (" 2 ", Ġ 0 . 5 ), ĠPair (" 3 ", Ġ 0 . 2 5 )) ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠSet table Random () ĊĠĠĠĠĠĠĠ Ġrand . set Next Double Values ( 0 . 9 9 9 9 , Ġ 0 . 5 , Ġ 0 . 2 , Ġ 0 . 4 5 , Ġ 0 . 9 9 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠlistOf (" 0 ", Ġ" 3 ", Ġ" 2 ", Ġ" 1 ", Ġ"- 1 ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġitems . get Keys In Weighted Random Order ( 0 . 0 , Ġrand )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet No Weights Random () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġmap Of ( Pair (" 0 ", Ġ 0 . 0 ), ĠPair (" 1 ", Ġ 0 . 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġrand Ġ= ĠSet table Random () ĊĠĠĠĠĠĠĠ Ġrand . set Next Int Values ( 0 , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 0 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 ", Ġitems . get Weighted Random ( rand )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Merge Reduce () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= Ġmap Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 1 1 , Ġ" d " Ġto Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= Ġmap Of (" a " Ġto Ġ 3 , Ġ" c " Ġto Ġ 8 , Ġ" d " Ġto Ġ 3 , Ġ" e " Ġto Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġreduction Ġ= Ġmap 1 . merge Reduce ( map 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 1 1 , Ġ" d " Ġto Ġ 3 , Ġ" e " Ġto Ġ 4 ), Ġreduction ) ĊĠĠĠĠĠĠĠ Ġval Ġsum Reduction Ġ= Ġmap 1 . merge Reduce ( map 2 ) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ- Ġb Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto Ġ 2 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 3 , Ġ" d " Ġto Ġ 0 , Ġ" e " Ġto Ġ 4 ), Ġsum Reduction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Merge Reduce To () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= Ġmap Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 1 1 , Ġ" d " Ġto Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= Ġmap Of (" a " Ġto Ġ 3 , Ġ" c " Ġto Ġ 8 , Ġ" d " Ġto Ġ 3 , Ġ" e " Ġto Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġreduction : ĠMap < String , ĠInt > Ġ= Ġmap 1 . merge Reduce To ( Linked HashMap (), Ġmap 2 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 1 1 , Ġ" d " Ġto Ġ 3 , Ġ" e " Ġto Ġ 4 ), Ġreduction ) ĊĠĠĠĠĠĠĠ Ġval Ġsum Reduction : ĠMap < String , ĠInt > Ġ= Ġmap 1 . merge Reduce To ( Linked HashMap (), Ġmap 2 ) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ- Ġb Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto Ġ 2 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 3 , Ġ" d " Ġto Ġ 0 , Ġ" e " Ġto Ġ 4 ), Ġsum Reduction ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Join () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= Ġmap Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 1 0 , Ġ" c " Ġto Ġ 1 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= Ġmap Of (" a " Ġto Ġ" a ", Ġ" c " Ġto Ġ" b ", Ġ" d " Ġto Ġ" c ") ĊĠĠĠĠĠĠĠ Ġval Ġreduction Ġ= Ġmap 1 . join ( map 2 ) Ġ{ Ġv 1 , Ġv 2 Ġ-> ĠPair ( v 1 Ġ?: Ġ 1 0 0 , Ġv 2 Ġ?: Ġ" z ") Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( map Of (" a " Ġto ĠPair ( 5 , Ġ" a "), Ġ" b " Ġto ĠPair ( 1 0 , Ġ" z "), Ġ" c " Ġto ĠPair ( 1 1 , Ġ" b "), Ġ" d " Ġto ĠPair ( 1 0 0 , Ġ" c ")), Ġreduction ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Swap Keys () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġmap Of ( 1 Ġto Ġ 5 . 0 , Ġ 2 Ġto Ġ 2 . 0 , Ġ 3 Ġto Ġ 5 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġmap Of ( 2 Ġto Ġ 7 . 0 , Ġ 5 Ġto Ġ 9 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġmap Of ( 1 Ġto Ġ 2 . 0 , Ġ 4 Ġto Ġ 2 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" d " Ġto Ġmap Of ( 4 Ġto Ġ 9 . 0 , Ġ 5 Ġto Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġsw apped Ġ= Ġmap . swap Keys () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġ 5 . 0 , Ġ" c " Ġto Ġ 2 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġmap Of (" a " Ġto Ġ 2 . 0 , Ġ" b " Ġto Ġ 7 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġto Ġmap Of (" a " Ġto Ġ 5 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġto Ġmap Of (" c " Ġto Ġ 2 . 0 , Ġ" d " Ġto Ġ 9 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 Ġto Ġmap Of (" b " Ġto Ġ 9 . 0 , Ġ" d " Ġto Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġsw apped ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Swap 3 Keys () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġmap Of ( 1 Ġto Ġmap Of ( 4 . 5 Ġto Ġfalse , Ġ 4 . 2 Ġto Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġmap Of ( 8 Ġto Ġmap Of ( 1 . 5 Ġto Ġfalse , Ġ 7 . 2 Ġto Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġmap Of ( 9 Ġto Ġmap Of ( 8 . 8 Ġto Ġtrue , Ġ 4 . 2 Ġto Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsw apped k 2 with k 1 Ġ= Ġmap . swap Keys Ġ{ Ġk 1 , Ġk 2 , Ġk 3 Ġ-> ĠTrip le ( k 2 , Ġk 1 , Ġk 3 ) Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġexpected k 2 with k 1 Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġmap Of ( 4 . 5 Ġto Ġfalse , Ġ 4 . 2 Ġto Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 Ġto Ġmap Of (" b " Ġto Ġmap Of ( 1 . 5 Ġto Ġfalse , Ġ 7 . 2 Ġto Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 9 Ġto Ġmap Of (" c " Ġto Ġmap Of ( 8 . 8 Ġto Ġtrue , Ġ 4 . 2 Ġto Ġfalse )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected k 2 with k 1 , Ġsw apped k 2 with k 1 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsw apped k 3 with k 1 Ġ= Ġmap . swap Keys Ġ{ Ġk 1 , Ġk 2 , Ġk 3 Ġ-> ĠTrip le ( k 3 , Ġk 2 , Ġk 1 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected k 3 with k 1 Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 . 5 Ġto Ġmap Of ( 1 Ġto Ġmap Of (" a " Ġto Ġfalse )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 . 2 Ġto Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 9 Ġto Ġmap Of (" c " Ġto Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 . 5 Ġto Ġmap Of ( 8 Ġto Ġmap Of (" b " Ġto Ġfalse )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 7 . 2 Ġto Ġmap Of ( 8 Ġto Ġmap Of (" b " Ġto Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 8 . 8 Ġto Ġmap Of ( 9 Ġto Ġmap Of (" c " Ġto Ġtrue )) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected k 3 with k 1 , Ġsw apped k 3 with k 1 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest To Two Dimension al Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" a ") Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" b ") Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" c ") Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 2 , Ġ" a ") Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 2 , Ġ" d ") Ġto Ġ 1 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 4 , Ġ" z ") Ġto Ġ 7 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtwo Levels Ġ= Ġmap . to Two Level Map () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 3 , Ġ" c " Ġto Ġ 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġmap Of (" a " Ġto Ġ 1 2 , Ġ" d " Ġto Ġ 1 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġto Ġmap Of (" z " Ġto Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġtwo Levels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest List To Two Dimension al Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" a ") Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" b ") Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 1 , Ġ" c ") Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 2 , Ġ" a ") Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 2 , Ġ" d ") Ġto Ġ 1 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPair ( 4 , Ġ" z ") Ġto Ġ 7 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtwo Levels Ġ= Ġmap . to Two Level Map () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġ 5 , Ġ" b " Ġto Ġ 3 , Ġ" c " Ġto Ġ 8 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġmap Of (" a " Ġto Ġ 1 2 , Ġ" d " Ġto Ġ 1 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 Ġto Ġmap Of (" z " Ġto Ġ 7 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġtwo Levels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest To Three Dimension al Map () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 1 , Ġ" a ", Ġ 2 . 0 ) Ġto Ġ 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 1 , Ġ" b ", Ġ 1 . 0 ) Ġto Ġ 3 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 1 , Ġ" b ", Ġ 2 . 0 ) Ġto Ġ 8 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 2 , Ġ" a ", Ġ 1 . 0 ) Ġto Ġ 1 2 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 2 , Ġ" a ", Ġ 2 . 0 ) Ġto Ġ 1 4 , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTrip le ( 2 , Ġ" a ", Ġ 3 . 0 ) Ġto Ġ 7 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtwo Levels Ġ= Ġmap . to Three Level Map () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto Ġmap Of (" a " Ġto Ġmap Of ( 2 . 0 Ġto Ġ 5 ), Ġ" b " Ġto Ġmap Of ( 1 . 0 Ġto Ġ 3 , Ġ 2 . 0 Ġto Ġ 8 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġto Ġmap Of (" a " Ġto Ġmap Of ( 1 . 0 Ġto Ġ 1 2 , Ġ 2 . 0 Ġto Ġ 1 4 , Ġ 3 . 0 Ġto Ġ 7 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġtwo Levels ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Second Level Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġmap Of ( 1 Ġto Ġ 5 . 0 , Ġ 2 Ġto Ġ 2 . 0 , Ġ 3 Ġto Ġ 5 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġmap Of ( 2 Ġto Ġ 7 . 0 , Ġ 5 Ġto Ġ 9 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġmap Of ( 1 Ġto Ġ 2 . 0 , Ġ 4 Ġto Ġ 2 . 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" d " Ġto Ġmap Of ( 4 Ġto Ġ 9 . 0 , Ġ 5 Ġto Ġ 5 . 0 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġset Of ( 5 . 0 , Ġ 2 . 0 , Ġ 7 . 0 , Ġ 9 . 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġmap . get Second Level Values ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Third Level Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" a " Ġto Ġmap Of ( 1 Ġto Ġmap Of ( 4 . 5 Ġto Ġ 1 , Ġ 4 . 2 Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto Ġmap Of ( 8 Ġto Ġmap Of ( 1 . 5 Ġto Ġ 2 , Ġ 7 . 2 Ġto Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" c " Ġto Ġmap Of ( 9 Ġto Ġmap Of ( 8 . 8 Ġto Ġ 4 , Ġ 4 . 2 Ġto Ġ 3 )) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġset Of ( 1 , Ġ 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġmap . get Third Level Values ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Merge () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= Ġmap Of ( 1 Ġto Ġ" a ", Ġ 2 Ġto Ġ" b ", Ġ 3 Ġto Ġ" c ") ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= Ġmap Of ( 2 Ġto Ġ" d ", Ġ 3 Ġto Ġ" c ", Ġ 4 Ġto Ġ" f ") ĊĠĠĠĠĠĠĠ Ġval Ġmap 3 Ġ= Ġmap Of ( 2 Ġto Ġ" x ", Ġ 3 Ġto Ġ" y ", Ġ 4 Ġto Ġ" z ") ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( 1 Ġto Ġ" a ". asList (), Ġ 2 Ġto ĠlistOf (" b ", Ġ" d ", Ġ" x "), Ġ 3 Ġto ĠlistOf (" c ", Ġ" c ", Ġ" y "), Ġ 4 Ġto ĠlistOf (" f ", Ġ" z ")) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠlistOf ( map 1 , Ġmap 2 , Ġmap 3 ). merge ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Flat Merge () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmap 1 Ġ= Ġmap Of ( 1 Ġto ĠlistOf (" a ", Ġ" b "), Ġ 2 Ġto ĠlistOf (" b "), Ġ 3 Ġto ĠlistOf (" c ")) ĊĠĠĠĠĠĠĠ Ġval Ġmap 2 Ġ= Ġmap Of ( 2 Ġto ĠlistOf (" d "), Ġ 3 Ġto ĠlistOf (" c ", Ġ" d ", Ġ" e "), Ġ 4 Ġto ĠlistOf (" f ")) ĊĠĠĠĠĠĠĠ Ġval Ġmap 3 Ġ= Ġmap Of ( 2 Ġto ĠlistOf (" x "), Ġ 3 Ġto ĠlistOf (" y "), Ġ 4 Ġto ĠlistOf (" z ", Ġ" k ")) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġto ĠlistOf (" a ", Ġ" b "), Ġ 2 Ġto ĠlistOf (" b ", Ġ" d ", Ġ" x "), Ġ 3 Ġto ĠlistOf (" c ", Ġ" c ", Ġ" d ", Ġ" e ", Ġ" y "), Ġ 4 Ġto ĠlistOf (" f ", Ġ" z ", Ġ" k ") ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , ĠlistOf ( map 1 , Ġmap 2 , Ġmap 3 ). flat Merge ()) ĊĠĠĠ Ġ} Ċ } Ċ