Update of /project/elephant/cvsroot/elephant/tests In directory clnet:/tmp/cvs-serv18919/tests
Modified Files: testserializer.lisp Log Message: Finish 64-bit update; clean up memutil; fix array flag type error in SBCL; more efficient and correct hash serialization in new serializer
--- /project/elephant/cvsroot/elephant/tests/testserializer.lisp 2007/02/01 04:37:25 1.14 +++ /project/elephant/cvsroot/elephant/tests/testserializer.lisp 2007/02/01 15:19:50 1.15 @@ -47,10 +47,75 @@ (typep (in-out-value most-negative-fixnum) 'fixnum)) t t t t t)
+;; +;; Validate 32/64 bit memutils operation (white box test) +;; + +(deftest read-32-bit-fixnum + (progn + (with-buffer-streams (bs) + (if (not (elephant-memutil::little-endian-p)) + (elephant-memutil::buffer-write-byte 1 bs)) + (loop for i from 1 upto 3 do + (elephant-memutil::buffer-write-byte 0 bs)) + (if (elephant-memutil::little-endian-p) + (elephant-memutil::buffer-write-byte 1 bs)) + (elephant-memutil::buffer-read-fixnum32 bs))) + #x1000000) + +(deftest read-64-bit-fixnum + (progn + (with-buffer-streams (bs) + (if (not (elephant-memutil::little-endian-p)) + (elephant-memutil::buffer-write-byte 1 bs)) + (loop for i from 1 upto 7 do + (elephant-memutil::buffer-write-byte 0 bs)) + (if (elephant-memutil::little-endian-p) + (elephant-memutil::buffer-write-byte 1 bs)) + (elephant-memutil::buffer-read-fixnum64 bs))) + #x100000000000000) + +;; +;; Use serializer to write fixnum +;; Verify bytes and length of output +;; + +(deftest write-32-bit-fixnum + (progn + (with-buffer-streams (bs) + (serialize #x01000000 bs *store-controller*) + (elephant-memutil::buffer-read-byte bs) ;; skip tag + (and (= (elephant-memutil::buffer-stream-size bs) 5) + (if (elephant-memutil::little-endian-p) + (= (progn (loop for i from 1 upto 3 do + (elephant-memutil::buffer-read-byte bs)) + (elephant-memutil::buffer-read-byte bs)) + 1) + (= (elephant-memutil::buffer-read-byte bs) + 1))))) + t) + +(deftest write-64-bit-fixnum + (progn + (with-buffer-streams (bs) + (serialize #x0100000000000000 bs *store-controller*) + (elephant-memutil::buffer-read-byte bs) ;; skip tag + (if (< most-positive-fixnum elephant-memutil::+2^32+) + t + (and (= (elephant-memutil::buffer-stream-size bs) 9) + (if (elephant-memutil::little-endian-p) + (= (progn (loop for i from 1 upto 7 do + (elephant-memutil::buffer-read-byte bs)) + (elephant-memutil::buffer-read-byte bs)) + 1) + (= (elephant-memutil::buffer-read-byte bs) + 1)))))) + t) + (deftest bignums (are-not-null - (in-out-equal 10000000000) - (in-out-equal -10000000000) + (in-out-equal (+ most-positive-fixnum 100)) + (in-out-equal (- most-negative-fixnum 100)) (loop for i from 0 to 2000 always (in-out-equal (expt 2 i))) (loop for i from 0 to 2000 @@ -167,22 +232,21 @@ (deftest hash-tables-1 (let* ((ht (make-hash-table :test 'equalp :size 333 :rehash-size 1.2 :rehash-threshold 0.8)) - (size (hash-table-size ht)) (rehash-size (hash-table-rehash-size ht)) (rehash-threshold (hash-table-rehash-threshold ht)) - (out (in-out-value ht))) + (out (in-out-value ht))) (are-not-null (eq (hash-table-test out) 'equalp) - (= (hash-table-size ht) size) - (= (hash-table-rehash-size ht) rehash-size) - (= (hash-table-rehash-threshold ht) rehash-threshold) +;; (= (hash-table-size out) size) ;; size is not equal, only kv pairs are stored +;; (= (hash-table-rehash-size out) rehash-size) ;; hint only, implementation not constrained +;; (= (hash-table-rehash-threshold out) rehash-threshold) ;; hints only, implementation not constrained (eq (hash-table-test (in-out-value (make-hash-table :test 'eq))) 'eq) (eq (hash-table-test (in-out-value (make-hash-table :test 'eql))) 'eql) (eq (hash-table-test (in-out-value (make-hash-table :test 'equal))) 'equal) (eq (hash-table-test (in-out-value (make-hash-table :test 'equalp))) 'equalp))) - t t t t t t t t) + t t t t t)
(deftest hash-tables-2 (let ((ht (make-hash-table :test 'equalp))) @@ -391,33 +455,4 @@ (eq (get-value f2 h) f2)))) t t t t t t t t)
-(defparameter +little-endian+ nil) -(defparameter +big-endian+ t) - -(defun determine-endianness () - (with-buffer-streams (bs) - (%serialize 1 bs *store-controller*) - (elephant-memutil::buffer-read-byte bs) - ;; If little endian, switch defaults - (when (= (elephant-memutil::buffer-read-byte bs) 1) - (setf +little-endian+ t) - (setf +big-endian+ nil)))) - -;; -;; Manually write bytes -;; Verify read out using serializer -;; - -;;(deftest read-32-bit-fixnum -;; (progn nil) -;; t) - -;;(deftest read-64-bit-fixnum -;; (progn nil) -;; t)
-;; -;; Clear the buffer stream -;; Use serializer to write fixnum if 64-bit -;; Verify bytes and length of output -;; \ No newline at end of file