;; lib/minikanren/tests/subseto.sx — every element of l1 is in l2.

(mk-test
  "subseto-empty"
  (run* q (subseto (list) (list 1 2 3)))
  (list (make-symbol "_.0")))

(mk-test
  "subseto-singleton-yes"
  (run*
    q
    (subseto (list 2) (list 1 2 3)))
  (list (make-symbol "_.0")))

(mk-test
  "subseto-singleton-no"
  (run*
    q
    (subseto (list 99) (list 1 2 3)))
  (list))

(mk-test
  "subseto-multi-yes"
  (run
    1
    q
    (subseto
      (list 1 3)
      (list 1 2 3 4)))
  (list (make-symbol "_.0")))

(mk-test
  "subseto-multi-no"
  (run*
    q
    (subseto
      (list 1 99)
      (list 1 2 3)))
  (list))

(mk-test
  "subseto-equal-sets"
  (run
    1
    q
    (subseto
      (list 1 2 3)
      (list 1 2 3)))
  (list (make-symbol "_.0")))

;; allow duplicates in l1 — each just needs membership in l2.
(mk-test
  "subseto-duplicates-allowed"
  (run
    1
    q
    (subseto
      (list 1 1 2)
      (list 1 2 3)))
  (list (make-symbol "_.0")))

(mk-tests-run!)
