;; Extension — result pagination (offset / limit) over ranked results. ;; Corpus (tf of "x" descending): 1 x4 2 x3 3 x2 4 x1 5 y(no x) ;; rankTfIdf ["x"] -> [1,2,3,4] (define page-setup "idx = indexDoc 5 \"y\" (indexDoc 4 \"x\" (indexDoc 3 \"x x\" (indexDoc 2 \"x x x\" (indexDoc 1 \"x x x x other\" emptyIndex))))\n") (define page-cases (list (list "first page" "pageTfIdf 0 2 [\"x\"] idx" (list 1 2)) (list "second page" "pageTfIdf 2 2 [\"x\"] idx" (list 3 4)) (list "sliding window" "pageTfIdf 1 2 [\"x\"] idx" (list 2 3)) (list "limit exceeds remaining" "pageTfIdf 3 10 [\"x\"] idx" (list 4)) (list "offset past end" "pageTfIdf 4 2 [\"x\"] idx" (list)) (list "limit zero" "pageTfIdf 0 0 [\"x\"] idx" (list)) (list "whole result" "pageTfIdf 0 10 [\"x\"] idx" (list 1 2 3 4)) (list "paginate raw list" "paginate 1 2 [10, 20, 30, 40]" (list 20 30)) (list "paginate raw past end" "paginate 9 2 [10, 20]" (list)) (list "bm25 page window size" "[length (pageBm25 0 2 1.5 0.75 [\"x\"] idx)]" (list 2)) (list "result count" "[resultCount [\"x\"] idx]" (list 4)) (list "result count zero" "[resultCount [\"zzz\"] idx]" (list 0)))) (define page-results (search-batch page-setup (map (fn (c) (nth c 1)) page-cases))) (map-indexed (fn (i c) (hk-test (nth c 0) (nth page-results i) (nth c 2))) page-cases) {:fail hk-test-fail :pass hk-test-pass :fails hk-test-fails}