Mercurial > hg > xemacs-beta
annotate tests/automated/weak-tests.el @ 5067:7d7ae8db0341
add functions `stable-union' and `stable-intersection' to do stable set operations
-------------------- ChangeLog entries follow: --------------------
lisp/ChangeLog addition:
2010-02-22 Ben Wing <ben@xemacs.org>
* cl-seq.el:
* cl-seq.el (stable-union): New.
* cl-seq.el (stable-intersection): New.
New functions to do stable set operations, i.e. preserve the order
of the elements in the argument lists, and prefer LIST1 over LIST2
when ordering the combined result. The result looks as much like
LIST1 as possible, followed (in the case of `stable-union') by
any necessary elements from LIST2, in order. This is contrary to
`union' and `intersection', which are not required to be order-
preserving and are not -- they prefer LIST2 and output results in
backwards order.
author | Ben Wing <ben@xemacs.org> |
---|---|
date | Mon, 22 Feb 2010 21:23:02 -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) |