package Ġeu . pret ix . lib pret ix sync . utils Ċ Ċ import Ġcom . fasterxml . jackson . databind . ObjectMapper Ċ import Ġeu . pret ix . lib pret ix sync . test . read Resource Ċ import Ġeu . pret ix . lib pret ix sync . utils . logic .* Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ Ċ /** Ċ Ġ* ĠBased Ġon Ġhttps :// github . com / adv antage f se / json - logic - kotlin Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 9 ĠAdv antage ĠF SE Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠChanges : Ċ Ġ* Ġ- ĠBack port Ġto ĠJ Unit 4 Ċ Ġ* Ġ- ĠBundle Ġofficial Ġtests Ċ Ġ*/ Ċ Ċ class ĠJson Logic Tests Ġ{ ĊĊĠĠĠ Ġfun Ġclean ( i : ĠString ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ" ([ 0 - 9 ]) \\. 0 ( , | ]| $) ". to Regex (). replace ( i , Ġ"$ 1 $ 2 ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġofficial Tests () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtests Ġ= ĠObjectMapper (). readValue ( read Resource (" json logic / tests . json "), ĠList :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġfor Ġ( t Ġin Ġtests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( t ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠList < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . out . println ( t . toString () Ġ+ Ġ" Ġ- Ġ" Ġ+ ĠObjectMapper (). writeValue AsString ( t [ 0 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġl . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjectMapper (). writeValue AsString ( t [ 0 ]), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObjectMapper (). writeValue AsString ( t [ 1 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġexpected Ġ= Ġt [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠDouble Ġ&& Ġexpected Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġexpected . toString (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠList < *> Ġ&& Ġresult . first OrNull () Ġis ĠDouble Ġ&& Ġexpected Ġis ĠList < *> Ġ&& Ġexpected . first OrNull () Ġis ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġexpected . map Ġ{ Ġit . toString (). toDouble () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġis ĠList < *> Ġ&& Ġresult . isEmpty () Ġ&& Ġexpected Ġis ĠList < *> Ġ&& Ġexpected . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Ġ= Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpected , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsimple () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ("{ \" == \": [ 1 , 1 ]} ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompound String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{\" and \" Ġ: Ġ[" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ{ Ġ\ "> \" Ġ: Ġ[ 3 , 1 ] Ġ}, " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ{ Ġ\" < \" Ġ: Ġ[ 1 , 3 ] Ġ}" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"] Ġ}" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompound () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ">" Ġto ĠlistOf ( 3 , Ġ 1 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ("< " Ġto ĠlistOf ( 1 , Ġ 3 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdata String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ Ġ\" var \" Ġ: Ġ[ \" a \"] Ġ} ", Ġ// ĠRule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ Ġ\" a \" Ġ: Ġ 1 . 2 , Ġ\" b \" Ġ: Ġ 2 Ġ}" Ġ// ĠData ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 . 2 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdata () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" var " Ġto ĠlistOf (" a ")) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmap Of (" a " Ġto Ġ 1 , Ġ" b " Ġto Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic , Ġdata ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġarray () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{\" var \" Ġ: Ġ 1 Ġ} ", Ġ// ĠRule ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ Ġ\" apple \", Ġ\" ban ana \", Ġ\" car rot \" Ġ] " Ġ// ĠData ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" ban ana ", Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcustom Operation 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġplus ( list : ĠList < Any ?> ?, Ġ@ Suppress (" UNUSED _ PARAMETER ") Ġdata : ĠAny ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list Ġ!= Ġnull Ġ&& Ġlist . size Ġ> Ġ 1 ) Ġreturn Ġlist [ 0 ]. toString (). toDouble () Ġ+ Ġlist [ 1 ]. toString (). toDouble () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġjson Logic . add Operation (" plus ", Ġ:: plus ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ("{ \" plus \": [ 2 3 , Ġ 1 9 ] }", Ġnull ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 4 2 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcustom Operation 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġjson Logic . add Operation (" sqrt ") Ġ{ Ġl , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ġ!= Ġnull Ġ&& Ġl . size Ġ> Ġ 0 ) ĠMath . sqrt ( l [ 0 ]. toString (). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ("{ \" sqrt \":\" 9 \" }") ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcustom Operation 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġjson Logic . add Operation (" Math . random ") Ġ{ Ġ_, Ġ_ Ġ-> ĠMath . random () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ("{ \" Math . random \": [] }", Ġ"{} ") ĊĠĠĠĠĠĠĠ Ġassert ( result Ġas ĠDouble Ġin Ġ 0 . 0 .. 1 . 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcustom Operation 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġjson Logic . add Operation (" pow ") Ġ{ Ġl , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( l Ġ!= Ġnull Ġ&& Ġl . size Ġ> Ġ 1 ) ĠMath . pow ( l [ 0 ]. toString (). toDouble (), Ġl [ 1 ]. toString (). toDouble ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( map Of (" pow " Ġto ĠlistOf ( 3 , Ġ 2 ))) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 9 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠNotImplementedError :: class ) ĊĠĠĠ Ġfun Ġunknown Custom Operation () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġjson Logic . apply ( map Of (" hello " Ġto ĠlistOf ( 1 , Ġ 2 , Ġ 3 )), Ġsafe Ġ= Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġunknown Custom Operation Safe () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( map Of (" hello " Ġto ĠlistOf ( 1 , Ġ 2 , Ġ 3 )), Ġsafe Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstring Comparison Bug () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" == =" Ġto ĠlistOf ( map Of (" var " Ġto ĠlistOf (" a ")), Ġ" two ")) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmap Of (" a " Ġto Ġ" one ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic , Ġdata ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnull Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( null ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" log " Ġto Ġ" apple ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" apple ", Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtruth y Null () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġnull . truth y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtruth y String () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġ" hello ". truth y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtruth y Array () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , ĠarrayOf ( 1 ). truth y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtruth y Empty Array () Ġ{ ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġempty Array < Int >(). truth y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtruth y Other () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , ĠOther (). truth y ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdouble List Other () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" +" Ġto ĠlistOf ( 1 , Ġ 2 , ĠOther ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdouble Value Exception () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" +" Ġto ĠlistOf ( 1 , Ġ 2 , Ġ" hello ")) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġin Other () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" in " Ġto Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġminus More () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of ("- " Ġto ĠlistOf ( 2 , Ġ 1 , Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 . 0 , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġminus None () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of ("- " Ġto ĠlistOf < Int >()) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Other () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf ( 1 , ĠOther ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Any Comp ar ables () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () Ġ: ĠComparable < Other > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠOther ) Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf ( Other (), ĠOther ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare With Other Comparable () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () Ġ: ĠComparable < Other > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠOther ) Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf ( 1 , ĠOther ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Null With Other Comparable () Ġ{ ĊĠĠĠĠĠĠĠ Ġclass ĠOther () Ġ: ĠComparable < Other > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompare To ( other : ĠOther ) Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf ( null , ĠOther ())) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Null s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf ( null , Ġnull )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare ListOf More () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of ("< " Ġto ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsubstr More Params () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" substr " Ġto ĠlistOf (" json logic ", Ġ 4 , Ġ 5 , Ġ 6 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsubstr Ext reme () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" substr " Ġto ĠlistOf (" json logic ", Ġ 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġinvalid List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" none " Ġto Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Invalid Var () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" var " Ġto Ġ" a .") ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġmap Of (" a " Ġto Ġmap Of (" b " Ġto Ġ 1 )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic , Ġdata ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( null , Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompare Boolean With String () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġjson Logic Ġ= ĠJson Logic () ĊĠĠĠĠĠĠĠ Ġval Ġlogic Ġ= Ġmap Of (" ==" Ġto ĠlistOf (" true ", Ġtrue )) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġjson Logic . apply ( logic ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġresult ) ĊĠĠĠ Ġ} Ċ }