package Ġcom . sg n ati uk . cart esian Ċ Ċ import Ġcom . sg n ati uk . cart esian . Cartesian Builder . cart esian Product Of Ċ import Ġcom . sg n ati uk . data Map Ċ import Ġcom . sg n ati uk . expected Cartesian Map Ċ import Ġcom . sg n ati uk . extensions . BigInt Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Test Ċ import Ġjava . util .* Ċ import Ġjava . util . stream . Collectors Ċ Ċ internal Ġclass ĠCart esian Product Map Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġempty Ġcollection Ġis Ġreturned Ġwhen Ġpassed Ġempty Ġcollection `() Ġ{ ĊĠĠĠĠĠĠĠ Ġcart esian Product Of ( empty Map < Int , ĠCollection < Int >> ()). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" expected Ġempty Ġcollection ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠCart esian Ġproduct Ġset Ġreturns Ġall Ġpossible Ġcombinations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠList < Map < Int , ĠInt >> Ġ= Ġcart esian Product Of ( data Map , Ġfalse ). map Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġexpected Cartesian Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result . contains ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify ĠCart esian Ġproduct Ġset Ġwith Ġkeep Ġorder Ġreturns Ġall Ġpossible Ġcombinations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult : ĠList < Map < Int , ĠInt >> Ġ= Ġcart esian Product Of ( data Map , Ġtrue ). map Ġ{ Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġexpected Cartesian Map . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( result . contains ( it )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġcart esian Ġproduct Ġcalculates Ġcombinations Ġnumber Ġproperly `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġ 1 . BigInt ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Map Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġdata Map . values . forEach Ġ{ Ġresult Ġ*= Ġit . size . BigInt Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( result , Ġcart esian Product Map . combin ations Count ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Cartesian Map . size . BigInt , Ġcart esian Product Map . combin ations Count ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` test Ġsplit Ġby Ġtwo Ġproduces Ġtwo Ġitems Ġlist Ġof Ġcart esian Ġproducts `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Map Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġval Ġsplit Factor Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġsplit Cartesian Ġ= Ġcart esian Product Map . split ( split Factor ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( split Factor , Ġsplit Cartesian . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalArgumentException :: class ) ĊĠĠĠ Ġfun Ġ` cart esian Ġproduct Ġshould Ġthrow Ġon Ġduplicated Ġkey Ġin Ġdata `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduplicated Key Map Ġ= ĠTreeMap < Int , ĠList < Int >> Ġ{ Ġ_, Ġ_ Ġ-> Ġ- 1 Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( 1 , ĠlistOf ( 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( 1 , ĠlistOf ( 2 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcart esian Product Of ( d uplicated Key Map ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġsplit Ġwith Ġfactor Ġ 1 Ġproduces Ġthe Ġsame Ġcart esian Ġproduct `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Map Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġval Ġnot Split Cartesian Set Result Ġ= Ġcart esian Product Map . toSet () ĊĊĠĠĠĠĠĠĠ Ġval Ġsplit Factor Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġsplit Cartesian Ġ= Ġcart esian Product Map . split ( split Factor ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( split Factor , Ġsplit Cartesian . size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcollected Cartesian Product Ġ= Ġsplit Cartesian . flatten (). toSet () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( not Split Cartesian Set Result , Ġcollected Cartesian Product ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` verify Ġsplit Ġand Ġsimple Ġcart esian Ġproduces Ġthe Ġsame Ġcombinations `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Map Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġval Ġnot Split Cartesian Map Result Ġ= Ġcart esian Product Map . map Ġ{ Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġsplit Factor Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval Ġsplit Cartesian Ġ= Ġcart esian Product Map . split ( split Factor ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( split Factor , Ġsplit Cartesian . size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcollected Cartesian Product Ġ= Ġsplit Cartesian . flatten (). toSet () ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( collected Cartesian Product . contains All ( not Split Cartesian Map Result )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stream Ġshould Ġgenerate Ġall Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġcart esian Product . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toSet ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Cartesian Map . toSet (), Ġactual ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` parallel Ġstream Ġshould Ġgenerate Ġall Ġitems `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcart esian Product Ġ= Ġcart esian Product Of ( data Map ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġcart esian Product . stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. parallel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. collect ( Collectors . toSet ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Cartesian Map . toSet (), Ġactual ) ĊĠĠĠ Ġ} Ċ } Ċ