/* Ċ Ġ* ĠCopyright Ġ( c ) ĠMeta ĠPlatform s , ĠInc . Ġand Ġaffiliates . Ċ Ġ* Ċ Ġ* ĠThis Ġsource Ġcode Ġis Ġlicensed Ġunder Ġthe ĠMIT Ġlicense Ġfound Ġin Ġthe Ċ Ġ* ĠLICENSE Ġfile Ġin Ġthe Ġroot Ġdirectory Ġof Ġthis Ġsource Ġtree . Ċ Ġ*/ Ċ Ċ package Ġcom . facebook . re dex test . kt Ċ Ċ import Ġorg . fest . assertions . api . Assertions . assertThat Ċ import Ġorg . junit . Test Ċ Ċ enum Ġclass ĠA Ġ{ ĊĠ ĠA 0 , ĊĠ ĠA 1 , ĊĠ ĠA 2 Ċ } Ċ Ċ enum Ġclass ĠB Ġ{ ĊĠ ĠB 0 , ĊĠ ĠB 1 , ĊĠ ĠB 2 Ċ } Ċ Ċ enum Ġclass ĠBig Ġ{ ĊĠ ĠBIG 0 1 , ĊĠ ĠBIG 0 2 , ĊĠ ĠBIG 0 3 , ĊĠ ĠBIG 0 4 , ĊĠ ĠBIG 0 5 , ĊĠ ĠBIG 0 6 , ĊĠ ĠBIG 0 7 , ĊĠ ĠBIG 0 8 , ĊĠ ĠBIG 0 9 , ĊĠ ĠBIG 1 0 , ĊĠ ĠBIG 1 1 , ĊĠ ĠBIG 1 2 , ĊĠ ĠBIG 1 3 , ĊĠ ĠBIG 1 4 , ĊĠ ĠBIG 1 5 , ĊĠ ĠBIG 1 6 , ĊĠ ĠBIG 1 7 , ĊĠ ĠBIG 1 8 , ĊĠ ĠBIG 1 9 , ĊĠ ĠBIG 2 0 Ċ } Ċ Ċ public Ġfun Ġuse A ( elem : ĠA ): ĠInt Ġ= ĊĠĠĠ Ġwhen Ġ( elem ) Ġ{ ĊĠĠĠĠĠ ĠA . A 0 Ġ-> Ġ 4 0 ĊĠĠĠĠĠ ĠA . A 2 Ġ-> Ġ 4 2 ĊĠĠĠĠĠ Ġelse Ġ-> Ġ 4 1 ĊĠĠĠ Ġ} Ċ Ċ public Ġfun Ġuse B ( elem : ĠB ): ĠInt Ġ= ĊĠĠĠ Ġwhen Ġ( elem ) Ġ{ ĊĠĠĠĠĠ ĠB . B 0 Ġ-> Ġ 4 3 ĊĠĠĠĠĠ ĠB . B 2 Ġ-> Ġ 4 5 ĊĠĠĠĠĠ Ġelse Ġ-> Ġ 4 4 ĊĠĠĠ Ġ} Ċ Ċ public Ġfun Ġuse AA gain ( elem : ĠA ): ĠInt Ġ= ĊĠĠĠ Ġwhen Ġ( elem ) Ġ{ ĊĠĠĠĠĠ ĠA . A 0 Ġ-> Ġ 4 6 ĊĠĠĠĠĠ ĠA . A 1 Ġ-> Ġ 4 7 ĊĠĠĠĠĠ Ġelse Ġ-> Ġ 4 8 ĊĠĠĠ Ġ} Ċ Ċ public Ġfun Ġwith Other Code ( elem : ĠB , Ġb : ĠBoolean , Ġo : ĠAny ?): ĠInt Ġ= ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġif Ġ( b ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( elem ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠB . B 0 Ġ-> Ġ 4 9 ĊĠĠĠĠĠĠĠĠĠ ĠB . B 1 Ġ-> Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠ ĠB . B 2 Ġ-> Ġ 5 1 ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 5 0 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġo !!. hashCode () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ(_ : ĠNullPointerException ) Ġ{ ĊĠĠĠĠĠĠ 4 0 4 ĊĠĠĠ Ġ} Ċ Ċ public Ġfun Ġuse Big ( elem : ĠBig ): ĠInt Ġ= ĊĠĠĠ Ġwhen Ġ( elem ) Ġ{ ĊĠĠĠĠĠ ĠBig . BIG 0 1 Ġ-> Ġ 1 ĊĠĠĠĠĠ ĠBig . BIG 0 2 Ġ-> Ġ 2 ĊĠĠĠĠĠ ĠBig . BIG 0 3 Ġ-> Ġ 3 ĊĠĠĠĠĠ ĠBig . BIG 0 4 Ġ-> Ġ 4 ĊĠĠĠĠĠ ĠBig . BIG 0 5 Ġ-> Ġ 5 ĊĠĠĠĠĠ ĠBig . BIG 0 6 Ġ-> Ġ 6 ĊĠĠĠĠĠ ĠBig . BIG 0 7 Ġ-> Ġ 7 ĊĠĠĠĠĠ ĠBig . BIG 0 8 Ġ-> Ġ 8 ĊĠĠĠĠĠ ĠBig . BIG 0 9 Ġ-> Ġ 9 ĊĠĠĠĠĠ ĠBig . BIG 1 0 Ġ-> Ġ 1 0 ĊĠĠĠĠĠ ĠBig . BIG 1 1 Ġ-> Ġ 1 1 ĊĠĠĠĠĠ ĠBig . BIG 1 2 Ġ-> Ġ 1 2 ĊĠĠĠĠĠ ĠBig . BIG 1 3 Ġ-> Ġ 1 3 ĊĠĠĠĠĠ ĠBig . BIG 1 4 Ġ-> Ġ 1 4 ĊĠĠĠĠĠ ĠBig . BIG 1 5 Ġ-> Ġ 1 5 ĊĠĠĠĠĠ ĠBig . BIG 1 6 Ġ-> Ġ 1 6 ĊĠĠĠĠĠ ĠBig . BIG 1 7 Ġ-> Ġ 1 7 ĊĠĠĠĠĠ ĠBig . BIG 1 8 Ġ-> Ġ 1 8 ĊĠĠĠĠĠ ĠBig . BIG 1 9 Ġ-> Ġ 1 9 ĊĠĠĠĠĠ ĠBig . BIG 2 0 Ġ-> Ġ 2 0 ĊĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException () ĊĠĠĠ Ġ} Ċ Ċ class ĠOpt imize Enums Test Ġ{ ĊĠ Ġ@ Test ĊĠ Ġfun Ġtest A () Ġ{ ĊĠĠĠ ĠassertThat ( use A ( A . A 0 )). isEqualTo ( 4 0 ) ĊĠĠĠ ĠassertThat ( use A ( A . A 1 )). isEqualTo ( 4 1 ) ĊĠĠĠ ĠassertThat ( use A ( A . A 2 )). isEqualTo ( 4 2 ) ĊĊĠĠĠ ĠassertThat ( use AA gain ( A . A 0 )). isEqualTo ( 4 6 ) ĊĠĠĠ ĠassertThat ( use AA gain ( A . A 1 )). isEqualTo ( 4 7 ) ĊĠĠĠ ĠassertThat ( use AA gain ( A . A 2 )). isEqualTo ( 4 8 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest B () Ġ{ ĊĠĠĠ ĠassertThat ( use B ( B . B 0 )). isEqualTo ( 4 3 ) ĊĠĠĠ ĠassertThat ( use B ( B . B 1 )). isEqualTo ( 4 4 ) ĊĠĠĠ ĠassertThat ( use B ( B . B 2 )). isEqualTo ( 4 5 ) ĊĊĠĠĠ Ġval Ġo Ġ= ĠObject () ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 0 , Ġtrue , Ġnull )). isEqualTo ( 4 9 ) ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 1 , Ġtrue , Ġnull )). isEqualTo ( 5 0 ) ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 2 , Ġtrue , Ġo )). isEqualTo ( 5 1 ) ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 0 , Ġfalse , Ġnull )). isEqualTo ( 4 0 4 ) ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 1 , Ġfalse , Ġo )). isEqualTo ( o . hashCode ()) ĊĠĠĠ ĠassertThat ( with Other Code ( B . B 2 , Ġfalse , Ġnull )). isEqualTo ( 4 0 4 ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Big () Ġ{ ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 1 )). isEqualTo ( 1 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 2 )). isEqualTo ( 2 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 3 )). isEqualTo ( 3 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 4 )). isEqualTo ( 4 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 5 )). isEqualTo ( 5 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 6 )). isEqualTo ( 6 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 7 )). isEqualTo ( 7 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 8 )). isEqualTo ( 8 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 0 9 )). isEqualTo ( 9 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 0 )). isEqualTo ( 1 0 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 1 )). isEqualTo ( 1 1 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 2 )). isEqualTo ( 1 2 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 3 )). isEqualTo ( 1 3 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 4 )). isEqualTo ( 1 4 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 5 )). isEqualTo ( 1 5 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 6 )). isEqualTo ( 1 6 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 7 )). isEqualTo ( 1 7 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 8 )). isEqualTo ( 1 8 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 1 9 )). isEqualTo ( 1 9 ) ĊĠĠĠ ĠassertThat ( use Big ( Big . BIG 2 0 )). isEqualTo ( 2 0 ) ĊĠ Ġ} Ċ } Ċ