2 (sb-ext:quit :unix-status 104)
4 (let ((p "eucjp-test.data")
5 (eucjp "eucjp-test-eucjp.data")
6 (utf8 "eucjp-test-utf8.data"))
9 (with-open-file (in "eucjp-test.lisp-expr" :direction :input)
10 (with-open-file (out-eucjp eucjp :direction :output
11 :element-type '(unsigned-byte 8)
12 :if-exists :supersede)
13 (with-open-file (out-utf8 utf8 :direction :output
14 :external-format :utf-8
15 :if-exists :supersede)
16 (do ((euc (read in nil) (read in nil))
17 (ucs (read in nil) (read in nil))
19 ((or (null euc) (null ucs)))
20 ;; write EUC-JP data as binary
21 (let ((out out-eucjp))
22 (when (>= euc #x10000)
23 (write-byte (ldb (byte 8 16) euc) out))
25 (write-byte (ldb (byte 8 8) euc) out))
26 (write-byte (ldb (byte 8 0) euc) out)
27 (when (= (mod i 32) 31)
28 (write-byte #x0a out)))
29 ;; trust UTF-8 external format
31 (write-char (code-char ucs) out)
32 (when (= (mod i 32) 31)
33 (write-char (code-char #x0a) out)))))))
35 ;; check if input works
36 (with-open-file (in1 eucjp :direction :input
37 :external-format :euc-jp)
38 (with-open-file (in2 utf8 :direction :input
39 :external-format :utf-8)
40 (do ((c1 (read-char in1 nil) (read-char in1 nil))
41 (c2 (read-char in2 nil) (read-char in2 nil)))
42 ((and (null c1) (null c2)))
43 (assert (eql c1 c2)))))
45 ;; check if output works
46 (with-open-file (in utf8 :direction :input
47 :external-format :utf-8)
48 (with-open-file (out p :direction :output
49 :external-format :euc-jp
50 :if-exists :supersede)
51 (do ((c (read-char in nil) (read-char in nil)))
54 (with-open-file (in1 eucjp :direction :input
55 :element-type '(unsigned-byte 8))
56 (with-open-file (in2 p :direction :input
57 :element-type '(unsigned-byte 8))
58 (do ((b1 (read-byte in1 nil) (read-byte in1 nil))
59 (b2 (read-byte in2 nil) (read-byte in2 nil)))
60 ((and (null b1) (null b2)))
61 (assert (eql b1 b2)))))
66 ;; check if string conversion works
67 (with-open-file (in "eucjp-test.lisp-expr" :direction :input)
68 (do ((euc (read in nil) (read in nil))
69 (ucs (read in nil) (read in nil))
71 ((or (null euc) (null ucs)))
72 (let ((o (coerce (cond ((>= euc #x10000)
73 (list (ldb (byte 8 16) euc)
75 (ldb (byte 8 0) euc)))
77 (list (ldb (byte 8 8) euc)
78 (ldb (byte 8 0) euc)))
80 '(vector (unsigned-byte 8))))
81 (s (string (code-char ucs))))
82 (assert (equal (octets-to-string o :external-format :euc-jp) s))
83 (assert (equal (coerce (string-to-octets s :external-format :euc-jp)