/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 Ġem u fog Ġcontributors Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ package Ġem u fog . util Ċ Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . jupiter . api . Assertions . assertFalse Ċ import Ġorg . junit . jupiter . api . Assertions . assertNull Ċ import Ġorg . junit . jupiter . api . Assertions . assertTrue Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ internal Ġclass ĠPriority Heap Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` empty Ġheap Ġshould Ġreturn Ġnull Ġfor Ġpeek Ġand Ġpoll `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheap Ġ= ĠPriority Heap < String >() ĊĠĠĠĠĠĠĠ ĠassertNull ( heap . peek ()) ĊĠĠĠĠĠĠĠ ĠassertNull ( heap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` remove Ġshould Ġonly Ġremove Ġonce Ġsuccessfully `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheap Ġ= ĠPriority Heap ( Sample Comparator ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠSample Class ( 0 , Ġ 4 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . remove ( data )) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . remove ( data )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sample Ġsorting Ġof Ġdata Ġand Ġa Ġcomparator `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheap Ġ= ĠPriority Heap ( Sample Comparator ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 0 Ġ= ĠSample Class ( 0 , Ġ 4 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 0 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= ĠSample Class ( 1 , Ġ 4 3 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 1 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= ĠSample Class ( 1 , Ġ 4 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 2 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 2 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data 2 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 1 , Ġheap . peek ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 1 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sorting Ġshould Ġbe Ġbased Ġon Ġcompare Ġset Ġcriteria Ġon Ġequals `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġheap Ġ= ĠPriority Heap ( Sample Comparator ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 0 Ġ= ĠSample Class ( 0 , Ġ 4 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 0 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 1 Ġ= ĠSample Class ( 1 , Ġ 4 2 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 1 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdata 2 Ġ= ĠSample Class ( 1 , Ġ 4 1 ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . add ( data 2 )) ĊĠĠĠĠĠĠĠ ĠassertFalse ( heap . isEmpty ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 2 , Ġheap . peek ()) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( data 2 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . peek ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 0 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 1 , Ġheap . peek ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( data 1 , Ġheap . pop ()) ĊĠĠĠĠĠĠĠ ĠassertTrue ( heap . isEmpty ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠSample Class ( val Ġid : ĠInt , Ġval Ġx : ĠInt ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠSample Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġid Ġ== Ġother . id ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= Ġid Ċ } Ċ Ċ internal Ġclass ĠSample Comparator Ġ: ĠComparator < Sample Class > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġcompare ( o 1 : ĠSample Class , Ġo 2 : ĠSample Class ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġo 1 . x Ġ- Ġo 2 . x ĊĠĠĠ Ġ} Ċ }