package Ġorg . jetbrains . sk ia . tests Ċ Ċ import Ġorg . jetbrains . sk ia . Color 4 f Ċ import Ġorg . jetbrains . sk ia . Matrix 3 3 Ċ import Ġorg . jetbrains . sk ia . Point Ċ import Ġorg . jetbrains . sk ia . Rect Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . test . assertNotNull Ċ import Ġkotlin . test . assertTrue Ċ Ċ private Ġconst Ġval ĠEPS ILON Ġ= Ġ 0 . 0 0 0 0 1 f Ċ Ċ internal Ġfun Ġassert Close En ough ( expected : ĠFloat , Ġactual : ĠFloat , Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ ĠassertTrue ( abs ( expected Ġ- Ġactual ) Ġ< Ġepsilon , Ġmessage Ġ= Ġ" expected =$ expected , Ġactual =$ actual , Ġeps =$ epsilon ") Ċ } Ċ Ċ internal Ġfun Ġassert Close En ough ( expected : ĠPoint , Ġactual : ĠPoint ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ Ġassert Close En ough ( expected . x , Ġactual !!. x , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . y , Ġactual . y , Ġepsilon ) Ċ } Ċ Ċ internal Ġfun Ġassert Close En ough ( expected : ĠMatrix 3 3 , Ġactual : ĠMatrix 3 3 ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ Ġexpected . mat . zip ( actual !!. mat ). forEach Ġ{ Ġ( a , Ġb ) Ġ-> Ġassert Close En ough ( a , Ġb , Ġepsilon ) Ġ} Ċ } Ċ Ċ internal Ġfun Ġassert Close En ough ( expected : ĠColor 4 f , Ġactual : ĠColor 4 f ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ Ġassert Close En ough ( expected . r , Ġactual !!. r , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . g , Ġactual . g , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . b , Ġactual . b , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . a , Ġactual . a , Ġepsilon ) Ċ } Ċ Ċ internal Ġfun Ġassert Close En ough ( expected : ĠRect , Ġactual : ĠRect ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ Ġassert Close En ough ( expected . left , Ġactual !!. left , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . top , Ġactual . top , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . right , Ġactual . right , Ġepsilon ) ĊĠĠĠ Ġassert Close En ough ( expected . bottom , Ġactual . bottom , Ġepsilon ) Ċ } Ċ Ċ internal Ġfun Ġassert Content Close En ough ( expected : ĠFloat Array , Ġactual : ĠFloat Array ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ Ġif Ġ( actual Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" expected Ġ$ expected , Ġgot Ġnull ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġexpected . indices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( abs ( expected [ i ] Ġ- Ġactual [ i ]) Ġ> Ġepsilon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" results Ġdiffer Ġat Ġindex $ i , Ġexpected Ġ${ expected [ i ]}, Ġgot Ġ${ actual [ i ]} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġfun Ġassert Content Close En ough ( expected : ĠArray < Point >, Ġactual : ĠArray < Point > ?, Ġepsilon : ĠFloat Ġ= ĠEPS ILON ) Ġ{ ĊĠĠĠ ĠassertNotNull ( actual ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġexpected . indices ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert Close En ough ( expected [ i ], Ġactual [ i ], Ġepsilon ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠAssertionError (" results Ġdiffer Ġat Ġindex Ġ$ i , Ġ${ e . message }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ