;; lib/minikanren/tests/subo.sx — contiguous-sublist relation.

(mk-test
  "subo-simple-found"
  (run*
    q
    (subo
      (list 2 3)
      (list 1 2 3 4)))
  (list (make-symbol "_.0")))

(mk-test
  "subo-not-contiguous-fails"
  (run*
    q
    (subo
      (list 2 4)
      (list 1 2 3 4)))
  (list))

(mk-test
  "subo-full-list-found"
  (run*
    q
    (subo
      (list 1 2 3)
      (list 1 2 3)))
  (list (make-symbol "_.0")))

(mk-test
  "subo-empty-list-found"
  (let
    ((res (run* q (subo (list) (list 1 2 3)))))
    (= (len res) 4))
  true)

(mk-test
  "subo-prefix"
  (run*
    q
    (subo
      (list 1 2)
      (list 1 2 3 4)))
  (list (make-symbol "_.0")))

(mk-test
  "subo-suffix"
  (run*
    q
    (subo
      (list 3 4)
      (list 1 2 3 4)))
  (list (make-symbol "_.0")))

(mk-test
  "subo-strings"
  (run* q (subo (list "b" "c") (list "a" "b" "c" "d")))
  (list (make-symbol "_.0")))

(mk-tests-run!)
