Files
slime/bin/tests/automata.slime
T
2020-03-31 11:38:53 +02:00

47 lines
1.3 KiB
Plaintext

(import "sets.slime")
(import "automata.slime")
;; (make-delta
;; ("q0" :: "M" -> "q1")
;; ("q1" :: "A" -> "q0"
;; "G" -> "q1")
;; ("q2" :: "E" -> "q0"))
(define (delta q s)
(cond (s (case q
(("q0") (case s (("M") "q1")))
(("q1") (case s (("A") "q0")
(("G") "q2")))
(("q2") (case s (("E") "q0")))))
(else q)))
(define aut (automata::make-dfa (set::make "q0" "q1" "q2")
(set::make "M" "A" "G" "E")
delta
"q0"
(set::make "q0")))
(let ((state (aut ())))
(assert (= (car state) :accept))
(assert (= (car (cdr state)) "q0")))
(let ((state (aut "M")))
(assert (= (car state) :fail))
(assert (= (car (cdr state)) "q1")))
(let ((state (aut "A")))
(assert (= (car state) :accept))
(assert (= (car (cdr state)) "q0")))
(let ((state (aut "M")))
(assert (= (car state) :fail))
(assert (= (car (cdr state)) "q1")))
(let ((state (aut "G")))
(assert (= (car state) :fail))
(assert (= (car (cdr state)) "q2")))
(let ((state (aut "E")))
(assert (= (car state) :accept))
(assert (= (car (cdr state)) "q0")))