/* Ċ Ġ* ĠCopyright ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "). Ċ Ġ* ĠYou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠA Ġcopy Ġof Ġthe ĠLicense Ġis Ġlocated Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* Ġor Ġin Ġthe Ġ" license " Ġfile Ġaccompanying Ġthis Ġfile . ĠThis Ġfile Ġis Ġdistributed Ċ Ġ* Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ċ Ġ* Ġexpress Ġor Ġimplied . ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ċ Ġ* Ġ Ġpermissions Ġand Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . part i ql . pig . domain Ċ Ċ import Ġcom . amazon . ion . system . Ion Reader Builder Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . part i ql . pig . domain . model . Ar ity Ċ import Ġorg . part i ql . pig . domain . model . DataType Ċ import Ġorg . part i ql . pig . domain . model . Type Un iverse Ċ import Ġorg . part i ql . pig . domain . parser . parse Type Un iverse Ċ Ċ class ĠP erm ute Domain Tests Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRuns Ġa Ġsimple Ġtype Ġuniverse Ġthat Ġuses Ġthrough Ġall Ġprocessing Ġsteps Ġand Ġverifies Ġthe Ġresult . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠH appy Ġpath Ġonly -- no Ġerror Ġhandling Ġbeing Ġtested Ġhere . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠTODO : Ġ ĠI Ġbelieve Ġequality Ġis Ġwell Ġimplemented Ġnow , Ġcan Ġthis Ġtest Ġbe Ġsimplified ? ĊĠĠĠĠ Ġ* ĠAlso , Ġequality Ġfor Ġtype Ġdomain Ġobjects Ġis Ġnot Ġwell Ġimplemented Ġwhich Ġis Ġthe Ġreason Ġwe Ġdo Ġall ĊĠĠĠĠ Ġ* Ġthe Ġassertions Ġinstead Ġof Ġcomparing Ġtest _ domain _ ex Ġto Ġa Ġparsed Ġexample Ġconcrete Ġdomain . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġperm ute S moke Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtype Un iverse With Extensions Ġ= Ġ""" ĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ( define Ġtest _ domain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( domain ĠĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( product Ġpair Ġfirst :: ion Ġsecond :: ion ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( product Ġother _ pair Ġfirst :: symbol Ġsecond :: symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( sum Ġthing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( a Ġx :: pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( b Ġy :: symbol ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( c Ġz :: int )))) ĊĊĠĠĠĠĠĠĠ Ġ( define Ġper muted _ domain ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( perm ute _ domain Ġtest _ domain ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( exclude Ġpair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( include ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( product Ġpair Ġn :: int Ġt :: int ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( product Ġnew _ pair Ġm :: symbol Ġn :: int )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( with Ġthing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( exclude Ġa ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( include ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( d Ġa :: pair ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( e Ġb :: symbol ))))) ĊĠĠĠĠĠĠĠ Ġ""" ĊĊĠĠĠĠĠĠĠ Ġval Ġtd : ĠType Un iverse Ġ= ĠIon Reader Builder . standard (). build ( type Un iverse With Extensions ). use Ġ{ Ġparse Type Un iverse ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcon cre tes Ġ= Ġtd . compute Type Domains () ĊĊĠĠĠĠĠĠĠ Ġ// ĠF ist Ġwe Ġperform Ġsome Ġbasic Ġassertions Ġon Ġthe Ġconcrete Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġconcrete Domain Ġ= Ġcon cre tes . single Ġ{ Ġit . tag Ġ== Ġ" test _ domain " Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġoriginal Ġdomain , Ġthe Ġ` pair ` Ġtype Ġconsists Ġof Ġtwo Ġ ions ĊĠĠĠĠĠĠĠ Ġval Ġion Pair Ġ= Ġconcrete Domain . types . single Ġ{ Ġit . tag Ġ== Ġ" pair " Ġ} Ġas ĠDataType . User Type . Tuple ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġion Pair . named Elements . size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( ion Pair . named Elements . all Ġ{ Ġit . type Reference . typeName Ġ== Ġ" ion " Ġ&& Ġit . type Reference . arity Ġis ĠAr ity . Required Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġtest . domain Ġthe Ġ" thing " Ġsum Ġhas Ġ" a ", Ġ" b ", Ġand Ġ" c " Ġvariants . ĊĠĠĠĠĠĠĠ Ġval Ġthing Ġ= Ġconcrete Domain . types . single Ġ{ Ġit . tag Ġ== Ġ" thing " Ġ} Ġas ĠDataType . User Type . Sum ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġthing . variants . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġthing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" a "} . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġthing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" b "} . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġthing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" c "} . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThen Ġwe Ġverify Ġthe Ġper muted Ġdomain ĊĠĠĠĠĠĠĠ Ġval Ġper muted Domain Ġ= Ġcon cre tes . single Ġ{ Ġit . tag Ġ== Ġ" per muted _ domain " Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠP erm ute Ġdomain Ġstill Ġhas Ġ 3 Ġtypes Ġof Ġtest _ domain Ġ+ Ġ 1 Ġmore ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġper muted Domain . user Types . size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( per muted Domain . types . map Ġ{ Ġit . tag Ġ}. contains All ( listOf (" pair ", Ġ" thing ", Ġ" other _ pair ", Ġ" new _ pair "))) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġper muted Ġdomain , Ġthe Ġ' pair ' Ġtype Ġconsists Ġof Ġtwo Ġints ' ĊĠĠĠĠĠĠĠ Ġval Ġint Pair Ġ= Ġper muted Domain . types . single Ġ{ Ġit . tag Ġ== Ġ" pair " Ġ} Ġas ĠDataType . User Type . Tuple ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġint Pair . named Elements . size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( int Pair . named Elements . all Ġ{ Ġit . type Reference . typeName Ġ== Ġ" int " Ġ&& Ġit . type Reference . arity Ġis ĠAr ity . Required Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIn Ġthe Ġper muted Ġdomain , Ġthe Ġ" thing . a " Ġvariant Ġhas Ġbeen Ġreplaced Ġwith Ġ" thing . d " Ġand Ġ" thing . e " Ġhas Ġbeen Ġadded ĊĠĠĠĠĠĠĠ Ġval Ġex Thing Ġ= Ġper muted Domain . types . single Ġ{ Ġit . tag Ġ== Ġ" thing " Ġ} Ġas ĠDataType . User Type . Sum ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 , Ġex Thing . variants . size ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( ex Thing . variants . none Ġ{ Ġit . tag Ġ== Ġ" a "}) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġex Thing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" b "} . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġex Thing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" c "} . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġex Thing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" d "} . size ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġex Thing . variants . filter Ġ{ Ġit . tag Ġ== Ġ" e "} . size ) ĊĠĠĠ Ġ} Ċ } Ċ