From 49fac6b12e58aa39954984b2fcd1338559aa742c Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 27 Sep 2024 13:54:50 +0800 Subject: [PATCH 1/5] and --- Goldfish.tmu | 84 ++++++++++++++++++++++++++++--- tests/goldfish/liii/base-test.scm | 19 ++++++- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/Goldfish.tmu b/Goldfish.tmu index e46a6eb4..f7c65007 100644 --- a/Goldfish.tmu +++ b/Goldfish.tmu @@ -511,7 +511,9 @@ - + + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> (check (case '+ @@ -565,11 +567,79 @@ \; - \; + - + 检查 是否正确处理多个布尔表达式。 - \; + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check-true (and #t #t #t)) + + (check-false (and #t #f #t)) + + (check-false (and #f #t #f)) + + (check-false (and #f #f #f)) + + \; + + + 验证当 没有参数时的行为。 + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check-true (and)) + + \; + + + 测试 与混合类型参数的组合。 + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check-true (and 1 '() "non-empty" #t)) + + (check-false (and #f '() "non-empty" #t)) + + (check-false (and 1 '() "non-empty" #f)) + + \; + + + 检查 在复合表达式中的行为。 + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check-true (and (\ 5 3) (\ 5 10))) + + (check-false (and (\ 5 3) (\ 5 10))) + + \; + + + 验证 的短路行为。 + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check-catch 'error-name + + \ \ (and (error 'error-name "This should not be evaluated") #f)) + + (check-false (and #f (error "This should not be evaluated"))) + + \; + + + + + + + + + + + + + + + + + <\scm-chunk|goldfish/scheme/base.scm|true|true> ; 0-clause BSD @@ -642,13 +712,15 @@ <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> (check (let-values (((ret) (+ 1 2))) (+ ret 4)) =\ 7) - \; - (check (let-values (((a b) (values 3 4))) (+ a b)) =\ 7) \; + + + + \; diff --git a/tests/goldfish/liii/base-test.scm b/tests/goldfish/liii/base-test.scm index 2f3a1cf5..ecc2b2d8 100644 --- a/tests/goldfish/liii/base-test.scm +++ b/tests/goldfish/liii/base-test.scm @@ -45,8 +45,25 @@ ((* /) 'p1)) => #) -(check (let-values (((ret) (+ 1 2))) (+ ret 4)) => 7) +(check-true (and #t #t #t)) +(check-false (and #t #f #t)) +(check-false (and #f #t #f)) +(check-false (and #f #f #f)) + +(check-true (and)) + +(check-true (and 1 '() "non-empty" #t)) +(check-false (and #f '() "non-empty" #t)) +(check-false (and 1 '() "non-empty" #f)) +(check-true (and (> 5 3) (< 5 10))) +(check-false (and (> 5 3) (> 5 10))) + +(check-catch 'error-name + (and (error 'error-name "This should not be evaluated") #f)) +(check-false (and #f (error "This should not be evaluated"))) + +(check (let-values (((ret) (+ 1 2))) (+ ret 4)) => 7) (check (let-values (((a b) (values 3 4))) (+ a b)) => 7) (define-record-type :pare -- Gitee From a5c48c0fb8156f087774be3942375944579946e6 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 27 Sep 2024 13:55:57 +0800 Subject: [PATCH 2/5] wip --- Goldfish.tmu | 8 ++++++++ tests/goldfish/liii/base-test.scm | 2 ++ 2 files changed, 10 insertions(+) diff --git a/Goldfish.tmu b/Goldfish.tmu index f7c65007..e3861a33 100644 --- a/Goldfish.tmu +++ b/Goldfish.tmu @@ -625,6 +625,14 @@ \; + 验证and返回值非布尔值的情况。 + + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|false> + (check (and #t 1) =\ 1) + + \; + + diff --git a/tests/goldfish/liii/base-test.scm b/tests/goldfish/liii/base-test.scm index ecc2b2d8..2af6af73 100644 --- a/tests/goldfish/liii/base-test.scm +++ b/tests/goldfish/liii/base-test.scm @@ -63,6 +63,8 @@ (and (error 'error-name "This should not be evaluated") #f)) (check-false (and #f (error "This should not be evaluated"))) +(check (and #t 1) => 1) + (check (let-values (((ret) (+ 1 2))) (+ ret 4)) => 7) (check (let-values (((a b) (values 3 4))) (+ a b)) => 7) -- Gitee From 3ae43190ad8bc72ffa53c418a31e844315d4a018 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 27 Sep 2024 13:56:58 +0800 Subject: [PATCH 3/5] wip --- Goldfish.tmu | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Goldfish.tmu b/Goldfish.tmu index e3861a33..bbd4416f 100644 --- a/Goldfish.tmu +++ b/Goldfish.tmu @@ -627,7 +627,7 @@ 验证and返回值非布尔值的情况。 - <\scm-chunk|tests/goldfish/liii/base-test.scm|true|false> + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> (check (and #t 1) =\ 1) \; -- Gitee From 0cc43f9633147a82f097d9cf8400b136d19ac5f7 Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 27 Sep 2024 14:36:00 +0800 Subject: [PATCH 4/5] wip --- .gitignore | 1 + Goldfish.tmu | 84 ++++++++++++++++++++++++++++--- goldfish/liii/base.scm | 6 ++- goldfish/srfi/srfi-2.scm | 11 ++++ tests/goldfish/liii/base-test.scm | 18 +++++++ 5 files changed, 111 insertions(+), 9 deletions(-) create mode 100644 goldfish/srfi/srfi-2.scm diff --git a/.gitignore b/.gitignore index 6a04b017..23715731 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ bin/goldfish.exe goldfish/**/*-test.scm compile_commands.json .cache/ +*~ diff --git a/Goldfish.tmu b/Goldfish.tmu index bbd4416f..e3361dfc 100644 --- a/Goldfish.tmu +++ b/Goldfish.tmu @@ -422,7 +422,9 @@ <\scm-chunk|goldfish/liii/base.scm|true|true> (define-library (liii base) - (import (scheme base)) + (import (scheme base) + + \ \ \ \ \ \ \ \ (srfi srfi-2)) (export @@ -474,7 +476,9 @@ \ \ raise guard read-error? file-error? - \; + \ \ ; SRFI-2 + + \ \ and-let* \ \ ; Extra routines for (liii base) @@ -633,19 +637,53 @@ \; - + - + - + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|false> + (define (test-letrec) + + \ \ (letrec ((even? + + \ \ \ \ \ \ \ \ \ \ \ \ \ (lambda (n) + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (if (= n 0) + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #t + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (odd? (- n 1))))) + + \ \ \ \ \ \ \ \ \ \ \ \ (odd? + + \ \ \ \ \ \ \ \ \ \ \ \ \ (lambda (n) + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (if (= n 0) + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ #f + + \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ (even? (- n 1)))))) + + \ \ \ \ (list (even? 10) (odd? 10)))) + + \; + + (check (test-letrec) =\ (list #t #f)) + + \; + + + + + \; @@ -727,9 +765,41 @@ - + - \; + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check (and-let* ((hi 3) (ho #f)) (+ hi 1)) =\ #f) + + (check (and-let* ((hi 3) (ho #t)) (+ hi 1)) =\ 4) + + \; + + + + + <\scm-chunk|goldfish/srfi/srfi-2.scm|false|false> + ; 0-clause BSD by Bill Schottstaedt from S7 source repo: s7test.scm + + (define-library (srfi srfi-2) + + (export and-let*) + + (begin + + \; + + (define-macro (and-let* vars . body) + + \ \ ‘(let () (and ,@(map (lambda (v) ‘(define ,@v)) vars) (begin ,@body)))) + + \; + + ) ; end of begin + + ) ; end of define-library + + \; + diff --git a/goldfish/liii/base.scm b/goldfish/liii/base.scm index 3ee84e1d..16ca1981 100644 --- a/goldfish/liii/base.scm +++ b/goldfish/liii/base.scm @@ -15,7 +15,8 @@ ; (define-library (liii base) -(import (scheme base)) +(import (scheme base) + (srfi srfi-2)) (export ; (scheme base) defined by R7RS let-values @@ -41,7 +42,8 @@ string-map vector-map string-for-each vector-for-each ; Exception raise guard read-error? file-error? - + ; SRFI-2 + and-let* ; Extra routines for (liii base) == != display* in? let1 compose identity typed-lambda ) diff --git a/goldfish/srfi/srfi-2.scm b/goldfish/srfi/srfi-2.scm new file mode 100644 index 00000000..8a63b5c6 --- /dev/null +++ b/goldfish/srfi/srfi-2.scm @@ -0,0 +1,11 @@ +; 0-clause BSD by Bill Schottstaedt from S7 source repo: s7test.scm +(define-library (srfi srfi-2) +(export and-let*) +(begin + +(define-macro (and-let* vars . body) + `(let () (and ,@(map (lambda (v) `(define ,@v)) vars) (begin ,@body)))) + +) ; end of begin +) ; end of define-library + diff --git a/tests/goldfish/liii/base-test.scm b/tests/goldfish/liii/base-test.scm index 2af6af73..9c87905f 100644 --- a/tests/goldfish/liii/base-test.scm +++ b/tests/goldfish/liii/base-test.scm @@ -65,9 +65,27 @@ (check (and #t 1) => 1) +(define (test-letrec) + (letrec ((even? + (lambda (n) + (if (= n 0) + #t + (odd? (- n 1))))) + (odd? + (lambda (n) + (if (= n 0) + #f + (even? (- n 1)))))) + (list (even? 10) (odd? 10)))) + +(check (test-letrec) => (list #t #f)) + (check (let-values (((ret) (+ 1 2))) (+ ret 4)) => 7) (check (let-values (((a b) (values 3 4))) (+ a b)) => 7) +(check (and-let* ((hi 3) (ho #f)) (+ hi 1)) => #f) +(check (and-let* ((hi 3) (ho #t)) (+ hi 1)) => 4) + (define-record-type :pare (kons x y) pare? -- Gitee From cb26672f956e5a81c763ee677167db9d76c2d33a Mon Sep 17 00:00:00 2001 From: Darcy Shen Date: Fri, 27 Sep 2024 14:39:45 +0800 Subject: [PATCH 5/5] wip --- Goldfish.tmu | 18 +++++++++++++++++- tests/goldfish/liii/base-test.scm | 7 +++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Goldfish.tmu b/Goldfish.tmu index e3361dfc..f7656892 100644 --- a/Goldfish.tmu +++ b/Goldfish.tmu @@ -649,7 +649,7 @@ - <\scm-chunk|tests/goldfish/liii/base-test.scm|true|false> + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> (define (test-letrec) \ \ (letrec ((even? @@ -679,10 +679,26 @@ (check (test-letrec) =\ (list #t #f)) \; + + (check-catch 'wrong-type-arg + + \ \ (letrec ((a 1) (b (+ a 1))) (list a b))) + + \; + <\scm-chunk|tests/goldfish/liii/base-test.scm|true|true> + (check + + \ \ (letrec* ((a 1) (b (+ a 1))) (list a b)) + + \ \ =\ (list 1 2)) + + \; + + \; diff --git a/tests/goldfish/liii/base-test.scm b/tests/goldfish/liii/base-test.scm index 9c87905f..e6fa760d 100644 --- a/tests/goldfish/liii/base-test.scm +++ b/tests/goldfish/liii/base-test.scm @@ -80,6 +80,13 @@ (check (test-letrec) => (list #t #f)) +(check-catch 'wrong-type-arg + (letrec ((a 1) (b (+ a 1))) (list a b))) + +(check + (letrec* ((a 1) (b (+ a 1))) (list a b)) + => (list 1 2)) + (check (let-values (((ret) (+ 1 2))) (+ ret 4)) => 7) (check (let-values (((a b) (values 3 4))) (+ a b)) => 7) -- Gitee