import ĠJson Logic Result . Null Result Failure Ċ import ĠJson Logic Result . Success Ċ import Ġio . kot est . core . spec . style . Fun Spec Ċ import Ġio . kot est . dat atest . with Data Ċ import Ġio . kot est . matchers . shouldBe Ċ Ċ class ĠFind Test Ġ: ĠFun Spec ({ ĊĠĠĠ Ġval Ġlogic Engine Ġ= ĠJson Logic Engine . Builder (). add Functional Operation (" find ", ĠFind ). build () ĊĠĠĠĠĊĠĠĠ Ġwith Data ( ĊĠĠĠĠĠĠĠ Ġname Fn Ġ= Ġ{ Ġinput Ġ-> Ġ" Should Ġevaluated Ġ${ input . expression } Ġwith Ġgiven Ġ${ input . data } Ġresult Ġin Ġ${ input . result }" Ġ}, ĊĠĠĠĠĠĠĠ Ġts Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto Ġ 1 . 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto Ġ" ban ana "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto Ġempty List < Any > ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( null , Ġmap Of (" var " Ġto Ġ"")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( emptyList < String >(), Ġmap Of (" var " Ġto Ġ"")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( false , Ġfalse ), Ġmap Of (" var " Ġto Ġ"")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( true , Ġfalse ), Ġmap Of (" var " Ġto Ġ"")) ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( true , Ġfalse ))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" find " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" filter " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" var " Ġto Ġ" inte gers "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ("% " Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 2 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), Ġmap Of ( ">" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmap Of (" inte gers " Ġto ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf (- 1 , Ġ 1 , Ġ 2 , Ġ 3 ), Ġmap Of ( ">" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ġmap Of (" ==" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ġmap Of (" == =" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf ( 0 , Ġ 0 , Ġ 0 , Ġ 0 ), Ġmap Of (" ! =" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" find " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (- 1 , Ġ" b ", Ġ" a ", Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ">" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of (" find " Ġto ĠlistOf ( listOf (- 1 , Ġ 1 , Ġ 2 , Ġ 3 ), Ġmap Of ("< " Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )))), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess (- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" find " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" ban ana ", Ġ" apple "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" ==" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ" apple ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess (" apple ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" find " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" var " Ġto Ġ" fr uits "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of (" ==" Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ" pine apple ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġmap Of (" fr uits " Ġto ĠlistOf (" apple ", Ġ" ban ana ", Ġ" pine apple ")), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠSuccess (" pine apple ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTest Input ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexpression Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" find " Ġto ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" a ", Ġ" b ", Ġ" c "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ("< " Ġto ĠlistOf ( map Of (" var " Ġto Ġ""), Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠNull Result Failure ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġgiven ĊĠĠĠ Ġ) Ġ{ Ġtest Input : ĠTest Input Ġ-> ĊĠĠĠĠĠĠĠ Ġ// Ġwhen ĊĠĠĠĠĠĠĠ Ġval Ġevaluation Result Ġ= Ġlogic Engine . evaluate ( test Input . expression , Ġtest Input . data ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġthen ĊĠĠĠĠĠĠĠ Ġevaluation Result ĠshouldBe Ġtest Input . result ĊĠĠĠ Ġ} Ċ }) Ċ