package Ġjump aku . unit sof measure Ċ Ċ import Ġorg . hamcrest . Custom Type Safe Matcher Ċ import Ġorg . hamcrest . core . Is .` is ` Ċ import Ġorg . junit . Assert .* Ċ import Ġorg . junit . Test Ċ import Ġkotlin . math . abs ĊĊĊ Ċ class ĠUnit Test Ġ{ ĊĊĠĠĠ Ġclass ĠIs Close To ( val Ġexpected : ĠUnit , Ġval Ġerror : ĠDouble Ġ= Ġ 1 e - 1 0 ): ĠCustom Type Safe Matcher < Unit >(" ") Ġ{ ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmatches S af ely ( item : ĠUnit ): ĠBoolean Ġ= Ġexpected . dimension Ġ== Ġitem . dimension Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected . symbol Ġ== Ġitem . symbol Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġabs ( expected . coefficient Ġ- Ġitem . coefficient ) Ġ<= Ġerror ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġm Ġ= ĠSymbol (" m ") ĊĠĠĠ Ġval Ġmet re Ġ= ĠUnit ( m ) ĊĠĠĠ Ġval Ġkm Ġ= ĠSymbol (" km ") ĊĠĠĠ Ġval Ġk ilo met re Ġ= Ġkm . bind ( 1 e 3 , Ġmet re ) ĊĊĠĠĠ Ġval Ġs Ġ= ĠSymbol (" s ") ĊĠĠĠ Ġval Ġsecond Ġ= ĠUnit ( s ) ĊĠĠĠ Ġval Ġh Ġ= ĠSymbol (" h ") ĊĠĠĠ Ġval Ġhour Ġ= Ġh . bind ( 3 . 6 e 3 , Ġsecond ) ĊĊĠĠĠ Ġval Ġmet re PerSecond Ġ= Ġmet re / second ĊĠĠĠ Ġval Ġk ilo met re Per Hour Ġ= Ġk ilo met re / hour ĊĊĠĠĠ Ġval Ġone Ġ= ĠUnit () ĊĠĠĠ Ġval Ġtwo Ġ= ĠSymbol . empty . bind ( 2 . 0 , Ġone ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Bind () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Bind ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( met re . dimension , Ġ` is `( ki lo met re . dimension )) ĊĠĠĠĠĠĠĠ ĠassertThat ( met re . symbol , Ġ` is `( m )) ĊĠĠĠĠĠĠĠ ĠassertThat ( ki lo met re . symbol , Ġ` is `( km )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( met re . coefficient , Ġ 1 . 0 , Ġ 1 e - 1 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ki lo met re . coefficient , Ġ 1 e 3 , Ġ 1 e - 1 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( met re PerSecond . dimension , Ġ` is `( ki lo met re Per Hour . dimension )) ĊĠĠĠĠĠĠĠ ĠassertThat ( met re PerSecond . symbol , Ġ` is `( m / s )) ĊĠĠĠĠĠĠĠ ĠassertThat ( ki lo met re Per Hour . symbol , Ġ` is `( km / h )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( met re PerSecond . coefficient , Ġ 1 . 0 , Ġ 1 e - 1 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ki lo met re Per Hour . coefficient , Ġ 1 / 3 . 6 , Ġ 1 e - 1 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( one . dimension , Ġ` is `( two . dimension )) ĊĠĠĠĠĠĠĠ ĠassertThat ( one . symbol , Ġ` is `( Symbol . empty )) ĊĠĠĠĠĠĠĠ ĠassertThat ( two . symbol , Ġ` is `( Symbol . empty )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( one . coefficient , Ġ 1 . 0 , Ġ 1 e - 1 0 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( two . coefficient , Ġ 2 . 0 , Ġ 1 e - 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Times () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Times ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġmet re ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġsecond ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġone ĊĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( b Ġ* Ġc ), ĠIs Close To (( a Ġ* Ġb ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( c Ġ* Ġb ), ĠIs Close To (( a Ġ* Ġc ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( c Ġ* Ġa ), ĠIs Close To (( b Ġ* Ġc ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( a Ġ* Ġc ), ĠIs Close To (( b Ġ* Ġa ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( a Ġ* Ġb ), ĠIs Close To (( c Ġ* Ġa ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( b Ġ* Ġa ), ĠIs Close To (( c Ġ* Ġb ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( b Ġ* Ġb ), ĠIs Close To (( a Ġ* Ġb ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( a Ġ* Ġb ), ĠIs Close To (( a Ġ* Ġa ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( c Ġ* Ġc ), ĠIs Close To (( a Ġ* Ġc ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( a Ġ* Ġc ), ĠIs Close To (( a Ġ* Ġa ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( c Ġ* Ġc ), ĠIs Close To (( b Ġ* Ġc ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( b Ġ* Ġc ), ĠIs Close To (( b Ġ* Ġb ) Ġ* Ġc )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( a Ġ* Ġa ), ĠIs Close To (( b Ġ* Ġa ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( b Ġ* Ġa ), ĠIs Close To (( b Ġ* Ġb ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( a Ġ* Ġa ), ĠIs Close To (( c Ġ* Ġa ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( c Ġ* Ġa ), ĠIs Close To (( c Ġ* Ġc ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( b Ġ* Ġb ), ĠIs Close To (( c Ġ* Ġb ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( c Ġ* Ġb ), ĠIs Close To (( c Ġ* Ġc ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( a Ġ* Ġa ), ĠIs Close To (( a Ġ* Ġa ) Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( b Ġ* Ġb ), ĠIs Close To (( b Ġ* Ġb ) Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( c Ġ* Ġc ), ĠIs Close To (( c Ġ* Ġc ) Ġ* Ġc )) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġc , ĠIs Close To ( a )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġa , ĠIs Close To ( a )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġc , ĠIs Close To ( b )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġb , ĠIs Close To ( b )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġc , ĠIs Close To ( c )) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġb , ĠIs Close To ( b Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġc , ĠIs Close To ( c Ġ* Ġb )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġa , ĠIs Close To ( a Ġ* Ġc )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Div () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Div ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġmet re ĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġsecond ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġone ĊĊĠĠĠĠĠĠĠ ĠassertThat (( c Ġ/ Ġa ) Ġ* Ġa , ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a Ġ* Ġ( c Ġ/ Ġa ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat (( c Ġ/ Ġb ) Ġ* Ġb , ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( b Ġ* Ġ( c Ġ/ Ġb ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat (( c Ġ/ Ġc ) Ġ* Ġc , ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c Ġ* Ġ( c Ġ/ Ġc ), ĠIs Close To ( c )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Pow () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Pow ") ĊĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġmet re ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= Ġone ĊĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow ( 3 ), ĠIs Close To ( a Ġ* Ġa Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow ( 2 ), ĠIs Close To ( a Ġ* Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow ( 1 ), ĠIs Close To ( a )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow ( 0 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow (- 1 ), ĠIs Close To ( c Ġ/ Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow (- 2 ), ĠIs Close To ( c Ġ/ Ġa Ġ/ Ġa )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . pow (- 3 ), ĠIs Close To ( c Ġ/ Ġa Ġ/ Ġa Ġ/ Ġa )) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow ( 3 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow ( 2 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow ( 1 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow ( 0 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow (- 1 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow (- 2 ), ĠIs Close To ( c )) ĊĠĠĠĠĠĠĠ ĠassertThat ( c . pow (- 3 ), ĠIs Close To ( c )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Rename () Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln (" Rename ") ĊĠĠĠĠĠĠĠ Ġval Ġkm Per H Ġ= ĠSymbol (" km / h ") ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġk ilo met re Per Hour . rename ( km Per H ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( a . dimension , Ġ` is `( ki lo met re Per Hour . dimension )) ĊĠĠĠĠĠĠĠ ĠassertThat ( a . symbol , Ġ` is `( km Per H )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( a . coefficient , Ġk ilo met re Per Hour . coefficient , Ġ 1 e - 1 0 ) ĊĠĠĠ Ġ} Ċ Ċ }