annotate tests/automated/base64-tests.el @ 5602:c9e5612f5424

Support the MP library on recent FreeBSD, have it pass relevant tests. src/ChangeLog addition: 2011-11-26 Aidan Kehoe <kehoea@parhasard.net> * number-mp.c (bignum_to_string): Don't overwrite the accumulator we've just set up for this function. * number-mp.c (BIGNUM_TO_TYPE): mp_itom() doesn't necessarily do what this code used to think with negative numbers, it can treat them as unsigned ints. Subtract numbers from bignum_zero instead of multiplying them by -1 to convert them to their negative equivalents. * number-mp.c (bignum_to_int): * number-mp.c (bignum_to_uint): * number-mp.c (bignum_to_long): * number-mp.c (bignum_to_ulong): * number-mp.c (bignum_to_double): Use the changed BIGNUM_TO_TYPE() in these functions. * number-mp.c (bignum_ceil): * number-mp.c (bignum_floor): In these functions, be more careful about rounding to positive and negative infinity, respectively. Don't use the sign of QUOTIENT when working out out whether to add or subtract one, rather use the sign QUOTIENT would have if arbitrary-precision division were done. * number-mp.h: * number-mp.h (MP_GCD): Wrap #include <mp.h> in BEGIN_C_DECLS/END_C_DECLS. * number.c (Fbigfloat_get_precision): * number.c (Fbigfloat_set_precision): Don't attempt to call XBIGFLOAT_GET_PREC if this build doesn't support big floats.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 26 Nov 2011 17:59:14 +0000
parents 308d34e9f07d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
1 ;; Copyright (C) 1999 Free Software Foundation, Inc.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
3 ;; Author: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
4 ;; Maintainer: Hrvoje Niksic <hniksic@srce.hr>
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
5 ;; Created: 1999
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
6 ;; Keywords: tests
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
8 ;; This file is part of XEmacs.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
9
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
10 ;; XEmacs is free software: you can redistribute it and/or modify it
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
11 ;; under the terms of the GNU General Public License as published by the
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
12 ;; Free Software Foundation, either version 3 of the License, or (at your
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
13 ;; option) any later version.
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
14
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
15 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
16 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
17 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
18 ;; for more details.
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
19
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
20 ;; You should have received a copy of the GNU General Public License
5402
308d34e9f07d Changed bulk of GPLv2 or later files identified by script
Mats Lidell <matsl@xemacs.org>
parents: 5136
diff changeset
21 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
22
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
23 ;;; Synched up with: Not in FSF.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
24
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
25 ;;; Commentary:
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
26
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
27 ;; Test base64 functions.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
28 ;; See test-harness.el for instructions on how to run these tests.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
29
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
30 (eval-when-compile
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
31 (condition-case nil
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
32 (require 'test-harness)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
33 (file-error
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
34 (push "." load-path)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
35 (when (and (boundp 'load-file-name) (stringp load-file-name))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
36 (push (file-name-directory load-file-name) load-path))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
37 (require 'test-harness))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
38
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
39 ;; We need to test the buffer and string functions. We do it by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
40 ;; testing them in various circumstances, asserting the same result,
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
41 ;; and returning that result.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
42
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
43 (defvar bt-test-buffer (get-buffer-create " *base64-workhorse*"))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
44
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
45 (defun bt-base64-encode-string (string &optional no-line-break)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
46 (let ((string-result (base64-encode-string string no-line-break))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
47 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
48 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
49 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
50 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
51 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
52 (setq length (base64-encode-region (point-min) (point-max) no-line-break))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
53 (Assert (eq length (- (point-max) (point-min))))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
54 (Assert (equal (buffer-string) string-result))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
55 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
56 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
57 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
58 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
59 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
60 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
61 (insert "...more random junk.q,f3/.qrm314.r,m2typ' 2436T@W$^@$#^T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
62 (setq length (base64-encode-region p1 p2 no-line-break))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
63 (Assert (eq length (- p2 p1)))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
64 (Assert (equal (buffer-substring p1 p2) string-result))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
65 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
66
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
67 (defun bt-base64-decode-string (string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
68 (let ((string-result (base64-decode-string string))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
69 length)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
70 (with-current-buffer bt-test-buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
71 ;; the whole buffer
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
72 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
73 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
74 (setq length (base64-decode-region (point-min) (point-max)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
75 (cond (string-result
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
76 (Assert (eq length (- (point-max) (point-min))))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
77 (Assert (equal (buffer-string) string-result)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
78 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
79 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
80 ;; The buffer should not have been modified.
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
81 (Assert (equal (buffer-string) string))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
82 ;; partial
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
83 (erase-buffer)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
84 (insert "random junk........\0\0';'eqwrkw[erpqf")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
85 (let ((p1 (point)) p2)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
86 (insert string)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
87 (setq p2 (point-marker))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
88 (insert "...more random junk.q,f3/.qrm314.\0\0r,m2typ' 2436T@W$^@$#T@")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
89 (setq length (base64-decode-region p1 p2))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
90 (cond (string-result
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
91 (Assert (eq length (- p2 p1)))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
92 (Assert (equal (buffer-substring p1 p2) string-result)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
93 (t
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
94 (Assert (null length))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
95 ;; The buffer should not have been modified.
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
96 (Assert (equal (buffer-substring p1 p2) string))))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
97 string-result))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
98
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
99 (defun bt-remove-newlines (str)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
100 (apply #'string (delete ?\n (mapcar #'identity str))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
101
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
102 (defconst bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
103 (let ((str (make-string 256 ?\0)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
104 (dotimes (i 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
105 (aset str i (int-char i)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
106 str))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
107
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
108 (defconst bt-test-strings
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
109 `(("" "")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
110 ("foo" "Zm9v")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
111 ("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
112 "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
113 MjM0NTY3ODk=")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
114 (,bt-allchars
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
115 "AAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
116 Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWpr
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
117 bG1ub3BxcnN0dXZ3eHl6e3x9fn+AgYKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6Ch
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
118 oqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uru8vb6/wMHCw8TFxsfIycrLzM3Oz9DR0tPU1dbX
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
119 2Nna29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+/w==")
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
120 ))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
121
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
122 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
123 ;; Encoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
124 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
125
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
126 (loop for (raw encoded) in bt-test-strings do
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
127 (Assert (equal (bt-base64-encode-string raw) encoded))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
128 ;; test the NO-LINE-BREAK flag
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
129 (Assert (equal (bt-base64-encode-string raw t) (bt-remove-newlines encoded))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
130
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
131 ;; When Mule is around, Lisp programmers should make sure that the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
132 ;; buffer contains only characters whose `char-int' is in the [0, 256)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
133 ;; range. If this condition is not satisfied for any character, an
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
134 ;; error is signaled.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
135 (when (featurep 'mule)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
136 ;; #### remove subtraction of 128 -- no longer needed with make-char
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
137 ;; patch!
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
138 (let* ((mule-string (format "Hrvoje Nik%ci%c"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
139 ;; scaron == 185 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
140 (make-char 'latin-iso8859-2 (- 185 128))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
141 ;; cacute == 230 in Latin 2
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
142 (make-char 'latin-iso8859-2 (- 230 128)))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
143 (Check-Error-Message error "Non-ascii character in base64 input"
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
144 (bt-base64-encode-string mule-string))))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
145
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
146 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
147 ;; Decoding base64
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
148 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
149
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
150 (loop for (raw encoded) in bt-test-strings do
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
151 (Assert (equal (bt-base64-decode-string encoded) raw))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
152 (Assert (equal (bt-base64-decode-string (bt-remove-newlines encoded)) raw)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
153
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
154 ;; Test errors
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
155 (dolist (str `("foo" "AAC" "foo\0bar" "====" "Zm=9v" ,bt-allchars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
156 (Check-Error error (base64-decode-string str)))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
157
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
158 ;; base64-decode-string should ignore non-base64 characters anywhere
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
159 ;; in the string. We test this in the cheesiest manner possible, by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
160 ;; inserting non-base64 chars at the beginning, at the end, and in the
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
161 ;; middle of the string.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
162
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
163 (defconst bt-base64-chars '(?A ?B ?C ?D ?E ?F ?G ?H ?I ?J
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
164 ;; sometimes I hate Emacs indentation.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
165 ?K ?L ?M ?N ?O ?P ?Q ?R ?S ?T
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
166 ?U ?V ?W ?X ?Y ?Z ?a ?b ?c ?d
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
167 ?e ?f ?g ?h ?i ?j ?k ?l ?m ?n
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
168 ?o ?p ?q ?r ?s ?t ?u ?v ?w ?x
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
169 ?y ?z ?0 ?1 ?2 ?3 ?4 ?5 ?6 ?7
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
170 ?8 ?9 ?+ ?/ ?=))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
171
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
172 (defconst bt-nonbase64-chars (set-difference (mapcar #'identity bt-allchars)
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
173 bt-base64-chars))
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
174
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
175 (loop for (raw encoded) in bt-test-strings do
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
176 (unless (equal raw "")
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
177 (let* ((middlepos (/ (1+ (length encoded)) 2))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
178 (left (substring encoded 0 middlepos))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
179 (right (substring encoded middlepos)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
180 ;; Whitespace at the beginning, end, and middle.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
181 (let ((mangled (concat bt-nonbase64-chars left bt-nonbase64-chars right
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
182 bt-nonbase64-chars)))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
183 (Assert (equal (bt-base64-decode-string mangled) raw)))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
184
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
185 ;; Whitespace between every char.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
186 (let ((mangled (concat bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
187 ;; ENCODED with bt-nonbase64-chars
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
188 ;; between every character.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
189 (mapconcat #'char-to-string encoded
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
190 (apply #'string bt-nonbase64-chars))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 434
diff changeset
191 bt-nonbase64-chars)))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
192 (Assert (equal (bt-base64-decode-string mangled) raw))))))
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
193
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
194 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
195 ;; Mixed...
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
196 ;;-----------------------------------------------------
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
197
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
198 ;; The whole point of base64 is to ensure that an arbitrary sequence
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
199 ;; of bytes passes through gateway hellfire unscathed, protected by
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
200 ;; the asbestos suit of base64. Here we test that
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
201 ;; (base64-decode-string (base64-decode-string FOO)) equals FOO for
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
202 ;; any FOO we can think of. The following stunts stress-test
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
203 ;; practically all aspects of the encoding and decoding process.
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
204
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
205 (loop for (raw ignored) in bt-test-strings do
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
206 (Assert (equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
207 (bt-base64-encode-string raw))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
208 raw))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
209 (Assert (equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
210 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
211 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
212 (bt-base64-encode-string raw))))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
213 raw))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
214 (Assert (equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
215 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
216 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
217 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
218 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
219 (bt-base64-encode-string raw))))))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
220 raw))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
221 (Assert (equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
222 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
223 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
224 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
225 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
226 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
227 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
228 (bt-base64-encode-string raw))))))))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
229 raw))
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
230 (Assert (equal (bt-base64-decode-string
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
231 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
232 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
233 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
234 (bt-base64-decode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
235 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
236 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
237 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
238 (bt-base64-encode-string
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents:
diff changeset
239 (bt-base64-encode-string raw))))))))))
5136
0f66906b6e37 Undo Assert-equal, Assert=, etc.; make `Assert' handle this automatically
Ben Wing <ben@xemacs.org>
parents: 4855
diff changeset
240 raw)))