27 lines
816 B
Racket
27 lines
816 B
Racket
#lang typed/scheme
|
|
(require racket/unsafe/ops)
|
|
|
|
(define-struct: foo ((x : Integer) (y : String)))
|
|
(define-struct: (bar foo) ((z : Float)))
|
|
|
|
(define a (make-foo 1 "1"))
|
|
(define b (make-bar 2 "2" 2.0))
|
|
|
|
(= (+ (unsafe-struct-ref a 0) 2) 3)
|
|
(string=? (string-append (unsafe-struct-ref a 1) "\n") "1\n")
|
|
(= (+ (unsafe-struct-ref b 0) 2) 4)
|
|
(string=? (string-append (unsafe-struct-ref b 1) "\n") "2\n")
|
|
(= (+ (unsafe-struct-ref b 2) 2.0) 4.0)
|
|
|
|
(unsafe-struct-set! a 0 2)
|
|
(unsafe-struct-set! a 1 "2")
|
|
(unsafe-struct-set! b 0 3)
|
|
(unsafe-struct-set! b 1 "3")
|
|
(unsafe-struct-set! b 2 3.0)
|
|
|
|
(= (+ (unsafe-struct-ref a 0) 2) 4)
|
|
(string=? (string-append (unsafe-struct-ref a 1) "\n") "2\n")
|
|
(= (+ (unsafe-struct-ref b 0) 2) 5)
|
|
(string=? (string-append (unsafe-struct-ref b 1) "\n") "3\n")
|
|
(= (+ (unsafe-struct-ref b 2) 2.0) 5.0)
|