diff options
| author | Phillip Lord | 2015-11-23 22:02:42 +0000 |
|---|---|---|
| committer | Phillip Lord | 2015-11-24 17:04:22 +0000 |
| commit | 22bbf7ca22f11cc33d887d0162cf2ec6661c3a3e (patch) | |
| tree | 779ff7e07667194416e01c6a6e8bd7b970244c70 /test/src/data-tests.el | |
| parent | c378d6c33f751d1a0b97958f3cacfe0b07c72f58 (diff) | |
| download | emacs-22bbf7ca22f11cc33d887d0162cf2ec6661c3a3e.tar.gz emacs-22bbf7ca22f11cc33d887d0162cf2ec6661c3a3e.zip | |
Rename all test files to reflect source layout.
* CONTRIBUTE,Makefile.in,configure.ac: Update to reflect
test directory moves.
* test/file-organisation.org: New file.
* test/automated/Makefile.in
test/automated/data/decompress/foo.gz
test/automated/data/epg/pubkey.asc
test/automated/data/epg/seckey.asc
test/automated/data/files-bug18141.el.gz
test/automated/data/flymake/test.c
test/automated/data/flymake/test.pl
test/automated/data/package/archive-contents
test/automated/data/package/key.pub
test/automated/data/package/key.sec
test/automated/data/package/multi-file-0.2.3.tar
test/automated/data/package/multi-file-readme.txt
test/automated/data/package/newer-versions/archive-contents
test/automated/data/package/newer-versions/new-pkg-1.0.el
test/automated/data/package/newer-versions/simple-single-1.4.el
test/automated/data/package/package-test-server.py
test/automated/data/package/signed/archive-contents
test/automated/data/package/signed/archive-contents.sig
test/automated/data/package/signed/signed-bad-1.0.el
test/automated/data/package/signed/signed-bad-1.0.el.sig
test/automated/data/package/signed/signed-good-1.0.el
test/automated/data/package/signed/signed-good-1.0.el.sig
test/automated/data/package/simple-depend-1.0.el
test/automated/data/package/simple-single-1.3.el
test/automated/data/package/simple-single-readme.txt
test/automated/data/package/simple-two-depend-1.1.el
test/automated/abbrev-tests.el
test/automated/auto-revert-tests.el
test/automated/calc-tests.el
test/automated/icalendar-tests.el
test/automated/character-fold-tests.el
test/automated/comint-testsuite.el
test/automated/descr-text-test.el
test/automated/electric-tests.el
test/automated/cl-generic-tests.el
test/automated/cl-lib-tests.el
test/automated/eieio-test-methodinvoke.el
test/automated/eieio-test-persist.el
test/automated/eieio-tests.el
test/automated/ert-tests.el
test/automated/ert-x-tests.el
test/automated/generator-tests.el
test/automated/let-alist.el
test/automated/map-tests.el
test/automated/advice-tests.el
test/automated/package-test.el
test/automated/pcase-tests.el
test/automated/regexp-tests.el
test/automated/seq-tests.el
test/automated/subr-x-tests.el
test/automated/tabulated-list-test.el
test/automated/thunk-tests.el
test/automated/timer-tests.el
test/automated/epg-tests.el
test/automated/eshell.el
test/automated/faces-tests.el
test/automated/file-notify-tests.el
test/automated/auth-source-tests.el
test/automated/gnus-tests.el
test/automated/message-mode-tests.el
test/automated/help-fns.el
test/automated/imenu-test.el
test/automated/info-xref.el
test/automated/mule-util.el
test/automated/isearch-tests.el
test/automated/json-tests.el
test/automated/bytecomp-tests.el
test/automated/coding-tests.el
test/automated/core-elisp-tests.el
test/automated/decoder-tests.el
test/automated/files.el
test/automated/font-parse-tests.el
test/automated/lexbind-tests.el
test/automated/occur-tests.el
test/automated/process-tests.el
test/automated/syntax-tests.el
test/automated/textprop-tests.el
test/automated/undo-tests.el
test/automated/man-tests.el
test/automated/completion-tests.el
test/automated/dbus-tests.el
test/automated/newsticker-tests.el
test/automated/sasl-scram-rfc-tests.el
test/automated/tramp-tests.el
test/automated/obarray-tests.el
test/automated/compile-tests.el
test/automated/elisp-mode-tests.el
test/automated/f90.el
test/automated/flymake-tests.el
test/automated/python-tests.el
test/automated/ruby-mode-tests.el
test/automated/subword-tests.el
test/automated/replace-tests.el
test/automated/simple-test.el
test/automated/sort-tests.el
test/automated/subr-tests.el
test/automated/reftex-tests.el
test/automated/sgml-mode-tests.el
test/automated/tildify-tests.el
test/automated/thingatpt.el
test/automated/url-future-tests.el
test/automated/url-util-tests.el
test/automated/add-log-tests.el
test/automated/vc-bzr.el
test/automated/vc-tests.el
test/automated/xml-parse-tests.el
test/BidiCharacterTest.txt
test/biditest.el
test/cedet/cedet-utests.el
test/cedet/ede-tests.el
test/cedet/semantic-ia-utest.el
test/cedet/semantic-tests.el
test/cedet/semantic-utest-c.el
test/cedet/semantic-utest.el
test/cedet/srecode-tests.el
test/cedet/tests/test.c
test/cedet/tests/test.el
test/cedet/tests/test.make
test/cedet/tests/testdoublens.cpp
test/cedet/tests/testdoublens.hpp
test/cedet/tests/testfriends.cpp
test/cedet/tests/testjavacomp.java
test/cedet/tests/testnsp.cpp
test/cedet/tests/testpolymorph.cpp
test/cedet/tests/testspp.c
test/cedet/tests/testsppcomplete.c
test/cedet/tests/testsppreplace.c
test/cedet/tests/testsppreplaced.c
test/cedet/tests/testsubclass.cpp
test/cedet/tests/testsubclass.hh
test/cedet/tests/testtypedefs.cpp
test/cedet/tests/testvarnames.c
test/etags/CTAGS.good
test/etags/ETAGS.good_1
test/etags/ETAGS.good_2
test/etags/ETAGS.good_3
test/etags/ETAGS.good_4
test/etags/ETAGS.good_5
test/etags/ETAGS.good_6
test/etags/a-src/empty.zz
test/etags/a-src/empty.zz.gz
test/etags/ada-src/2ataspri.adb
test/etags/ada-src/2ataspri.ads
test/etags/ada-src/etags-test-for.ada
test/etags/ada-src/waroquiers.ada
test/etags/c-src/a/b/b.c
test/etags/c-src/abbrev.c
test/etags/c-src/c.c
test/etags/c-src/dostorture.c
test/etags/c-src/emacs/src/gmalloc.c
test/etags/c-src/emacs/src/keyboard.c
test/etags/c-src/emacs/src/lisp.h
test/etags/c-src/emacs/src/regex.h
test/etags/c-src/etags.c
test/etags/c-src/exit.c
test/etags/c-src/exit.strange_suffix
test/etags/c-src/fail.c
test/etags/c-src/getopt.h
test/etags/c-src/h.h
test/etags/c-src/machsyscalls.c
test/etags/c-src/machsyscalls.h
test/etags/c-src/sysdep.h
test/etags/c-src/tab.c
test/etags/c-src/torture.c
test/etags/cp-src/MDiagArray2.h
test/etags/cp-src/Range.h
test/etags/cp-src/burton.cpp
test/etags/cp-src/c.C
test/etags/cp-src/clheir.cpp.gz
test/etags/cp-src/clheir.hpp
test/etags/cp-src/conway.cpp
test/etags/cp-src/conway.hpp
test/etags/cp-src/fail.C
test/etags/cp-src/functions.cpp
test/etags/cp-src/screen.cpp
test/etags/cp-src/screen.hpp
test/etags/cp-src/x.cc
test/etags/el-src/TAGTEST.EL
test/etags/el-src/emacs/lisp/progmodes/etags.el
test/etags/erl-src/gs_dialog.erl
test/etags/f-src/entry.for
test/etags/f-src/entry.strange.gz
test/etags/f-src/entry.strange_suffix
test/etags/forth-src/test-forth.fth
test/etags/html-src/algrthms.html
test/etags/html-src/index.shtml
test/etags/html-src/software.html
test/etags/html-src/softwarelibero.html
test/etags/lua-src/allegro.lua
test/etags/objc-src/PackInsp.h
test/etags/objc-src/PackInsp.m
test/etags/objc-src/Subprocess.h
test/etags/objc-src/Subprocess.m
test/etags/objcpp-src/SimpleCalc.H
test/etags/objcpp-src/SimpleCalc.M
test/etags/pas-src/common.pas
test/etags/perl-src/htlmify-cystic
test/etags/perl-src/kai-test.pl
test/etags/perl-src/yagrip.pl
test/etags/php-src/lce_functions.php
test/etags/php-src/ptest.php
test/etags/php-src/sendmail.php
test/etags/prol-src/natded.prolog
test/etags/prol-src/ordsets.prolog
test/etags/ps-src/rfc1245.ps
test/etags/pyt-src/server.py
test/etags/tex-src/gzip.texi
test/etags/tex-src/nonewline.tex
test/etags/tex-src/testenv.tex
test/etags/tex-src/texinfo.tex
test/etags/y-src/atest.y
test/etags/y-src/cccp.c
test/etags/y-src/cccp.y
test/etags/y-src/parse.c
test/etags/y-src/parse.y
test/indent/css-mode.css
test/indent/js-indent-init-dynamic.js
test/indent/js-indent-init-t.js
test/indent/js-jsx.js
test/indent/js.js
test/indent/latex-mode.tex
test/indent/modula2.mod
test/indent/nxml.xml
test/indent/octave.m
test/indent/pascal.pas
test/indent/perl.perl
test/indent/prolog.prolog
test/indent/ps-mode.ps
test/indent/ruby.rb
test/indent/scheme.scm
test/indent/scss-mode.scss
test/indent/sgml-mode-attribute.html
test/indent/shell.rc
test/indent/shell.sh
test/redisplay-testsuite.el
test/rmailmm.el
test/automated/buffer-tests.el
test/automated/cmds-tests.el
test/automated/data-tests.el
test/automated/finalizer-tests.el
test/automated/fns-tests.el
test/automated/inotify-test.el
test/automated/keymap-tests.el
test/automated/print-tests.el
test/automated/libxml-tests.el
test/automated/zlib-tests.el: Files Moved.
Diffstat (limited to 'test/src/data-tests.el')
| -rw-r--r-- | test/src/data-tests.el | 257 |
1 files changed, 257 insertions, 0 deletions
diff --git a/test/src/data-tests.el b/test/src/data-tests.el new file mode 100644 index 00000000000..252a1410206 --- /dev/null +++ b/test/src/data-tests.el | |||
| @@ -0,0 +1,257 @@ | |||
| 1 | ;;; data-tests.el --- tests for src/data.c | ||
| 2 | |||
| 3 | ;; Copyright (C) 2013-2015 Free Software Foundation, Inc. | ||
| 4 | |||
| 5 | ;; This file is part of GNU Emacs. | ||
| 6 | |||
| 7 | ;; This program is free software: you can redistribute it and/or | ||
| 8 | ;; modify it under the terms of the GNU General Public License as | ||
| 9 | ;; published by the Free Software Foundation, either version 3 of the | ||
| 10 | ;; License, or (at your option) any later version. | ||
| 11 | ;; | ||
| 12 | ;; This program is distributed in the hope that it will be useful, but | ||
| 13 | ;; WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| 15 | ;; General Public License for more details. | ||
| 16 | ;; | ||
| 17 | ;; You should have received a copy of the GNU General Public License | ||
| 18 | ;; along with this program. If not, see `http://www.gnu.org/licenses/'. | ||
| 19 | |||
| 20 | ;;; Commentary: | ||
| 21 | |||
| 22 | ;;; Code: | ||
| 23 | |||
| 24 | (require 'cl-lib) | ||
| 25 | (eval-when-compile (require 'cl)) | ||
| 26 | |||
| 27 | (ert-deftest data-tests-= () | ||
| 28 | (should-error (=)) | ||
| 29 | (should (= 1)) | ||
| 30 | (should (= 2 2)) | ||
| 31 | (should (= 9 9 9 9 9 9 9 9 9)) | ||
| 32 | (should-not (apply #'= '(3 8 3))) | ||
| 33 | (should-error (= 9 9 'foo)) | ||
| 34 | ;; Short circuits before getting to bad arg | ||
| 35 | (should-not (= 9 8 'foo))) | ||
| 36 | |||
| 37 | (ert-deftest data-tests-< () | ||
| 38 | (should-error (<)) | ||
| 39 | (should (< 1)) | ||
| 40 | (should (< 2 3)) | ||
| 41 | (should (< -6 -1 0 2 3 4 8 9 999)) | ||
| 42 | (should-not (apply #'< '(3 8 3))) | ||
| 43 | (should-error (< 9 10 'foo)) | ||
| 44 | ;; Short circuits before getting to bad arg | ||
| 45 | (should-not (< 9 8 'foo))) | ||
| 46 | |||
| 47 | (ert-deftest data-tests-> () | ||
| 48 | (should-error (>)) | ||
| 49 | (should (> 1)) | ||
| 50 | (should (> 3 2)) | ||
| 51 | (should (> 6 1 0 -2 -3 -4 -8 -9 -999)) | ||
| 52 | (should-not (apply #'> '(3 8 3))) | ||
| 53 | (should-error (> 9 8 'foo)) | ||
| 54 | ;; Short circuits before getting to bad arg | ||
| 55 | (should-not (> 8 9 'foo))) | ||
| 56 | |||
| 57 | (ert-deftest data-tests-<= () | ||
| 58 | (should-error (<=)) | ||
| 59 | (should (<= 1)) | ||
| 60 | (should (<= 2 3)) | ||
| 61 | (should (<= -6 -1 -1 0 0 0 2 3 4 8 999)) | ||
| 62 | (should-not (apply #'<= '(3 8 3 3))) | ||
| 63 | (should-error (<= 9 10 'foo)) | ||
| 64 | ;; Short circuits before getting to bad arg | ||
| 65 | (should-not (<= 9 8 'foo))) | ||
| 66 | |||
| 67 | (ert-deftest data-tests->= () | ||
| 68 | (should-error (>=)) | ||
| 69 | (should (>= 1)) | ||
| 70 | (should (>= 3 2)) | ||
| 71 | (should (>= 666 1 0 0 -2 -3 -3 -3 -4 -8 -8 -9 -999)) | ||
| 72 | (should-not (apply #'>= '(3 8 3))) | ||
| 73 | (should-error (>= 9 8 'foo)) | ||
| 74 | ;; Short circuits before getting to bad arg | ||
| 75 | (should-not (>= 8 9 'foo))) | ||
| 76 | |||
| 77 | ;; Bool vector tests. Compactly represent bool vectors as hex | ||
| 78 | ;; strings. | ||
| 79 | |||
| 80 | (ert-deftest bool-vector-count-population-all-0-nil () | ||
| 81 | (cl-loop for sz in '(0 45 1 64 9 344) | ||
| 82 | do (let* ((bv (make-bool-vector sz nil))) | ||
| 83 | (should | ||
| 84 | (zerop | ||
| 85 | (bool-vector-count-population bv)))))) | ||
| 86 | |||
| 87 | (ert-deftest bool-vector-count-population-all-1-t () | ||
| 88 | (cl-loop for sz in '(0 45 1 64 9 344) | ||
| 89 | do (let* ((bv (make-bool-vector sz t))) | ||
| 90 | (should | ||
| 91 | (eql | ||
| 92 | (bool-vector-count-population bv) | ||
| 93 | sz))))) | ||
| 94 | |||
| 95 | (ert-deftest bool-vector-count-population-1-nil () | ||
| 96 | (let* ((bv (make-bool-vector 45 nil))) | ||
| 97 | (aset bv 40 t) | ||
| 98 | (aset bv 0 t) | ||
| 99 | (should | ||
| 100 | (eql | ||
| 101 | (bool-vector-count-population bv) | ||
| 102 | 2)))) | ||
| 103 | |||
| 104 | (ert-deftest bool-vector-count-population-1-t () | ||
| 105 | (let* ((bv (make-bool-vector 45 t))) | ||
| 106 | (aset bv 40 nil) | ||
| 107 | (aset bv 0 nil) | ||
| 108 | (should | ||
| 109 | (eql | ||
| 110 | (bool-vector-count-population bv) | ||
| 111 | 43)))) | ||
| 112 | |||
| 113 | (defun mock-bool-vector-count-consecutive (a b i) | ||
| 114 | (loop for i from i below (length a) | ||
| 115 | while (eq (aref a i) b) | ||
| 116 | sum 1)) | ||
| 117 | |||
| 118 | (defun test-bool-vector-bv-from-hex-string (desc) | ||
| 119 | (let (bv nchars nibbles) | ||
| 120 | (dolist (c (string-to-list desc)) | ||
| 121 | (push (string-to-number | ||
| 122 | (char-to-string c) | ||
| 123 | 16) | ||
| 124 | nibbles)) | ||
| 125 | (setf bv (make-bool-vector (* 4 (length nibbles)) nil)) | ||
| 126 | (let ((i 0)) | ||
| 127 | (dolist (n (nreverse nibbles)) | ||
| 128 | (dotimes (_ 4) | ||
| 129 | (aset bv i (> (logand 1 n) 0)) | ||
| 130 | (incf i) | ||
| 131 | (setf n (lsh n -1))))) | ||
| 132 | bv)) | ||
| 133 | |||
| 134 | (defun test-bool-vector-to-hex-string (bv) | ||
| 135 | (let (nibbles (v (cl-coerce bv 'list))) | ||
| 136 | (while v | ||
| 137 | (push (logior | ||
| 138 | (lsh (if (nth 0 v) 1 0) 0) | ||
| 139 | (lsh (if (nth 1 v) 1 0) 1) | ||
| 140 | (lsh (if (nth 2 v) 1 0) 2) | ||
| 141 | (lsh (if (nth 3 v) 1 0) 3)) | ||
| 142 | nibbles) | ||
| 143 | (setf v (nthcdr 4 v))) | ||
| 144 | (mapconcat (lambda (n) (format "%X" n)) | ||
| 145 | (nreverse nibbles) | ||
| 146 | ""))) | ||
| 147 | |||
| 148 | (defun test-bool-vector-count-consecutive-tc (desc) | ||
| 149 | "Run a test case for bool-vector-count-consecutive. | ||
| 150 | DESC is a string describing the test. It is a sequence of | ||
| 151 | hexadecimal digits describing the bool vector. We exhaustively | ||
| 152 | test all counts at all possible positions in the vector by | ||
| 153 | comparing the subr with a much slower lisp implementation." | ||
| 154 | (let ((bv (test-bool-vector-bv-from-hex-string desc))) | ||
| 155 | (loop | ||
| 156 | for lf in '(nil t) | ||
| 157 | do (loop | ||
| 158 | for pos from 0 upto (length bv) | ||
| 159 | for cnt = (mock-bool-vector-count-consecutive bv lf pos) | ||
| 160 | for rcnt = (bool-vector-count-consecutive bv lf pos) | ||
| 161 | unless (eql cnt rcnt) | ||
| 162 | do (error "FAILED testcase %S %3S %3S %3S" | ||
| 163 | pos lf cnt rcnt))))) | ||
| 164 | |||
| 165 | (defconst bool-vector-test-vectors | ||
| 166 | '("" | ||
| 167 | "0" | ||
| 168 | "F" | ||
| 169 | "0F" | ||
| 170 | "F0" | ||
| 171 | "00000000000000000000000000000FFFFF0000000" | ||
| 172 | "44a50234053fba3340000023444a50234053fba33400000234" | ||
| 173 | "12341234123456123412346001234123412345612341234600" | ||
| 174 | "44a50234053fba33400000234" | ||
| 175 | "1234123412345612341234600" | ||
| 176 | "44a50234053fba33400000234" | ||
| 177 | "1234123412345612341234600" | ||
| 178 | "44a502340" | ||
| 179 | "123412341" | ||
| 180 | "0000000000000000000000000" | ||
| 181 | "FFFFFFFFFFFFFFFF1")) | ||
| 182 | |||
| 183 | (ert-deftest bool-vector-count-consecutive () | ||
| 184 | (mapc #'test-bool-vector-count-consecutive-tc | ||
| 185 | bool-vector-test-vectors)) | ||
| 186 | |||
| 187 | (defun test-bool-vector-apply-mock-op (mock a b c) | ||
| 188 | "Compute (slowly) the correct result of a bool-vector set operation." | ||
| 189 | (let (changed nv) | ||
| 190 | (assert (eql (length b) (length c))) | ||
| 191 | (if a (setf nv a) | ||
| 192 | (setf a (make-bool-vector (length b) nil)) | ||
| 193 | (setf changed t)) | ||
| 194 | |||
| 195 | (loop for i below (length b) | ||
| 196 | for mockr = (funcall mock | ||
| 197 | (if (aref b i) 1 0) | ||
| 198 | (if (aref c i) 1 0)) | ||
| 199 | for r = (not (= 0 mockr)) | ||
| 200 | do (progn | ||
| 201 | (unless (eq (aref a i) r) | ||
| 202 | (setf changed t)) | ||
| 203 | (setf (aref a i) r))) | ||
| 204 | (if changed a))) | ||
| 205 | |||
| 206 | (defun test-bool-vector-binop (mock real) | ||
| 207 | "Test a binary set operation." | ||
| 208 | (loop for s1 in bool-vector-test-vectors | ||
| 209 | for bv1 = (test-bool-vector-bv-from-hex-string s1) | ||
| 210 | for vecs2 = (cl-remove-if-not | ||
| 211 | (lambda (x) (eql (length x) (length s1))) | ||
| 212 | bool-vector-test-vectors) | ||
| 213 | do (loop for s2 in vecs2 | ||
| 214 | for bv2 = (test-bool-vector-bv-from-hex-string s2) | ||
| 215 | for mock-result = (test-bool-vector-apply-mock-op | ||
| 216 | mock nil bv1 bv2) | ||
| 217 | for real-result = (funcall real bv1 bv2) | ||
| 218 | do (progn | ||
| 219 | (should (equal mock-result real-result)))))) | ||
| 220 | |||
| 221 | (ert-deftest bool-vector-intersection-op () | ||
| 222 | (test-bool-vector-binop | ||
| 223 | #'logand | ||
| 224 | #'bool-vector-intersection)) | ||
| 225 | |||
| 226 | (ert-deftest bool-vector-union-op () | ||
| 227 | (test-bool-vector-binop | ||
| 228 | #'logior | ||
| 229 | #'bool-vector-union)) | ||
| 230 | |||
| 231 | (ert-deftest bool-vector-xor-op () | ||
| 232 | (test-bool-vector-binop | ||
| 233 | #'logxor | ||
| 234 | #'bool-vector-exclusive-or)) | ||
| 235 | |||
| 236 | (ert-deftest bool-vector-set-difference-op () | ||
| 237 | (test-bool-vector-binop | ||
| 238 | (lambda (a b) (logand a (lognot b))) | ||
| 239 | #'bool-vector-set-difference)) | ||
| 240 | |||
| 241 | (ert-deftest bool-vector-change-detection () | ||
| 242 | (let* ((vc1 (test-bool-vector-bv-from-hex-string "abcdef")) | ||
| 243 | (vc2 (test-bool-vector-bv-from-hex-string "012345")) | ||
| 244 | (vc3 (make-bool-vector (length vc1) nil)) | ||
| 245 | (c1 (bool-vector-union vc1 vc2 vc3)) | ||
| 246 | (c2 (bool-vector-union vc1 vc2 vc3))) | ||
| 247 | (should (equal c1 (test-bool-vector-apply-mock-op | ||
| 248 | #'logior | ||
| 249 | nil | ||
| 250 | vc1 vc2))) | ||
| 251 | (should (not c2)))) | ||
| 252 | |||
| 253 | (ert-deftest bool-vector-not () | ||
| 254 | (let* ((v1 (test-bool-vector-bv-from-hex-string "FFFF3")) | ||
| 255 | (v2 (test-bool-vector-bv-from-hex-string "0000C")) | ||
| 256 | (v3 (bool-vector-not v1))) | ||
| 257 | (should (equal v2 v3)))) | ||