source: project/release/4/base64/trunk/tests/run.scm @ 21181

Last change on this file since 21181 was 21181, checked in by felix winkelmann, 10 years ago

base64: support for static linking, added missing deps to test

  • Property svn:mergeinfo set to (toggle deleted branches)
    /base64/trunk/base64-test.scm2-7524
    /release/3/base64/trunk/base64-test.scm7525-12345
File size: 6.5 KB
Line 
1(use test)
2(use base64 data-structures extras)
3
4(define lorem-ipsum "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.")
5(define lorem-ipsum-base64
6  '("TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2ljaW5nIGVsaXQs"
7    "IHNlZCBkbyBlaXVzbW9kIHRlbXBvciBpbmNpZGlkdW50IHV0IGxhYm9yZSBldCBkb2xvcmUgbWFn"
8    "bmEgYWxpcXVhLiBVdCBlbmltIGFkIG1pbmltIHZlbmlhbSwgcXVpcyBub3N0cnVkIGV4ZXJjaXRh"
9    "dGlvbiB1bGxhbWNvIGxhYm9yaXMgbmlzaSB1dCBhbGlxdWlwIGV4IGVhIGNvbW1vZG8gY29uc2Vx"
10    "dWF0LiBEdWlzIGF1dGUgaXJ1cmUgZG9sb3IgaW4gcmVwcmVoZW5kZXJpdCBpbiB2b2x1cHRhdGUg"
11    "dmVsaXQgZXNzZSBjaWxsdW0gZG9sb3JlIGV1IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gRXhjZXB0"
12    "ZXVyIHNpbnQgb2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBx"
13    "dWkgb2ZmaWNpYSBkZXNlcnVudCBtb2xsaXQgYW5pbSBpZCBlc3QgbGFib3J1bS4="
14    ""))   ; trailing empty for intersperse
15
16(test-group
17 "encoding"
18 (test "encode string of length 0"
19       ""
20       (base64-encode ""))
21 (test "encode string of length 1"
22       "YQ=="
23       (base64-encode "a"))
24 (test "encode string of length 2"
25       "YWI="
26       (base64-encode "ab"))
27 (test "encode string of length 3"
28       "YWJj"
29       (base64-encode "abc"))
30 (test "encode string of length 5*3"
31       "YWJjZGVmZ2hpamtsbW5v"
32       (base64-encode "abcdefghijklmno"))
33 (test "encode string of length 5*3+1"
34       "YWJjZGVmZ2hpamtsbW5vcA=="
35       (base64-encode "abcdefghijklmnop"))
36 (test "encode string of length 5*3+2"
37       "YWJjZGVmZ2hpamtsbW5vcHE="
38       (base64-encode "abcdefghijklmnopq"))
39 (test "encode string of length 6*3"
40       "YWJjZGVmZ2hpamtsbW5vcHFy"
41       (base64-encode "abcdefghijklmnopqr"))
42 (test "encode binary string"
43       "3q2+78r+sAs="
44       (base64-encode "\xde\xad\xbe\xef\xca\xfe\xb0\x0b"))
45 (test "lorem ipsum"
46       (apply string-append lorem-ipsum-base64)
47       (base64-encode lorem-ipsum))
48 (let ((s (make-string (+ 10 (* 57 60)) #\Q)))  ; past one input buffer
49   (test "port > 1 buffer length -> port"
50         (base64-encode s)
51         (get-output-string (base64-encode (open-input-string s)
52                                           (open-output-string))))
53   (test "port > 1 buffer length -> string"
54         (base64-encode s)
55         (base64-encode (open-input-string s)))))
56
57(test-group
58 "encoding linebreaks"
59 (parameterize ((base64-line-breaks #t))
60   (test "encode empty string"
61         ""
62         (base64-encode ""))
63   (test "encode 9 chars"
64         "YWFhYWFhYWFh\r\n"
65         (base64-encode (make-string 9 #\a)))
66   (test "encode 55 chars"
67         "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ==\r\n"
68         (base64-encode (make-string 55 #\a))) 
69   (test "encode 56 chars"
70         "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE=\r\n"
71         (base64-encode (make-string 56 #\a)))
72   (test "encode 57 chars"
73         "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh\r\n"
74         (base64-encode (make-string 57 #\a)))
75   (test "encode 58 chars"
76         "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh\r\nYQ==\r\n"
77         (base64-encode (make-string 58 #\a)))
78   (test "encode 57*2 chars"
79         (string-append "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh"
80                        "\r\n"
81                        "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh"
82                        "\r\n")
83         (base64-encode (make-string (* 57 2) #\a)))
84   (test "encode 57*2+1 chars"
85         (string-append "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh"
86                        "\r\n"
87                        "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh"
88                        "\r\n"
89                        "YQ=="
90                        "\r\n")
91         (base64-encode (make-string (+ 1 (* 57 2)) #\a)))
92   (let ((lorem-ipsum-encoded (string-intersperse lorem-ipsum-base64 "\r\n")))
93     (test "lorem ipsum"
94           lorem-ipsum-encoded
95           (base64-encode lorem-ipsum))
96     (test "lorem ipsum string -> port"
97           lorem-ipsum-encoded
98           (get-output-string (base64-encode lorem-ipsum (open-output-string))))
99     (test "lorem ipsum port -> string"
100           lorem-ipsum-encoded
101           (base64-encode (open-input-string lorem-ipsum)))
102     (test "lorem ipsum port -> port"
103           lorem-ipsum-encoded
104           (get-output-string (base64-encode (open-input-string lorem-ipsum)
105                                             (open-output-string)))))
106   ))
107
108;; to avoid measuring time in test (doesn't really matter)
109(define large-string (make-string 10000001 #\a))
110(define large-encoded-string (base64-encode large-string))
111(define large-invalid-string (make-string 10000001 #\%))
112
113(test-group
114 "decoding"
115 (test "decode empty string -> empty"
116       ""
117       (base64-decode ""))
118 (test "decode string Y -> empty"
119       ""
120       (base64-decode "Y"))
121 (test "decode string YW -> a"
122       "a"
123       (base64-decode "YW"))
124 (test "decode string YW= -> a"
125       "a"
126       (base64-decode "YW="))
127 (test "decode string YW== -> a"
128       "a"
129       (base64-decode "YW==")) 
130 (test "decode string YWJ => ab"
131       "ab"
132       (base64-decode "YWJ"))
133 (test "decode string YWJ= -> ab"
134       "ab"
135       (base64-decode "YWJ="))
136 (test "decode string YWJj -> abc"
137       "abc"
138       (base64-decode "YWJj"))
139 (test "decode string YW%J^jZ -> abc"
140       "abc"
141       (base64-decode "YW%J^jZ"))
142 (test "decode skips invalid chars"
143       "abcdefghijklmnop"
144       (base64-decode "YWJjZG(VmZ#2hp@amtsb%&W5v**cA======"))
145 (test "decode binary string"
146       "\xde\xad\xbe\xef\xca\xfe\xb0\x0b"
147       (base64-decode "3q2+78r+sAs="))
148 (test "decode large string"
149       large-string
150       (base64-decode large-encoded-string))
151 (test "decode large string of invalid chars"
152       ""
153       (base64-decode large-invalid-string))
154 (test "decode lorem ipsum with linebreaks"
155       lorem-ipsum
156       (base64-decode (string-intersperse lorem-ipsum-base64 "\r\n"))))
157
158;; Not on a 64-bit machine! :)
159;; (test-error "encode string of length 16,000,000 signals an error"
160;;             (base64-encode (make-string 16000000)))
Note: See TracBrowser for help on using the repository browser.