Mercurial > hg > xemacs-beta
comparison tests/automated/lisp-tests.el @ 5191:71ee43b8a74d
Add #'equalp as a hash test by default; add #'define-hash-table-test, GNU API
tests/ChangeLog addition:
2010-04-05 Aidan Kehoe <kehoea@parhasard.net>
* automated/hash-table-tests.el:
Test the new built-in #'equalp hash table test. Test
#'define-hash-table-test.
* automated/lisp-tests.el:
When asserting that two objects are #'equalp, also assert that
their #'equalp-hash is identical.
man/ChangeLog addition:
2010-04-03 Aidan Kehoe <kehoea@parhasard.net>
* lispref/hash-tables.texi (Introduction to Hash Tables):
Document that we now support #'equalp as a hash table test by
default, and mention #'define-hash-table-test.
(Working With Hash Tables): Document #'define-hash-table-test.
src/ChangeLog addition:
2010-04-05 Aidan Kehoe <kehoea@parhasard.net>
* elhash.h:
* elhash.c (struct Hash_Table_Test, lisp_object_eql_equal)
(lisp_object_eql_hash, lisp_object_equal_equal)
(lisp_object_equal_hash, lisp_object_equalp_hash)
(lisp_object_equalp_equal, lisp_object_general_hash)
(lisp_object_general_equal, Feq_hash, Feql_hash, Fequal_hash)
(Fequalp_hash, define_hash_table_test, Fdefine_hash_table_test)
(init_elhash_once_early, mark_hash_table_tests, string_equalp_hash):
* glyphs.c (vars_of_glyphs):
Add a new hash table test in C, #'equalp.
Make it possible to specify new hash table tests with functions
define_hash_table_test, #'define-hash-table-test.
Use define_hash_table_test() in glyphs.c.
Expose the hash functions (besides that used for #'equal) to Lisp,
for people writing functions to be used with #'define-hash-table-test.
Call define_hash_table_test() very early in temacs, to create the
built-in hash table tests.
* ui-gtk.c (emacs_gtk_boxed_hash):
* specifier.h (struct specifier_methods):
* specifier.c (specifier_hash):
* rangetab.c (range_table_entry_hash, range_table_hash):
* number.c (bignum_hash, ratio_hash, bigfloat_hash):
* marker.c (marker_hash):
* lrecord.h (struct lrecord_implementation):
* keymap.c (keymap_hash):
* gui.c (gui_item_id_hash, gui_item_hash):
* glyphs.c (image_instance_hash, glyph_hash):
* glyphs-x.c (x_image_instance_hash):
* glyphs-msw.c (mswindows_image_instance_hash):
* glyphs-gtk.c (gtk_image_instance_hash):
* frame-msw.c (mswindows_set_title_from_ibyte):
* fontcolor.c (color_instance_hash, font_instance_hash):
* fontcolor-x.c (x_color_instance_hash):
* fontcolor-tty.c (tty_color_instance_hash):
* fontcolor-msw.c (mswindows_color_instance_hash):
* fontcolor-gtk.c (gtk_color_instance_hash):
* fns.c (bit_vector_hash):
* floatfns.c (float_hash):
* faces.c (face_hash):
* extents.c (extent_hash):
* events.c (event_hash):
* data.c (weak_list_hash, weak_box_hash):
* chartab.c (char_table_entry_hash, char_table_hash):
* bytecode.c (compiled_function_hash):
* alloc.c (vector_hash):
Change the various object hash methods to take a new EQUALP
parameter, hashing appropriately for #'equalp if it is true.
author | Aidan Kehoe <kehoea@parhasard.net> |
---|---|
date | Mon, 05 Apr 2010 13:03:35 +0100 |
parents | 000287f8053b |
children | d579d76f3dcc |
comparison
equal
deleted
inserted
replaced
5190:1c1d8843de5e | 5191:71ee43b8a74d |
---|---|
2147 (loop for (x . tail) on li do | 2147 (loop for (x . tail) on li do |
2148 (loop for y in tail do | 2148 (loop for y in tail do |
2149 (push `(Assert (equalp ,(quote-maybe x) | 2149 (push `(Assert (equalp ,(quote-maybe x) |
2150 ,(quote-maybe y))) res) | 2150 ,(quote-maybe y))) res) |
2151 (push `(Assert (equalp ,(quote-maybe y) | 2151 (push `(Assert (equalp ,(quote-maybe y) |
2152 ,(quote-maybe x))) res)))) | 2152 ,(quote-maybe x))) res) |
2153 (push `(Assert (eql (equalp-hash ,(quote-maybe y)) | |
2154 (equalp-hash ,(quote-maybe x)))) | |
2155 res)))) | |
2153 (cons 'progn (nreverse res)))) | 2156 (cons 'progn (nreverse res)))) |
2154 (equalp-diff-list-tests (diff-list) | 2157 (equalp-diff-list-tests (diff-list) |
2155 (let (res) | 2158 (let (res) |
2156 (setq diff-list (eval diff-list)) | 2159 (setq diff-list (eval diff-list)) |
2157 (loop for (x . tail) on diff-list do | 2160 (loop for (x . tail) on diff-list do |
2158 (loop for y in tail do | 2161 (loop for y in tail do |
2159 (push `(Assert (not (equalp ,(quote-maybe x) | 2162 (push `(Assert (not (equalp ,(quote-maybe x) |
2160 ,(quote-maybe y)))) res) | 2163 ,(quote-maybe y)))) res) |
2161 (push `(Assert (not (equalp ,(quote-maybe y) | 2164 (push `(Assert (not (equalp ,(quote-maybe y) |
2162 ,(quote-maybe x)))) res))) | 2165 ,(quote-maybe x)))) res))) |
2163 (cons 'progn (nreverse res))))) | 2166 (cons 'progn (nreverse res)))) |
2167 (Assert-equalp (object-one object-two &optional failing-case description) | |
2168 `(progn | |
2169 (Assert (equalp ,object-one ,object-two) | |
2170 ,@(if failing-case | |
2171 (list failing-case description))) | |
2172 (Assert (eql (equalp-hash ,object-one) (equalp-hash ,object-two)))))) | |
2164 (equalp-equal-list-tests | 2173 (equalp-equal-list-tests |
2165 `(,@(when (featurep 'bignum) | 2174 `(,@(when (featurep 'bignum) |
2166 (read "((111111111111111111111111111111111111111111111111111 | 2175 (read "((111111111111111111111111111111111111111111111111111 |
2167 111111111111111111111111111111111111111111111111111.0))")) | 2176 111111111111111111111111111111111111111111111111111.0))")) |
2168 (0 0.0 0.000 -0 -0.0 -0.000 #b0 ,@(when (featurep 'ratio) '(0/5 -0/5))) | 2177 (0 0.0 0.000 -0 -0.0 -0.000 #b0 ,@(when (featurep 'ratio) '(0/5 -0/5))) |
2181 -1 -2 -3 -1000 -5000000000 | 2190 -1 -2 -3 -1000 -5000000000 |
2182 1/2 1/3 2/3 8/2 355/113 | 2191 1/2 1/3 2/3 8/2 355/113 |
2183 ,@(when (featurep 'ratio) (mapcar* #'/ '(3/2 3/2) '(0.2 0.7))) | 2192 ,@(when (featurep 'ratio) (mapcar* #'/ '(3/2 3/2) '(0.2 0.7))) |
2184 55555555555555555555555555555555555555555/2718281828459045 | 2193 55555555555555555555555555555555555555555/2718281828459045 |
2185 0.111111111111111111111111111111111111111111111111111111111111111 | 2194 0.111111111111111111111111111111111111111111111111111111111111111 |
2186 1e+300 1e+301 -1e+300 -1e+301))) | 2195 1e+300 1e+301 -1e+300 -1e+301)) |
2187 | 2196 |
2188 (Assert (equalp "hi there" "Hi There") | 2197 (Assert-equalp "hi there" "Hi There" |
2189 "checking equalp isn't case-sensitive") | 2198 "checking equalp isn't case-sensitive") |
2190 (Assert (equalp 99 99.0) | 2199 (Assert-equalp |
2191 "checking equalp compares numerical values of different types") | 2200 99 99.0 |
2192 (Assert (null (equalp 99 ?c)) | 2201 "checking equalp compares numerical values of different types") |
2193 "checking equalp does not convert characters to numbers") | 2202 (Assert (null (equalp 99 ?c)) |
2194 ;; Fixed in Hg d0ea57eb3de4. | 2203 "checking equalp does not convert characters to numbers") |
2195 (Assert (null (equalp "hi there" [hi there])) | 2204 ;; Fixed in Hg d0ea57eb3de4. |
2196 "checking equalp doesn't error with string and non-string") | 2205 (Assert (null (equalp "hi there" [hi there])) |
2197 (Assert (equalp "ABCDEEFGH\u00CDJ" string-variable) | 2206 "checking equalp doesn't error with string and non-string") |
2198 "checking #'equalp is case-insensitive with an upcased constant") | 2207 (Assert-equalp |
2199 (Assert (equalp "abcdeefgh\xedj" string-variable) | 2208 "ABCDEEFGH\u00CDJ" string-variable |
2200 "checking #'equalp is case-insensitive with a downcased constant") | 2209 "checking #'equalp is case-insensitive with an upcased constant") |
2201 (Assert (equalp string-variable string-variable) | 2210 (Assert-equalp |
2202 "checking #'equalp works when handed the same string twice") | 2211 "abcdeefgh\xedj" string-variable |
2203 (Assert (equalp string-variable "aBcDeeFgH\u00Edj") | 2212 "checking #'equalp is case-insensitive with a downcased constant") |
2204 "check #'equalp is case-insensitive with a variable-cased constant") | 2213 (Assert-equalp string-variable string-variable |
2205 (Assert (equalp "" (bit-vector)) | 2214 "checking #'equalp works when handed the same string twice") |
2206 "check empty string and empty bit-vector are #'equalp.") | 2215 (Assert (equalp string-variable "aBcDeeFgH\u00Edj") |
2207 (Assert (equalp (string) (bit-vector)) | 2216 "check #'equalp is case-insensitive with a variable-cased constant") |
2208 "check empty string and empty bit-vector are #'equalp, no constants") | 2217 (Assert-equalp "" (bit-vector) |
2209 (Assert (equalp "hi there" (vector ?h ?i ?\ ?t ?h ?e ?r ?e)) | 2218 "check empty string and empty bit-vector are #'equalp.") |
2210 "check string and vector with same contents #'equalp") | 2219 (Assert-equalp |
2211 (Assert (equalp (string ?h ?i ?\ ?t ?h ?e ?r ?e) | 2220 (string) (bit-vector) |
2212 (vector ?h ?i ?\ ?t ?h ?e ?r ?e)) | 2221 "check empty string and empty bit-vector are #'equalp, no constants") |
2213 "check string and vector with same contents #'equalp, no constants") | 2222 (Assert-equalp "hi there" (vector ?h ?i ?\ ?t ?h ?e ?r ?e) |
2214 (Assert (equalp [?h ?i ?\ ?t ?h ?e ?r ?e] | 2223 "check string and vector with same contents #'equalp") |
2215 (string ?h ?i ?\ ?t ?h ?e ?r ?e)) | 2224 (Assert-equalp |
2216 "check string and vector with same contents #'equalp, vector constant") | 2225 (string ?h ?i ?\ ?t ?h ?e ?r ?e) |
2217 (Assert (equalp [0 1.0 0.0 0 1] | 2226 (vector ?h ?i ?\ ?t ?h ?e ?r ?e) |
2218 (bit-vector 0 1 0 0 1)) | 2227 "check string and vector with same contents #'equalp, no constants") |
2219 "check vector and bit-vector with same contents #'equalp,\ | 2228 (Assert-equalp |
2229 [?h ?i ?\ ?t ?h ?e ?r ?e] | |
2230 (string ?h ?i ?\ ?t ?h ?e ?r ?e) | |
2231 "check string and vector with same contents #'equalp, vector constant") | |
2232 (Assert-equalp [0 1.0 0.0 0 1] | |
2233 (bit-vector 0 1 0 0 1) | |
2234 "check vector and bit-vector with same contents #'equalp,\ | |
2220 vector constant") | 2235 vector constant") |
2221 (Assert (not (equalp [0 2 0.0 0 1] | 2236 (Assert (not (equalp [0 2 0.0 0 1] |
2222 (bit-vector 0 1 0 0 1))) | 2237 (bit-vector 0 1 0 0 1))) |
2223 "check vector and bit-vector with different contents not #'equalp,\ | 2238 "check vector and bit-vector with different contents not #'equalp,\ |
2224 vector constant") | 2239 vector constant") |
2225 (Assert (equalp #*01001 | 2240 (Assert-equalp #*01001 |
2226 (vector 0 1.0 0.0 0 1)) | 2241 (vector 0 1.0 0.0 0 1) |
2227 "check vector and bit-vector with same contents #'equalp,\ | 2242 "check vector and bit-vector with same contents #'equalp,\ |
2228 bit-vector constant") | 2243 bit-vector constant") |
2229 (Assert (equalp ?\u00E9 Eacute-character) | 2244 (Assert-equalp ?\u00E9 Eacute-character |
2230 "checking characters are case-insensitive, one constant") | 2245 "checking characters are case-insensitive, one constant") |
2231 (Assert (not (equalp ?\u00E9 (aref (format "%c" ?a) 0))) | 2246 (Assert (not (equalp ?\u00E9 (aref (format "%c" ?a) 0))) |
2232 "checking distinct characters are not equalp, one constant") | 2247 "checking distinct characters are not equalp, one constant") |
2233 (Assert (equalp t (and)) | 2248 (Assert-equalp t (and) |
2234 "checking symbols are correctly #'equalp") | 2249 "checking symbols are correctly #'equalp") |
2235 (Assert (not (equalp t (or nil '#:t))) | 2250 (Assert (not (equalp t (or nil '#:t))) |
2236 "checking distinct symbols with the same name are not #'equalp") | 2251 "checking distinct symbols with the same name are not #'equalp") |
2237 (Assert (equalp #s(char-table type generic data (?\u0080 "hi-there")) | 2252 (Assert-equalp #s(char-table type generic data (?\u0080 "hi-there")) |
2238 (let ((aragh (make-char-table 'generic))) | 2253 (let ((aragh (make-char-table 'generic))) |
2239 (put-char-table ?\u0080 "hi-there" aragh) | 2254 (put-char-table ?\u0080 "hi-there" aragh) |
2240 aragh)) | 2255 aragh) |
2241 "checking #'equalp succeeds correctly, char-tables") | 2256 "checking #'equalp succeeds correctly, char-tables") |
2242 (Assert (equalp #s(char-table type generic data (?\u0080 "hi-there")) | 2257 (Assert-equalp #s(char-table type generic data (?\u0080 "hi-there")) |
2243 (let ((aragh (make-char-table 'generic))) | 2258 (let ((aragh (make-char-table 'generic))) |
2244 (put-char-table ?\u0080 "HI-THERE" aragh) | 2259 (put-char-table ?\u0080 "HI-THERE" aragh) |
2245 aragh)) | 2260 aragh) |
2246 "checking #'equalp succeeds correctly, char-tables") | 2261 "checking #'equalp succeeds correctly, char-tables") |
2247 (Assert (not (equalp #s(char-table type generic data (?\u0080 "hi-there")) | 2262 (Assert (not (equalp #s(char-table type generic data (?\u0080 "hi-there")) |
2248 (let ((aragh (make-char-table 'generic))) | 2263 (let ((aragh (make-char-table 'generic))) |
2249 (put-char-table ?\u0080 "hi there" aragh) | 2264 (put-char-table ?\u0080 "hi there" aragh) |
2250 aragh))) | 2265 aragh))) |
2251 "checking #'equalp fails correctly, char-tables")) | 2266 "checking #'equalp fails correctly, char-tables"))) |
2252 | 2267 |
2253 ;; There are more tests available for equalp here: | 2268 ;; There are more tests available for equalp here: |
2254 ;; | 2269 ;; |
2255 ;; http://www.parhasard.net/xemacs/equalp-tests.el | 2270 ;; http://www.parhasard.net/xemacs/equalp-tests.el |
2256 ;; | 2271 ;; |