2
;;;; Author: Paul Dietz
3
;;;; Created: Sat May 17 11:54:54 2003
4
;;;; Contains: Tests of MAKE-LOAD-FORM-SAVING-SLOTS
8
;;; These are tests of MAKE-LOAD-FORM-SAVING-SLOTS proper; tests involving
9
;;; file compilation will be located elsewhere.
12
(defstruct mlfss-01 a b c)
14
(deftest make-load-form-saving-slots.1
15
(let* ((obj (make-mlfss-01))
16
(forms (multiple-value-list
17
(make-load-form-saving-slots obj))))
20
(let ((newobj (eval (first forms))))
21
(eval (subst newobj obj (second forms)))
22
(eqt (class-of obj) (class-of newobj)))))
25
(deftest make-load-form-saving-slots.2
26
(let* ((obj (make-mlfss-01))
27
(forms (multiple-value-list
28
(make-load-form-saving-slots obj :slot-names '(a b)))))
31
(let ((newobj (eval (first forms))))
32
(eval (subst newobj obj (second forms)))
33
(eqt (class-of obj) (class-of newobj)))))
36
(defclass mlfss-02 () ((a :initarg :a) (b :initarg :b) (c :initarg :c)))
38
(deftest make-load-form-saving-slots.3
39
(let* ((obj (make-instance 'mlfss-02))
40
(forms (multiple-value-list
41
(make-load-form-saving-slots obj))))
42
(let ((newobj (eval (first forms))))
43
(eval (subst newobj obj (second forms)))
46
(eqt (class-of obj) (class-of newobj))
47
(map-slot-boundp* newobj '(a b c)))))
50
(deftest make-load-form-saving-slots.4
51
(let* ((obj (make-instance 'mlfss-02 :a 1 :b 'a :c '(x y z)))
52
(forms (multiple-value-list
53
(make-load-form-saving-slots obj :slot-names '(a b c)))))
54
(let ((newobj (eval (first forms))))
55
(eval (subst newobj obj (second forms)))
58
(eqt (class-of obj) (class-of newobj))
59
(map-slot-boundp* newobj '(a b c))
60
(map-slot-value newobj '(a b c)))))
61
2 t (t t t) (1 a (x y z)))
64
(deftest make-load-form-saving-slots.5
65
(let* ((obj (make-instance 'mlfss-02 :a #(x y z)))
66
(forms (multiple-value-list
67
(make-load-form-saving-slots obj :slot-names '(a b)))))
68
(let ((newobj (eval (first forms))))
69
(eval (subst newobj obj (second forms)))
72
(eqt (class-of obj) (class-of newobj))
73
(map-slot-boundp* newobj '(a b c))
74
(slot-value newobj 'a))))
75
2 t (t nil nil) #(x y z))
77
(deftest make-load-form-saving-slots.6
78
(let* ((obj (make-instance 'mlfss-02))
79
(forms (multiple-value-list
80
(make-load-form-saving-slots obj :allow-other-keys nil))))
81
(let ((newobj (eval (first forms))))
82
(eval (subst newobj obj (second forms)))
85
(eqt (class-of obj) (class-of newobj))
86
(map-slot-boundp* newobj '(a b c)))))
89
;;; If :slot-names is missing, all initialized slots are retained
90
(deftest make-load-form-saving-slots.7
91
(let* ((obj (make-instance 'mlfss-02 :a (list 'x) :c 6/5))
92
(forms (multiple-value-list
93
(make-load-form-saving-slots obj))))
94
(let ((newobj (eval (first forms))))
95
(eval (subst newobj obj (second forms)))
98
(eqt (class-of obj) (class-of newobj))
99
(map-slot-boundp* newobj '(a b c))
100
(map-slot-value newobj '(a c)))))
101
2 t (t nil t) ((x) 6/5))
103
;;; If :slot-names is present, all initialized slots in the list are retained
104
(deftest make-load-form-saving-slots.8
105
(let* ((obj (make-instance 'mlfss-02 :a (list 'x) :c 6/5))
106
(forms (multiple-value-list
107
(make-load-form-saving-slots obj :slot-names '(c)))))
108
(let ((newobj (eval (first forms))))
109
(eval (subst newobj obj (second forms)))
112
(eqt (class-of obj) (class-of newobj))
113
(map-slot-boundp* newobj '(a b c))
114
(slot-value newobj 'c))))
117
;; It takes an :environment parameter
118
(deftest make-load-form-saving-slots.9
119
(let* ((obj (make-instance 'mlfss-02 :a 7 :c 64 :b 100))
120
(forms (multiple-value-list
121
(make-load-form-saving-slots obj :environment nil))))
122
(let ((newobj (eval (first forms))))
123
(eval (subst newobj obj (second forms)))
126
(eqt (class-of obj) (class-of newobj))
127
(map-slot-boundp* newobj '(a b c))
128
(map-slot-value newobj '(a b c)))))
129
2 t (t t t) (7 100 64))
131
(defpackage "CL-TEST-MLFSS-PACKAGE" (:use) (:export #:a))
132
(defstruct mlfss-03 cl-test-mlfss-package:a)
134
(deftest make-load-form-savings-slots.10
135
(let* ((obj (make-mlfss-03 :a 17))
136
(forms (multiple-value-list
137
(make-load-form-saving-slots obj))))
138
(let ((newobj (eval (first forms))))
139
(eval (subst newobj obj (second forms)))
143
(eqt (class-of obj) (class-of newobj))
144
(mlfss-03-a newobj))))
147
(deftest make-load-form-savings-slots.11
148
(let* ((obj (make-mlfss-03 :a 17))
149
(forms (multiple-value-list
150
(make-load-form-saving-slots
152
:slot-names '(cl-test-mlfss-package:a)))))
153
(let ((newobj (eval (first forms))))
154
(eval (subst newobj obj (second forms)))
158
(eqt (class-of obj) (class-of newobj))
159
(mlfss-03-a newobj))))
163
(defstruct mlfss-04 (a 0 :read-only t))
165
(deftest make-load-form-savings-slots.12
166
(let* ((obj (make-mlfss-04 :a 123))
167
(forms (multiple-value-list
168
(make-load-form-saving-slots obj))))
169
(let ((newobj (eval (first forms))))
170
(eval (subst newobj obj (second forms)))
174
(eqt (class-of obj) (class-of newobj))
175
(mlfss-04-a newobj))))
179
;;; General error tests
181
(deftest make-load-form-saving-slots.error.1
182
(signals-error (make-load-form-saving-slots) program-error)
185
(deftest make-load-form-saving-slots.error.2
186
(signals-error (make-load-form-saving-slots (make-instance 'mlfss-02)
191
(deftest make-load-form-saving-slots.error.3
192
(signals-error (make-load-form-saving-slots (make-instance 'mlfss-02)