;; lib/minikanren/tests/take-drop.sx — Peano-indexed prefix/suffix. (define mk-nat (fn (n) (if (= n 0) :z (list :s (mk-nat (- n 1)))))) ;; --- tako --- (mk-test "tako-zero" (run* q (tako (mk-nat 0) (list 1 2 3) q)) (list (list))) (mk-test "tako-two" (run* q (tako (mk-nat 2) (list 1 2 3 4 5) q)) (list (list 1 2))) (mk-test "tako-all" (run* q (tako (mk-nat 3) (list 1 2 3) q)) (list (list 1 2 3))) (mk-test "tako-too-many" (run* q (tako (mk-nat 5) (list 1 2 3) q)) (list)) ;; --- dropo --- (mk-test "dropo-zero" (run* q (dropo (mk-nat 0) (list 1 2 3) q)) (list (list 1 2 3))) (mk-test "dropo-two" (run* q (dropo (mk-nat 2) (list 1 2 3 4 5) q)) (list (list 3 4 5))) (mk-test "dropo-all" (run* q (dropo (mk-nat 3) (list 1 2 3) q)) (list (list))) (mk-test "dropo-too-many" (run* q (dropo (mk-nat 5) (list 1 2 3) q)) (list)) ;; --- take + drop round-trip --- (mk-test "tako-dropo-roundtrip" (run* q (fresh (p s) (tako (mk-nat 2) (list 1 2 3 4 5) p) (dropo (mk-nat 2) (list 1 2 3 4 5) s) (appendo p s q))) (list (list 1 2 3 4 5))) (mk-tests-run!)