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