Mercurial > hg > xemacs-beta
annotate tests/automated/weak-tests.el @ 4934:714f7c9fabb1
make it easier to debug staticpro crashes.
Add functions to print out the variable names saved during calls to
staticpro(), and change the order of enumerating staticpros to start
from 0 to make it easier to get a count to pass to the new functions.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Tue, 19 Jan 2010 01:21:39 -0600 |
parents | 189fb67ca31a |
children | 0f66906b6e37 |
rev | line source |
---|---|
890 | 1 ;; Copyright (C) 1998 Free Software Foundation, Inc. |
2 | |
3 ;; Author: Mike Sperber <mike@xemacs.org> | |
4 ;; Maintainer: Mike Sperber <mike@xemacs.org> | |
5 ;; Created: 2002 | |
6 ;; Keywords: tests, database | |
7 | |
8 ;; This file is part of XEmacs. | |
9 | |
10 ;; XEmacs is free software; you can redistribute it and/or modify it | |
11 ;; under the terms of the GNU General Public License as published by | |
12 ;; the Free Software Foundation; either version 2, or (at your option) | |
13 ;; any later version. | |
14 | |
15 ;; XEmacs is distributed in the hope that it will be useful, but | |
16 ;; WITHOUT ANY WARRANTY; without even the implied warranty of | |
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
18 ;; General Public License for more details. | |
19 | |
20 ;; You should have received a copy of the GNU General Public License | |
21 ;; along with XEmacs; see the file COPYING. If not, write to the Free | |
22 ;; Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA | |
23 ;; 02111-1307, USA. | |
24 | |
25 ;;; Synched up with: Not in FSF. | |
26 | |
27 ;;; Commentary: | |
28 | |
1636 | 29 ;;; Test implementation of weak boxes, ephemerons, and weak lists |
890 | 30 ;;; See test-harness.el |
31 | |
32 (condition-case err | |
33 (require 'test-harness) | |
34 (file-error | |
35 (when (and (boundp 'load-file-name) (stringp load-file-name)) | |
36 (push (file-name-directory load-file-name) load-path) | |
37 (require 'test-harness)))) | |
38 | |
39 (garbage-collect) | |
1636 | 40 |
41 ;; tests for weak-boxes | |
890 | 42 (let ((w (make-weak-box (cons 2 3)))) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
43 (Assert-equal (cons 2 3) (weak-box-ref w)) |
890 | 44 (garbage-collect) |
45 (Assert (not (weak-box-ref w)))) | |
46 | |
47 (garbage-collect) | |
48 | |
1636 | 49 ;; tests for ephemerons |
890 | 50 (let* ((p (cons 3 4)) |
51 (finalized-p nil) | |
52 (eph1 (make-ephemeron (cons 1 2) p | |
4021 | 53 #'(lambda (value) |
54 (setq finalized-p t)))) | |
890 | 55 (eph2 (make-ephemeron p p))) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
56 (Assert-eq p (ephemeron-ref (make-ephemeron (cons 1 2) p))) |
890 | 57 (Assert (ephemeron-p (make-ephemeron (cons 1 2) p))) |
58 | |
59 (garbage-collect) | |
60 (garbage-collect) ; ensure the post-gc hook runs | |
61 | |
62 (Assert finalized-p) | |
63 (Assert (not (ephemeron-ref eph1))) | |
64 | |
65 (garbage-collect) | |
66 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
67 (Assert-eq p (ephemeron-ref eph2))) |
890 | 68 |
1636 | 69 (garbage-collect) |
70 | |
71 ;; tests for simple weak-lists | |
72 (let* ((a (cons 23 42)) | |
73 (b (cons 42 65)) | |
74 (testlist (list a b)) | |
75 (weaklist1 (make-weak-list 'simple)) | |
76 (weaklist2 (make-weak-list 'simple)) | |
77 (weaklist3 (make-weak-list 'simple)) | |
78 (weaklist4 (make-weak-list 'simple))) | |
79 (set-weak-list-list weaklist1 testlist) | |
80 (set-weak-list-list weaklist2 (list (cons 1 2) a b)) | |
81 (set-weak-list-list weaklist3 (list a (cons 1 2) b)) | |
82 (set-weak-list-list weaklist4 (list a b (cons 1 2))) | |
83 (Assert (weak-list-p weaklist1)) | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
84 (Assert-eq (weak-list-type weaklist1) 'simple) |
1636 | 85 (Assert (weak-list-p weaklist2)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
86 (Assert-eq (weak-list-type weaklist2) 'simple) |
1636 | 87 (Assert (weak-list-p weaklist3)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
88 (Assert-eq (weak-list-type weaklist3) 'simple) |
1636 | 89 (Assert (weak-list-p weaklist4)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
90 (Assert-eq (weak-list-type weaklist4) 'simple) |
1636 | 91 |
92 (garbage-collect) | |
93 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
94 (Assert-eq (weak-list-list weaklist1) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
95 (Assert-equal (weak-list-list weaklist2) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
96 (Assert-equal (weak-list-list weaklist3) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
97 (Assert-equal (weak-list-list weaklist4) testlist)) |
1636 | 98 |
99 (garbage-collect) | |
100 | |
101 ;; tests for assoc weak-lists | |
102 (let* ((a (cons 23 42)) | |
103 (b (cons a a)) | |
104 (testlist (list b b)) | |
105 (weaklist1 (make-weak-list 'assoc)) | |
106 (weaklist2 (make-weak-list 'assoc)) | |
107 (weaklist3 (make-weak-list 'assoc)) | |
108 (weaklist4 (make-weak-list 'assoc))) | |
109 (set-weak-list-list weaklist1 testlist) | |
110 (set-weak-list-list weaklist2 (list b (cons (cons 1 2) a) b)) | |
111 (set-weak-list-list weaklist3 (list b (cons a (cons 1 2)) b)) | |
112 (set-weak-list-list weaklist4 (list b (cons (cons 1 2) (cons 3 4)) b)) | |
113 (Assert (weak-list-p weaklist1)) | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
114 (Assert-eq (weak-list-type weaklist1) 'assoc) |
1636 | 115 (Assert (weak-list-p weaklist2)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
116 (Assert-eq (weak-list-type weaklist2) 'assoc) |
1636 | 117 (Assert (weak-list-p weaklist3)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
118 (Assert-eq (weak-list-type weaklist3) 'assoc) |
1636 | 119 (Assert (weak-list-p weaklist4)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
120 (Assert-eq (weak-list-type weaklist4) 'assoc) |
1636 | 121 |
122 (garbage-collect) | |
123 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
124 (Assert-eq (weak-list-list weaklist1) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
125 (Assert-equal (weak-list-list weaklist2) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
126 (Assert-equal (weak-list-list weaklist3) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
127 (Assert-equal (weak-list-list weaklist4) testlist)) |
1636 | 128 |
129 (garbage-collect) | |
130 | |
131 ;; tests for key-assoc weak-lists | |
132 (let* ((a (cons 23 42)) | |
133 (b (cons a a)) | |
134 (testlist (list b b)) | |
135 (weaklist1 (make-weak-list 'key-assoc)) | |
136 (weaklist2 (make-weak-list 'key-assoc)) | |
137 (weaklist3 (make-weak-list 'key-assoc)) | |
138 (weaklist4 (make-weak-list 'key-assoc))) | |
139 (set-weak-list-list weaklist1 testlist) | |
140 (set-weak-list-list weaklist2 (list b (cons (cons 1 2) a) b)) | |
141 (set-weak-list-list weaklist3 (list b (cons a (cons 1 2)) b)) | |
142 (set-weak-list-list weaklist4 (list b (cons (cons 1 2) (cons 3 4)) b)) | |
143 (Assert (weak-list-p weaklist1)) | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
144 (Assert-eq (weak-list-type weaklist1) 'key-assoc) |
1636 | 145 (Assert (weak-list-p weaklist2)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
146 (Assert-eq (weak-list-type weaklist2) 'key-assoc) |
1636 | 147 (Assert (weak-list-p weaklist3)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
148 (Assert-eq (weak-list-type weaklist3) 'key-assoc) |
1636 | 149 (Assert (weak-list-p weaklist4)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
150 (Assert-eq (weak-list-type weaklist4) 'key-assoc) |
1636 | 151 |
152 (garbage-collect) | |
153 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
154 (Assert-eq (weak-list-list weaklist1) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
155 (Assert-equal (weak-list-list weaklist2) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
156 (Assert-equal (weak-list-list weaklist3) (list b (cons a (cons 1 2)) b)) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
157 (Assert-equal (weak-list-list weaklist4) testlist)) |
1636 | 158 |
159 (garbage-collect) | |
160 | |
161 ;; tests for value-assoc weak-lists | |
162 (let* ((a (cons 23 42)) | |
163 (b (cons a a)) | |
164 (testlist (list b b)) | |
165 (weaklist1 (make-weak-list 'value-assoc)) | |
166 (weaklist2 (make-weak-list 'value-assoc)) | |
167 (weaklist3 (make-weak-list 'value-assoc)) | |
168 (weaklist4 (make-weak-list 'value-assoc))) | |
169 (set-weak-list-list weaklist1 testlist) | |
170 (set-weak-list-list weaklist2 (list b (cons (cons 1 2) a) b)) | |
171 (set-weak-list-list weaklist3 (list b (cons a (cons 1 2)) b)) | |
172 (set-weak-list-list weaklist4 (list b (cons (cons 1 2) (cons 3 4)) b)) | |
173 (Assert (weak-list-p weaklist1)) | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
174 (Assert-eq (weak-list-type weaklist1) 'value-assoc) |
1636 | 175 (Assert (weak-list-p weaklist2)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
176 (Assert-eq (weak-list-type weaklist2) 'value-assoc) |
1636 | 177 (Assert (weak-list-p weaklist3)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
178 (Assert-eq (weak-list-type weaklist3) 'value-assoc) |
1636 | 179 (Assert (weak-list-p weaklist4)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
180 (Assert-eq (weak-list-type weaklist4) 'value-assoc) |
1636 | 181 |
182 (garbage-collect) | |
183 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
184 (Assert-eq (weak-list-list weaklist1) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
185 (Assert-equal (weak-list-list weaklist2) (list b (cons (cons 1 2) a) b)) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
186 (Assert-equal (weak-list-list weaklist3) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
187 (Assert-equal (weak-list-list weaklist4) testlist)) |
1636 | 188 |
189 (garbage-collect) | |
190 | |
191 ;; tests for full-assoc weak-lists | |
192 (let* ((a (cons 23 42)) | |
193 (b (cons a a)) | |
194 (testlist (list b b)) | |
195 (weaklist1 (make-weak-list 'full-assoc)) | |
196 (weaklist2 (make-weak-list 'full-assoc)) | |
197 (weaklist3 (make-weak-list 'full-assoc)) | |
198 (weaklist4 (make-weak-list 'full-assoc))) | |
199 (set-weak-list-list weaklist1 testlist) | |
200 (set-weak-list-list weaklist2 (list b (cons (cons 1 2) a) b)) | |
201 (set-weak-list-list weaklist3 (list b (cons a (cons 1 2)) b)) | |
202 (set-weak-list-list weaklist4 (list b (cons (cons 1 2) (cons 3 4)) b)) | |
203 (Assert (weak-list-p weaklist1)) | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
204 (Assert-eq (weak-list-type weaklist1) 'full-assoc) |
1636 | 205 (Assert (weak-list-p weaklist2)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
206 (Assert-eq (weak-list-type weaklist2) 'full-assoc) |
1636 | 207 (Assert (weak-list-p weaklist3)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
208 (Assert-eq (weak-list-type weaklist3) 'full-assoc) |
1636 | 209 (Assert (weak-list-p weaklist4)) |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
210 (Assert-eq (weak-list-type weaklist4) 'full-assoc) |
1636 | 211 |
212 (garbage-collect) | |
213 | |
4855
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
214 (Assert-eq (weak-list-list weaklist1) testlist) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
215 (Assert-equal (weak-list-list weaklist2) (list b (cons (cons 1 2) a) b)) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
216 (Assert-equal (weak-list-list weaklist3) (list b (cons a (cons 1 2)) b)) |
189fb67ca31a
Create Assert-eq, Assert-equal, etc.
Ben Wing <ben@xemacs.org>
parents:
4366
diff
changeset
|
217 (Assert-equal (weak-list-list weaklist4) testlist)) |
1636 | 218 |
219 (garbage-collect) | |
1773
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
220 |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
221 ;; test the intended functionality of the fixpoint iteration used for marking |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
222 ;; weak data structures like the ephermerons. Basically this tests gc_internals |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
223 ;; to work properly but it also ensures the ephemerons behave according to the |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
224 ;; specification |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
225 |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
226 (let* ((inner_cons (cons 1 2)) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
227 (weak1 (make-ephemeron inner_cons |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
228 (make-ephemeron inner_cons |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
229 (cons 1 2) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
230 '(lambda (v) t)) |
4021 | 231 #'(lambda (v) t)))) |
1773
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
232 (Assert (ephemeron-ref (ephemeron-ref weak1))) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
233 (garbage-collect) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
234 ;; assure the inner ephis are still there |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
235 (Assert (ephemeron-ref (ephemeron-ref weak1))) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
236 ;; delete the key reference and force cleaning up the garbage |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
237 (setq inner_cons (cons 3 4)) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
238 (garbage-collect) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
239 (Assert (not (ephemeron-ref weak1))) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
240 ) |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
241 |
aa0db78e67c4
[xemacs-hg @ 2003-11-01 14:54:53 by kaltenbach]
kaltenbach
parents:
1758
diff
changeset
|
242 (garbage-collect) |