1(include "#.scm") 2 3(declare (block)) ;; needed for serialization/deserialization when compiled 4 5(define (serdes1 obj) 6 (let ((ser (object->u8vector obj))) 7 (let ((des (u8vector->object ser))) 8 des))) 9 10(define (serdes2 obj) 11 (let ((ser (object->u8vector obj (lambda (x) x)))) 12 (let ((des (u8vector->object ser (lambda (x) x)))) 13 des))) 14 15(define-type point 16 id: the-point-object 17 x 18 y 19 z) 20 21(define objects 22 (list (cons 11 22) 23 (list 11 22 33) 24 25 0 26 1 27 -1 28 2 29 -2 30 100 31 -100 32 ##max-fixnum 33 ##min-fixnum 34 12345678901234567890 35 -12345678901234567890 36 0.0 37 -0.0 38 3.1415 39 +inf.0 40 -inf.0 41 1/3 42 1+3i 43 44 'allo 45 'allo: 46 47 "" 48 "hello" 49 "abcdefghijklmno" 50 51 #\x 52 #\u1234 53 54 #f 55 #t 56 '() 57 #!eof 58 #!void 59 ;;(macro-absent-obj) 60 #!unbound 61 #!unbound2 62 #!optional 63 #!key 64 #!rest 65 ;;(macro-unused-obj) 66 ;;(macro-deleted-obj) 67 68 (box 123) 69 70 (vector) 71 (vector 0 1 2 3 4 5 6 7 8 9 10 11 12) 72 73 (s8vector) 74 (s8vector 0 1 2 3 4 5 6 7 8 9 10 -128 127) 75 76 (u8vector) 77 (u8vector 0 1 2 3 4 5 6 7 8 9 10 11 255) 78 79 (s16vector) 80 (s16vector 0 1 2 3 4 5 6 7 8 9 10 -32768 32767) 81 82 (u16vector) 83 (u16vector 0 1 2 3 4 5 6 7 8 9 10 11 65535) 84 85 (s32vector) 86 (s32vector 0 1 2 3 4 5 6 7 8 9 10 -2147483648 2147483647) 87 88 (u32vector) 89 (u32vector 0 1 2 3 4 5 6 7 8 9 10 11 4294967295) 90 91 (s64vector) 92 (s64vector 0 1 2 3 4 5 6 7 8 9 10 -9223372036854775808 9223372036854775807) 93 94 (u64vector) 95 (u64vector 0 1 2 3 4 5 6 7 8 9 10 11 18446744073709551615) 96 97 (f32vector) 98 (f32vector 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 +inf.0) 99 100 (f64vector) 101 (f64vector 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 +inf.0) 102 103 car 104 105 (make-point 1 2 3) 106 )) 107 108(define t (list->table '((a . 11) (b . 22)))) 109 110(for-each 111 (lambda (obj) 112 (check-equal? (serdes1 obj) obj)) 113 (cons t 114 objects)) 115 116(for-each 117 (lambda (obj) 118 (check-equal? (serdes2 obj) obj)) 119 objects) 120 121(define circular (cons 11 22)) 122 123(set-car! circular circular) 124(set-cdr! circular circular) 125 126(define circular2 (serdes1 circular)) 127 128(check-eq? circular2 (car circular2)) 129(check-eq? circular2 (cdr circular2)) 130 131(define make-adder 132 (lambda (x) 133 (lambda (y) 134 (+ x y)))) 135 136(define add10 (make-adder 10)) 137 138(check-equal? ((serdes1 add10) 5) 15) 139