aboutsummaryrefslogtreecommitdiffstats
path: root/tests/run.scm
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-04-13 17:02:57 -0400
committerGravatar Peter McGoron 2025-04-13 17:02:57 -0400
commit7ed982648da8acc3ddf4bb264ec1872e33785ee8 (patch)
tree59e898782bf6226186c52029cda581268c91a95a /tests/run.scm
parentuse more specific exceptions (diff)
make define-procedure-tag a define form, and fix incorrect C primitive code
Diffstat (limited to '')
-rw-r--r--tests/run.scm25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/run.scm b/tests/run.scm
index a6a9f29..feb1cc1 100644
--- a/tests/run.scm
+++ b/tests/run.scm
@@ -96,4 +96,29 @@
(test-assert "lists are not tagged" (not (tag-foo? '(1 2 3 4))))
(raises-type-error "lists are not tagged" (tag-foo 'data '(1 2 3 4))))
+(import (chicken pretty-print))
+
+(define (debug-dump obj)
+ (let ((vec (make-vector (##sys#size obj))))
+ (display (##sys#size obj)) (newline)
+ (do ((i 0 (+ i 1)))
+ ((= i (##sys#size obj)) (newline))
+ (vector-set! vec i (##sys#slot obj i)))
+ (pp vec)
+ (newline)))
+
+(test-group "define-procedure-tag is a define form"
+ (let ()
+ (define (square x) (* x x))
+ (define-procedure-tag tag-order tag-order? get-tag-order)
+ (define tagged-square (tag-order 2 square))
+ (define-procedure-tag tag-pure tag-pure? get-tag-pure)
+ (define tagged-square (tag-pure #t tagged-square))
+ (test-assert "square is tag-order?" (tag-order? tagged-square))
+ (test-assert "square is tag-pure?" (tag-pure? tagged-square))
+ (test "square order" 2 (get-tag-order tagged-square))
+ (test-assert "square pure" (get-tag-pure tagged-square))
+ (test-assert "is a procedure?" (procedure? tagged-square))
+ (test "square value" (tagged-square 10) (square 10))))
+
(test-end "SRFI 259")