PageRenderTime 67ms CodeModel.GetById 34ms RepoModel.GetById 0ms app.codeStats 0ms

/site/cl-serializer_0/test.lisp

https://github.com/vikram/lisplibraries
Lisp | 268 lines | 129 code | 38 blank | 101 comment | 1 complexity | 2bb5411618fcea789a85f3066f24332f MD5 | raw file
Possible License(s): LGPL-2.0, LGPL-2.1, CC-BY-SA-3.0, LGPL-3.0, BSD-3-Clause, GPL-2.0
  1. ;; -*- mode: Lisp; Syntax: Common-Lisp; -*-
  2. ;;;
  3. ;;; Copyright (c) 2006 by the authors.
  4. ;;;
  5. ;;; See LICENCE for details.
  6. (defpackage :cl-serializer-test
  7. (:nicknames :serializer-test)
  8. (:use :common-lisp
  9. :closer-mop
  10. :cl-def
  11. :stefil
  12. :cl-serializer))
  13. (in-package :cl-serializer-test)
  14. ;;;;;;;;
  15. ;;; Test
  16. (defsuite* (test :in root-suite))
  17. (defclass standard-object-test ()
  18. ((slot :initarg :slot :accessor slot-of)))
  19. (defstruct structure-object-test
  20. (slot
  21. nil
  22. :type t))
  23. (defsuite* (test/serialize-deserialize :in test))
  24. (def special-variable *equal-hash-table*)
  25. (defgeneric object-equal-p (object-1 object-2)
  26. (:method (object-1 object-2)
  27. (equalp object-1 object-2))
  28. (:method ((object-1 symbol) (object-2 symbol))
  29. (or (call-next-method)
  30. (and (not (symbol-package object-1))
  31. (not (symbol-package object-2))
  32. (equal (symbol-name object-1)
  33. (symbol-name object-2)))))
  34. (:method ((object-1 list) (object-2 list))
  35. (labels ((equal-aux (x y)
  36. (cond ((eql x y)
  37. t)
  38. ((and (consp x)
  39. (consp y))
  40. (and (object-equal-p (car x) (car y))
  41. (object-equal-p (cdr x) (cdr y))))
  42. (t (object-equal-p x y)))))
  43. (equal-aux object-1 object-2)))
  44. (:method ((object-1 array) (object-2 array))
  45. (and (object-equal-p (array-dimensions object-1)
  46. (array-dimensions object-2))
  47. (object-equal-p (array-element-type object-1)
  48. (array-element-type object-2))
  49. (loop for index :from 0 :below (array-total-size object-1)
  50. always (object-equal-p (row-major-aref object-1 index) (row-major-aref object-2 index)))))
  51. (:method ((object-1 hash-table) (object-2 hash-table))
  52. (and (= (hash-table-count object-1) (hash-table-count object-2))
  53. (eq (hash-table-test object-1) (hash-table-test object-2))
  54. (block nil
  55. (maphash (lambda (key value)
  56. (unless (object-equal-p (gethash key object-2) value)
  57. (return #f)))
  58. object-1)
  59. #t)))
  60. (:method ((object-1 structure-object) (object-2 structure-object))
  61. (or (eq object-1 object-2)
  62. (let ((class-1 (class-of object-1))
  63. (class-2 (class-of object-2)))
  64. (and (eq class-1 class-2)
  65. (every (lambda (slot)
  66. (object-equal-p
  67. (slot-value-using-class class-1 object-1 slot)
  68. (slot-value-using-class class-2 object-2 slot)))
  69. (class-slots class-1))))))
  70. (:method ((object-1 standard-object) (object-2 standard-object))
  71. (or (eq object-1 object-2)
  72. (let ((class-1 (class-of object-1))
  73. (class-2 (class-of object-2)))
  74. (and (eq class-1 class-2)
  75. (every (lambda (slot)
  76. (or (and (not (slot-boundp-using-class class-1 object-1 slot))
  77. (not (slot-boundp-using-class class-2 object-2 slot)))
  78. (object-equal-p
  79. (slot-value-using-class class-1 object-1 slot)
  80. (slot-value-using-class class-2 object-2 slot))))
  81. (class-slots class-1)))))))
  82. (def definer serialize-deserialize-test (name value)
  83. `(def test ,(serializer::concatenate-symbol *package* "test/serialize-deserialize/" name) ()
  84. (is (object-equal-p ,value (deserialize (serialize ,value))))))
  85. (def serialize-deserialize-test nil nil)
  86. (def serialize-deserialize-test t t)
  87. (def serialize-deserialize-test symbol/1 'test)
  88. (def serialize-deserialize-test keyword/1 :test)
  89. (def serialize-deserialize-test uninterned-symbol/1 '#:a)
  90. (def serialize-deserialize-test package/1 (find-package :common-lisp))
  91. (def serialize-deserialize-test integer/1 -1)
  92. (def serialize-deserialize-test integer/2 0)
  93. (def serialize-deserialize-test integer/3 1)
  94. (def serialize-deserialize-test integer/4 255)
  95. (def serialize-deserialize-test integer/5 256)
  96. (def serialize-deserialize-test integer/6 -256)
  97. (def serialize-deserialize-test integer/7 -257)
  98. (def serialize-deserialize-test integer/8 1234567890123456789012345678901234567890)
  99. (def serialize-deserialize-test integer/9 -1234567890123456789012345678901234567890)
  100. (def serialize-deserialize-test float/1 0.0)
  101. (def serialize-deserialize-test float/2 1.1)
  102. (def serialize-deserialize-test float/3 -1.1)
  103. (def serialize-deserialize-test float/4 111.1d0)
  104. (def serialize-deserialize-test float/5 -111.1d0)
  105. (def serialize-deserialize-test rational/1 1/2)
  106. (def serialize-deserialize-test rational/2 -1/2)
  107. (def serialize-deserialize-test rational/3 1234567890/9876543210)
  108. (def serialize-deserialize-test rational/4 -1234567890/9876543210)
  109. (def serialize-deserialize-test complex/1 (complex 1.5d0 -0.33d0))
  110. (def serialize-deserialize-test character/1 #\a)
  111. (def serialize-deserialize-test string/1 "")
  112. (def serialize-deserialize-test string/2 "test")
  113. (def serialize-deserialize-test string/3 "áéíóúöőüűÁÉÍÓÚÖŐÜŰ")
  114. (def serialize-deserialize-test proper-list/1 (list nil t))
  115. (def serialize-deserialize-test dotted-list/1 (cons nil t))
  116. (def serialize-deserialize-test cons/1 (let ((cons (cons nil nil)))
  117. (setf (car cons) cons)
  118. (setf (cdr cons) cons)
  119. cons))
  120. (def serialize-deserialize-test simple-vector/1 (coerce #(1 nil t "a") 'simple-vector))
  121. (def serialize-deserialize-test simple-vector/2 (coerce #(0 255) '(simple-vector 2)))
  122. (def serialize-deserialize-test vector/1 (make-array 2 :adjustable #t))
  123. (def serialize-deserialize-test simple-array/1 (make-array '(2 2)))
  124. (def serialize-deserialize-test simple-array/2 (make-array '(2 2) :element-type '(unsigned-byte 16)))
  125. (def serialize-deserialize-test array/1 (make-array '(2 2) :adjustable #t))
  126. (def serialize-deserialize-test hash-table/1 (let ((object (make-hash-table :test 'eql)))
  127. (setf (gethash 'a object) "alma")
  128. (setf (gethash 1 object) 11)
  129. object))
  130. (def serialize-deserialize-test structure-object/1 (make-structure-object-test))
  131. (def serialize-deserialize-test structure-object/2 (make-structure-object-test :slot 1))
  132. (def serialize-deserialize-test standard-object/1 (make-instance 'standard-object-test))
  133. (def serialize-deserialize-test standard-object/2 (make-instance 'standard-object-test :slot 1))
  134. (def serialize-deserialize-test circularity/1 (let ((instance (make-instance 'standard-object-test)))
  135. (setf (slot-of instance) instance)
  136. instance))
  137. #|
  138. (def function cl-store-serialize (object)
  139. (flexi-streams:with-output-to-sequence (stream)
  140. (cl-store:store object stream)))
  141. (defvar k (with-call/cc
  142. (print "Hello")
  143. (let/cc k k)
  144. (print "World")))
  145. (length
  146. (flexi-streams:with-output-to-sequence (stream)
  147. (cl-store:store k stream)))
  148. 800
  149. (cl:time
  150. (iter (repeat 1000)
  151. (flexi-streams:with-input-from-sequence (stream (flexi-streams:with-output-to-sequence (stream)
  152. (cl-store:store k stream)))
  153. (cl-store:restore stream))))
  154. Evaluation took:
  155. 2.329 seconds of real time
  156. 2.288143 seconds of user run time
  157. 0.0 seconds of system run time
  158. [Run times include 0.044 seconds GC run time.]
  159. 0 calls to %EVAL
  160. 0 page faults and
  161. 35,586,656 bytes consed.
  162. NIL
  163. (length (serialize k))
  164. 652
  165. (cl:time
  166. (iter (repeat 1000)
  167. (deserialize (serialize k))))
  168. Evaluation took:
  169. 0.232 seconds of real time
  170. 0.228014 seconds of user run time
  171. 0.004001 seconds of system run time
  172. [Run times include 0.012 seconds GC run time.]
  173. 0 calls to %EVAL
  174. 0 page faults and
  175. 11,797,056 bytes consed.
  176. NIL
  177. (defvar ii '(a (b c) a b (d e (f g (h i)))))
  178. (length
  179. (flexi-streams:with-output-to-sequence (stream)
  180. (cl-store:store ii stream)))
  181. 158
  182. (cl:time
  183. (iter (repeat 10000)
  184. (flexi-streams:with-input-from-sequence (stream (flexi-streams:with-output-to-sequence (stream)
  185. (cl-store:store ii stream)))
  186. (cl-store:restore stream))))
  187. Evaluation took:
  188. 4.189 seconds of real time
  189. 4.120258 seconds of user run time
  190. 0.028002 seconds of system run time
  191. [Run times include 0.112 seconds GC run time.]
  192. 0 calls to %EVAL
  193. 0 page faults and
  194. 95,359,584 bytes consed.
  195. NIL
  196. (length (serialize ii))
  197. 88
  198. (cl:time
  199. (iter (repeat 10000)
  200. (deserialize (serialize ii))))
  201. Evaluation took:
  202. 0.394 seconds of real time
  203. 0.392025 seconds of user run time
  204. 0.0 seconds of system run time
  205. [Run times include 0.028 seconds GC run time.]
  206. 0 calls to %EVAL
  207. 0 page faults and
  208. 31,204,976 bytes consed.
  209. NIL
  210. |#