package Ġcom . github . quad ins a 5 if . finding and query ing text . service . implementation Ċ Ċ import Ġcom . github . quad ins a 5 if . finding and query ing text . model . Entry Ċ import Ġcom . github . quad ins a 5 if . finding and query ing text . model . vocabulary . Mutable Vocab ulary Ċ import Ġcom . github . quad ins a 5 if . finding and query ing text . model . vocabulary . implementation . InMemory Vocab ulary Impl Ċ import Ġcom . github . quad ins a 5 if . finding and query ing text . service . Query Solver Ċ import Ġcom . nat pr y ce . ham k rest . assertion . assertThat Ċ import Ġcom . nat pr y ce . ham k rest . equalTo Ċ import Ġorg . jetbrains . spe k . api . Spe k Ċ import Ġorg . jetbrains . spe k . api . dsl . given Ċ import Ġorg . jetbrains . spe k . api . dsl . it Ċ import Ġorg . jetbrains . spe k . api . dsl . on Ċ import Ġorg . junit . platform . runner . JUnit Platform Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( JUnit Platform :: class ) Ċ object ĠNa ive Solver Impl Test Ġ: ĠSpe k ({ ĊĊĠ Ġval Ġd 1 Ġ= Ġ 1 ĊĠ Ġval Ġd 2 Ġ= Ġ 2 ĊĠ Ġval Ġd 3 Ġ= Ġ 3 ĊĠ Ġval Ġd 4 Ġ= Ġ 4 ĊĠ Ġval Ġd 5 Ġ= Ġ 5 ĊĠ Ġval Ġd 6 Ġ= Ġ 6 ĊĊĠ Ġval Ġposting List T 1 Ġ= ĠlistOf ( ĊĠĠĠĠĠ ĠEntry ( d 2 , Ġ. 9 f ), ĊĠĠĠĠĠ ĠEntry ( d 5 , Ġ. 8 f ), ĊĠĠĠĠĠ ĠEntry ( d 6 , Ġ. 7 f ), ĊĠĠĠĠĠ ĠEntry ( d 4 , Ġ. 6 f ), ĊĠĠĠĠĠ ĠEntry ( d 1 , Ġ. 5 f ), ĊĠĠĠĠĠ ĠEntry ( d 3 , Ġ. 4 f ) ĊĠ Ġ) ĊĊĠ Ġval Ġposting List T 2 Ġ= ĠlistOf ( ĊĠĠĠĠĠ ĠEntry ( d 3 , Ġ. 8 5 f ), ĊĠĠĠĠĠ ĠEntry ( d 5 , Ġ. 8 f ), ĊĠĠĠĠĠ ĠEntry ( d 2 , Ġ. 7 5 f ), ĊĠĠĠĠĠ ĠEntry ( d 6 , Ġ. 7 4 f ), ĊĠĠĠĠĠ ĠEntry ( d 1 , Ġ. 7 4 f ), ĊĠĠĠĠĠ ĠEntry ( d 4 , Ġ. 7 f ) ĊĠ Ġ) ĊĊĠ Ġval Ġposting Lists : ĠMutable Vocab ulary Ġ= ĠIn Memory Vocab ulary Impl () ĊĠ Ġposting List T 1 . forEach Ġ{ Ġposting Lists . put Entry (" t 1 ", Ġit ) Ġ} ĊĠ Ġposting List T 2 . forEach Ġ{ Ġposting Lists . put Entry (" t 2 ", Ġit ) Ġ} ĊĊĊĠ Ġgiven (" a Ġna ive Ġsolver ") Ġ{ ĊĠĠĠ Ġval Ġsolver : ĠQuery Solver Ġ= ĠNa ive Solver Impl () ĊĠĠĠ Ġon (" answer ing Ġwith Ġparameters : Ġterms =[ \" t 1 \", Ġ\" t 2 \" ], Ġk = 3 ") Ġ{ ĊĠĠĠĠĠ Ġval Ġanswer Ġ= Ġsolver . answer ( post ing Lists , ĠarrayOf (" t 1 ", Ġ" t 2 "), Ġ 3 ) ĊĠĠĠĠĠ Ġval Ġfirst Ġ= Ġanswer . next (); ĊĠĠĠĠĠ Ġit (" first Ġresult Ġshould Ġbe Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" first Ġresult Ġis Ġsome ", Ġfirst . isPresent , ĠequalTo ( true )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit (" first Ġresult Ġshould Ġbe Ġd 2 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( d 2 , ĠequalTo ( first . get ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġsecond Ġ= Ġanswer . next () ĊĠĠĠĠĠ Ġit (" second Ġresult Ġshould Ġbe Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" second Ġresult Ġis Ġsome ", Ġsecond . isPresent , ĠequalTo ( true )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit (" second Ġresult Ġshould Ġbe Ġd 5 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( d 5 , ĠequalTo ( second . get ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġthird Ġ= Ġanswer . next () ĊĠĠĠĠĠ Ġit (" third Ġresult Ġshould Ġbe Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" third Ġresult Ġis Ġsome ", Ġthird . isPresent , ĠequalTo ( true )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit (" third Ġresult Ġshould Ġbe Ġd 6 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( d 6 , ĠequalTo ( third . get ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġfourth Ġ= Ġanswer . next () ĊĠĠĠĠĠ Ġit (" four th Ġresult Ġshould Ġbe Ġnone Ġ( empty )") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" four th Ġresult Ġis Ġnone Ġ( empty )", Ġfourth . isPresent , ĠequalTo ( false )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġon (" answer ing Ġwith Ġparameters : Ġterms [\" t 1 \" ], Ġk = 2 ") Ġ{ ĊĠĠĠĠĠ Ġval Ġanswer Ġ= Ġsolver . answer ( post ing Lists , ĠarrayOf (" t 1 "), Ġ 2 ) ĊĠĠĠĠĠ Ġval Ġfirst Ġ= Ġanswer . next (); ĊĠĠĠĠĠ Ġit (" first Ġresult Ġshould Ġbe Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" first Ġresult Ġis Ġsome ", Ġfirst . isPresent , ĠequalTo ( true )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit (" first Ġresult Ġshould Ġbe Ġd 2 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( d 2 , ĠequalTo ( first . get ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġsecond Ġ= Ġanswer . next () ĊĠĠĠĠĠ Ġit (" second Ġresult Ġshould Ġbe Ġsome ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" second Ġresult Ġis Ġsome ", Ġsecond . isPresent , ĠequalTo ( true )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġit (" second Ġresult Ġshould Ġbe Ġd 5 ") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat ( d 5 , ĠequalTo ( second . get ())) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġval Ġthird Ġ= Ġanswer . next () ĊĠĠĠĠĠ Ġit (" third Ġresult Ġshould Ġbe Ġnone Ġ( empty )") Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" third Ġresult Ġis Ġnone Ġ( empty )", Ġthird . isPresent , ĠequalTo ( false )) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ} Ċ Ċ })