aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2024-12-27 22:55:30 -0500
committerGravatar Peter McGoron 2024-12-27 22:58:52 -0500
commitcc1b6ef1bf392b158eb3e16e0a1998959f382385 (patch)
treed4510e5a5ca3b9573b5cb2faa2e6fbf333117963 /tests
parentchicken (diff)
Rewrite cond-thunk to be in terms of cond, and rename tests for
chicken
Diffstat (limited to 'tests')
-rw-r--r--tests/cas.scm66
-rw-r--r--tests/run.scm74
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)