Home / Computer science / SAT solver / Practice implementation: Emacs Lisp
Solver: Creating domains
(defun my-sat-domains (clauses)
(mapcar (lambda (variable) (cons variable '(0 1)))
(delete-dups (mapcar #'abs (apply #'append clauses)))))
(ert-deftest my-sat-domains/no-clauses ()
(should (equal (my-sat-domains '()) '())))
(ert-deftest my-sat-domains/single-clause ()
(should (equal (my-sat-domains '((1)))
'((1 . (0 1)))))
(should (equal (my-sat-domains '((1 2)))
'((1 . (0 1))
(2 . (0 1))))))
(ert-deftest my-sat-domains/multiple-clauses ()
(should (equal (my-sat-domains '((1) (2)))
'((1 . (0 1))
(2 . (0 1)))))
(should (equal (my-sat-domains '((1) (1 2) (3)))
'((1 . (0 1))
(2 . (0 1))
(3 . (0 1))))))
(ert-deftest my-sat-domains/negated-literals ()
(should (equal (my-sat-domains '((1 -2) (-1 2)))
'((1 . (0 1))
(2 . (0 1))))))