142 lines
3.1 KiB
Racket
142 lines
3.1 KiB
Racket
#lang s-exp "../../lang/wescheme.rkt"
|
|
(require "../../lang/check-expect/test-expect.rkt")
|
|
|
|
"cycle tests"
|
|
|
|
|
|
|
|
|
|
(define-struct thingy (x y))
|
|
(let ([result (shared ([y (make-thingy y y)])
|
|
y)])
|
|
(test-expect (thingy-x result) result)
|
|
(test-expect (thingy-y result) result))
|
|
|
|
|
|
|
|
|
|
(define mylst (cons 1 (cons (box #f) empty)))
|
|
(set-box! (cadr mylst) mylst)
|
|
|
|
|
|
;; FIXME: the output format for cycles in the Javascript implementation is
|
|
;; printing out ... rather than the traditional format.
|
|
;;
|
|
;; This is a bad deviation.
|
|
|
|
(test-expect (format "~s\n" mylst)
|
|
"(1 #&...)\n")
|
|
|
|
|
|
(shared ([a (cons 1 a)])
|
|
(test-expect (format "~s\n"a)
|
|
"(1 . ...)\n"))
|
|
|
|
|
|
(shared ([a (vector 1 2 a)])
|
|
(test-expect (format "~s\n" a)
|
|
"#(1 2 ...)\n"))
|
|
|
|
(shared ([a (box a)])
|
|
(test-expect (format "~s\n" a)
|
|
"#&...\n"))
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(define my-list (shared ([x (cons 1 (cons 2 (cons 3 y)))]
|
|
[y (cons 'a (cons 'b (cons 'c (cons 'd x))))])
|
|
x))
|
|
(define (take n l)
|
|
(cond
|
|
[(= n 0)
|
|
empty]
|
|
[else
|
|
(cons (first l)
|
|
(take (sub1 n) (rest l)))]))
|
|
|
|
(test-expect (take 20 my-list)
|
|
'(1 2 3 a b c d 1 2 3 a b c d 1 2 3 a b c))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
|
|
(test-expect (shared ([x (list 1 2)]) x)
|
|
(list 1 2))
|
|
|
|
(test-expect (shared ([x (vector 1 2)]) x)
|
|
#(1 2))
|
|
|
|
(test-expect (shared ([x (box 1)]) x)
|
|
(box 1))
|
|
|
|
(test-expect (shared ([x (cons 1 null)]) x)
|
|
'(1))
|
|
|
|
|
|
|
|
;;(stest (x "#1=(#1# 1)") '(shared ([x (list x 1)]) x))
|
|
(let ([result (shared ([x (list x 1)]) x)])
|
|
(test-expect result (car result))
|
|
(test-expect (cdr result) '(1)))
|
|
|
|
;(stest (x "#2=#(#2# 1)") '(shared ([x (vector x 1)]) x))
|
|
(let ([result (shared ([x (vector x 1)]) x)])
|
|
(test-expect (vector-ref result 0) result)
|
|
(test-expect (vector-ref result 1) 1)
|
|
(test-expect (vector-length result) 2))
|
|
|
|
;(stest (x "#2=#(#2# 1)") '(shared ([x (vector-immutable x 1)]) x))
|
|
;(let ([result (shared ([x (vector-immutable x 1)]) x)])
|
|
; (test-expect (vector-ref result 0) result)
|
|
; (test-expect (vector-ref result 1) 1)
|
|
; (test-expect (vector-length result) 2))
|
|
|
|
|
|
;(stest (x "#3=##") '(shared ([x (box x)]) x))
|
|
(let ([result (shared ([x (box x)]) x)])
|
|
(test-expect (unbox result) result))
|
|
|
|
;(stest (x "#3=##") '(shared ([x (box-immutable x)]) x))
|
|
|
|
|
|
;(stest (x "#4=(#4#)") '(shared ([x (cons x null)]) x))
|
|
(let ([result (shared ([x (cons x null)]) x)])
|
|
(test-expect (car result) result)
|
|
(test-expect (cdr result) null))
|
|
|
|
|
|
|
|
;(stest (x "#5=(1 . #5#)") '(shared ([x (cons 1 x)]) x))
|
|
(let ([result (shared ([x (cons 1 x)]) x)])
|
|
(test-expect (car result) 1)
|
|
(test-expect (cdr result) result))
|
|
|
|
|
|
;; (stest (x "#11=(#11#)") '(shared ([x `(,x)]) x))
|
|
(let ([result (shared ([x `(,x)]) x)])
|
|
(test-expect (length result) 1)
|
|
(test-expect (car result) result))
|
|
|
|
|
|
;; (stest (x "#11=(#11# 1)") '(shared ([x `(,x 1)]) x))
|
|
(let ([result (shared ([x `(,x 1)]) x)])
|
|
(test-expect (length result) 2)
|
|
(test-expect (car result) result)
|
|
(test-expect (cdr result) '(1)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"cycle tests done"
|
|
|