Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 30s
lib/maude/run.sx — mau/run-program / mau/run parse a module plus trailing reduce/red/rewrite/rew commands (with optional 'in MOD :' qualifier) and execute them, rendering results in mixfix surface syntax. An idiomatic .maude file now runs end-to-end. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
53 lines
1.7 KiB
Plaintext
53 lines
1.7 KiB
Plaintext
;; lib/maude/tests/run.sx — running a Maude program (module + commands).
|
|
|
|
(define mrn-pass 0)
|
|
(define mrn-fail 0)
|
|
(define mrn-failures (list))
|
|
|
|
(define
|
|
mrn-check!
|
|
(fn
|
|
(name got expected)
|
|
(if
|
|
(= got expected)
|
|
(set! mrn-pass (+ mrn-pass 1))
|
|
(do
|
|
(set! mrn-fail (+ mrn-fail 1))
|
|
(append!
|
|
mrn-failures
|
|
(str name " expected: " expected " got: " got))))))
|
|
|
|
(define
|
|
mrn-peano
|
|
"fmod PEANO is\n sort Nat .\n op 0 : -> Nat .\n op s_ : Nat -> Nat .\n op _+_ : Nat Nat -> Nat .\n op _*_ : Nat Nat -> Nat .\n vars X Y : Nat .\n eq 0 + Y = Y .\n eq s X + Y = s (X + Y) .\n eq 0 * Y = 0 .\n eq s X * Y = Y + (X * Y) .\nendfm\nred s 0 + s s 0 .\nred 0 + 0 .\nreduce in PEANO : s s 0 * s s 0 .")
|
|
|
|
(mrn-check!
|
|
"peano-results"
|
|
(mau/run mrn-peano)
|
|
(list "(s (s (s 0)))" "0" "(s (s (s (s 0))))"))
|
|
|
|
(mrn-check! "peano-count" (len (mau/run-program mrn-peano)) 3)
|
|
(mrn-check!
|
|
"peano-cmd-kind"
|
|
(get (first (mau/run-program mrn-peano)) :cmd)
|
|
"reduce")
|
|
|
|
(define
|
|
mrn-coins
|
|
"mod COINS is\n sort M .\n op nil : -> M .\n op q : -> M .\n op d : -> M .\n op _;_ : M M -> M [assoc comm id: nil] .\n rl [change] : q ; q ; q ; q => d .\nendm\nrew q ; q ; q ; q ; q .\nrewrite q ; q ; q ; q ; q ; q ; q ; q .")
|
|
|
|
(mrn-check! "coins-results" (mau/run mrn-coins) (list "(d ; q)" "(d ; d)"))
|
|
|
|
(mrn-check!
|
|
"coins-cmd-kind"
|
|
(get (first (mau/run-program mrn-coins)) :cmd)
|
|
"rewrite")
|
|
|
|
;; module-only (no commands) runs to an empty result list
|
|
(mrn-check!
|
|
"no-commands"
|
|
(mau/run "fmod EMPTY is\n sort S .\n op a : -> S .\nendfm")
|
|
(list))
|
|
|
|
(define mau-run-tests-run! (fn () {:failures mrn-failures :total (+ mrn-pass mrn-fail) :passed mrn-pass :failed mrn-fail}))
|