File: module-tests-2.scm

package info (click to toggle)
chicken 5.3.0-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 32,892 kB
  • sloc: ansic: 580,083; lisp: 71,987; tcl: 1,445; sh: 588; makefile: 60
file content (103 lines) | stat: -rw-r--r-- 2,245 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
;;;; module-tests-2.scm


(module oo (output-of)
  (import scheme chicken.port)
  (define-syntax output-of 
    (syntax-rules ()
      ((_ exp) (with-output-to-string (lambda () exp)))))
)

(module mscheme (lambda)
  (import (rename scheme (lambda s:lambda))
	  (chicken module))
  (reexport (except scheme lambda))
  (define-syntax lambda
    (syntax-rules ()
      ((_ llist . body)
       (let ((results #f))
	 (s:lambda 
	  llist
	  (if results
	      (apply values results)
	      (call-with-values (s:lambda () . body)
		(s:lambda rs
		  (set! results rs)
		  (apply values rs)))))))))
)

(module m (f1 f2)
  (import mscheme)
  (define (f1)
    (display 'f1) (newline)
    'f1)
  (define f2
    (lambda ()
      (display 'f2) (newline)
      'f2))
)

(module mtest ()
  (import scheme m (chicken base) oo)
  (assert (string=? "f1\n" (output-of (f1))))
  (assert (string=? "f1\n" (output-of (f1))))
  (assert (string=? "f2\n" (output-of (f2))))
  (assert (string=? "" (output-of (f2)))))

;;;

(module m1 (lambda f1 f2)
  (import (rename scheme (lambda s:lambda)))

  (define-syntax lambda
    (syntax-rules ()
      ((_ llist . body)
       (s:lambda llist (display 'llist) (newline) . body))))

  (define (f1)				; should use standard lambda
    (display 'f1)
    (newline))

  (define f2
    (lambda (x)				; should be our lambda
      (display 'f2)
      (newline)))

)

(module mtest2 (f3 f4)
  (import (except scheme lambda) m1 (chicken base) oo)

  (define (f3)				; standard lambda
    (display 'f3)
    (newline))

  (define f4				; our lambda
    (lambda (x)
      (display 'f4)
      (newline)))

  (assert (string=? "f1\n" (output-of (f1))))
  (assert (string=? "(x)\nf2\n" (output-of (f2 'yes))))
  (assert (string=? "f3\n" (output-of (f3))))
  (assert (string=? "(x)\nf4\n" (output-of (f4 'yes)))))

(module m2 ()
  (import m1)
  ((lambda () (f1)))) ; should use new lambda (but should be folded by compiler)


;;; local define should work even with redefined define

(module m3 ()
  (import (rename scheme (define s:define)))
  (import (only (chicken base) assert))
  (define-syntax define
    (syntax-rules ()
      ((_) (display 'oink))))
  (define)
  (let ()
    (define a 1)
    (assert (= a 1)))
  (define)
  (newline))