diff options
| author | 2024-12-27 22:55:30 -0500 | |
|---|---|---|
| committer | 2024-12-27 22:58:52 -0500 | |
| commit | cc1b6ef1bf392b158eb3e16e0a1998959f382385 (patch) | |
| tree | d4510e5a5ca3b9573b5cb2faa2e6fbf333117963 /tests | |
| parent | chicken (diff) | |
Rewrite cond-thunk to be in terms of cond, and rename tests for
chicken
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/cas.scm | 66 | ||||
| -rw-r--r-- | tests/run.scm | 74 |
2 files changed, 140 insertions, 0 deletions
diff --git a/tests/cas.scm b/tests/cas.scm new file mode 100644 index 0000000..5d87632 --- /dev/null +++ b/tests/cas.scm @@ -0,0 +1,66 @@ +#| Copyright 2024 Peter McGoron + | + | Licensed under the Apache License, Version 2.0 (the "License"); + | + | you may not use this file except in compliance with the License. + | You may obtain a copy of the License at + | + | http://www.apache.org/licenses/LICENSE-2.0 + | + | Unless required by applicable law or agreed to in writing, software + | distributed under the License is distributed on an "AS IS" BASIS, + | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + | See the License for the specific language governing permissions and + | limitations under the License. + |# + +(cond-expand + (chicken (import test r7rs)) + (else (import (srfi 64)))) + +(load "../mcgoron.cond-thunk.srfi.210.compat.sld") +(load "../mcgoron.cond-thunk.sld") +(load "../mcgoron.cond-thunk.values.sld") +(import (mcgoron cond-thunk) (mcgoron cond-thunk values) (srfi 1)) + +(define function=> pair=>) + +(define (mult=> form) + (cond-values + (after ((let (function=> form) => (head tail)) + (when (eq? head '*))) + tail))) + +(define (add=> form) + (cond-values + (after ((let (function=> form) => (head tail)) + (when (eq? head '+))) + tail))) + +(define (add? form) + (cond-thunk + (after ((let (add=> form) => (_))) + #t) + (else #f))) + +(define (distribute form) + (cond-thunk + (after ((let (mult=> form) => (arguments))) + (let-values (((add others) (partition add? arguments))) + ;; ADD is a list of addition clauses. + (let ((added-values (concatenate (map cdr add)))) + (cons '+ + (map (lambda (added-value) + (cons* '* + (distribute added-value) + others)) + added-values))))) + (after ((let (function=> form) => (head arguments))) + (cons head (map distribute arguments))) + (else form))) + +(test + "distribute1" + '(+ (* y x) (* z x)) + (distribute '(* x (+ y z)))) + diff --git a/tests/run.scm b/tests/run.scm new file mode 100644 index 0000000..c98e76f --- /dev/null +++ b/tests/run.scm @@ -0,0 +1,74 @@ +#| Copyright 2024 Peter McGoron + | + | Licensed under the Apache License, Version 2.0 (the "License"); + | + | you may not use this file except in compliance with the License. + | You may obtain a copy of the License at + | + | http://www.apache.org/licenses/LICENSE-2.0 + | + | Unless required by applicable law or agreed to in writing, software + | distributed under the License is distributed on an "AS IS" BASIS, + | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + | See the License for the specific language governing permissions and + | limitations under the License. + |# + +(cond-expand + (chicken (import test r7rs)) + (else (import (srfi 64)))) + +(load "../mcgoron.cond-thunk.sld") +(import (mcgoron cond-thunk)) + +(test-assert + "cond-thunk basic" + (cond-thunk + (if #t + (lambda () + #t) + #f) + (else #f))) + +(test-assert + "when-ct true" + (cond-thunk + (when-ct #t #t) + (else #f))) + +(test + "cond-thunk multiple branches" + 'two + (cond-thunk + (when-ct (pair? #f) 'one) + (when-ct (boolean? #f) 'two) + (when-ct (boolean? #f) 'three) + (else #f))) + +(let ((on-pair + (lambda-ct (x) (pair? x) + 'pair)) + (on-boolean + (lambda-ct (x) (boolean? x) + 'boolean))) + (test + "lambda-ct basic" + 'boolean + (cond-thunk + (on-pair #f) + (on-boolean #f) + (else #f)))) + +(let () + (define-ct (on-pair x) (pair? x) + 'pair) + (define-ct (on-boolean x) (boolean? x) + 'boolean) + (test + "define-ct basic" + 'boolean + (cond-thunk + (on-pair #f) + (on-boolean #f) + (else #f)))) +(test-exit) |
