X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-md5%2Fmd5-tests.lisp;h=210d30deb24a516e1600c191404c7fed57a99eac;hb=d3392df09363005b7e8c19c8e07136fd2c13c1b5;hp=c0f8da146e66d96332643a3d227d3d75f6897590;hpb=4898ef32c639b1c7f4ee13a5ba566ce6debd03e6;p=sbcl.git diff --git a/contrib/sb-md5/md5-tests.lisp b/contrib/sb-md5/md5-tests.lisp index c0f8da1..210d30d 100644 --- a/contrib/sb-md5/md5-tests.lisp +++ b/contrib/sb-md5/md5-tests.lisp @@ -2,18 +2,45 @@ (:use #:sb-md5 #:cl #:sb-rt)) (in-package #:sb-md5-tests) +(defun byte-array-to-hex-string (bytevec) + (format nil "~(~{~2,'0X~}~)" (coerce bytevec 'list))) + +(defun one-shot-test (string) + (md5sum-string string :external-format :ascii)) + +(defun incremental-test (string) + (let ((bytevec (sb-ext:string-to-octets string :external-format :ascii)) + (state (sb-md5:make-md5-state))) + (dotimes (i (length bytevec) (sb-md5:finalize-md5-state state)) + (sb-md5:update-md5-state state bytevec :start i :end (1+ i))))) + +(defun fill-pointer-test (string) + (let* ((bytevec (sb-ext:string-to-octets string :external-format :ascii)) + (fillvec (let ((x (make-array (* 2 (length bytevec)) + :fill-pointer 0 + :element-type '(unsigned-byte 8)))) + (dotimes (i (length bytevec) x) + (vector-push (aref bytevec i) x))))) + (sb-md5:md5sum-sequence fillvec))) + +(eval-when (:compile-toplevel :load-toplevel :execute) +(defun tests-for-test-suite (basename index string expected-result) + (loop for (test-kind testfun) in '(("ONE-SHOT" one-shot-test) + ("INCREMENTAL" incremental-test) + ("FILL-POINTER" fill-pointer-test)) + collect `(deftest ,(intern (format nil "~A.~A.~A" basename test-kind index)) + (string= (byte-array-to-hex-string (funcall ',testfun ,string)) + ,expected-result) + t) into test-forms + finally (return `(progn ,@test-forms)))) +) ; EVAL-WHEN + (macrolet ((define-rfc1321-tests (test-list) `(progn ,@(loop for i upfrom 0 for (string . expected-result) in test-list - collect - `(deftest ,(intern (format nil "SB-MD5.RFC1321.~A" i)) - (string= (format nil - "~(~{~2,'0X~}~)" - (coerce (md5sum-string ,string :external-format :ascii) 'list)) - ,expected-result) - t))))) + collect (tests-for-test-suite "SB-MD5.RFC1321" i string expected-result))))) (define-rfc1321-tests (("" . "d41d8cd98f00b204e9800998ecf8427e") ("a" ."0cc175b9c0f1b6a831c399e269772661") @@ -28,13 +55,7 @@ `(progn ,@(loop for i upfrom 0 for (string . expected-result) in test-list - collect - `(deftest ,(intern (format nil "SB-MD5.OTHER.~A" i)) - (string= - (format nil "~(~{~2,'0X~}~)" - (coerce (md5sum-string ,string :external-format :ascii) 'list)) - ,expected-result) - t))))) + collect (tests-for-test-suite "SB-MD5.OTHER" i string expected-result))))) (define-other-tests (;; From padding bug report by Edi Weitz ("1631901HERR BUCHHEISTERCITROEN NORD1043360796beckenbauer" . "d734945e5930bb28859ccd13c830358b") @@ -111,7 +132,7 @@ ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . "ab75504250558b788f99d1ebd219abf2")))) (deftest sb-md5.md5sum-file.0 - (string= (format nil "~(~{~2,'0X~}~)" (coerce (md5sum-file "/dev/null") 'list)) + (string= (format nil "~(~{~2,'0X~}~)" (coerce (md5sum-file #-win32 "/dev/null" #+win32 "nul") 'list)) "d41d8cd98f00b204e9800998ecf8427e") t)