git.fiddlerwoaroof.com
test.lisp
2a63b94b
 (defpackage :edn-test
   (:use :cl :st)
   (:export ))
 (in-package :edn-test)
 
ee000f9c
 (defun float-equal (a b)
66132900
   (and (typep a (type-of b))
        (typep b (type-of a))
        (> 0.00001
           (abs (- a b)))))
ee000f9c
 
 (deftest floating ()
   (should be float-equal
66132900
           0.1d0
           (edn:read-edn "0.1")
           )
ee000f9c
   (should be float-equal
66132900
           0.1d0
ee000f9c
           (edn:read-edn "+0.1"))
   (should be float-equal
66132900
           -0.1d0
ee000f9c
           (edn:read-edn "-0.1"))
   (should be float-equal
66132900
           1d0
ee000f9c
           (edn:read-edn "0.1e1"))
   (should be float-equal
66132900
           1d0
ee000f9c
           (edn:read-edn "0.1e+1"))
   (should be float-equal
66132900
           0.01d0
ee000f9c
           (edn:read-edn "0.1e-1"))
   (should be float-equal
66132900
           -0.01d0
ee000f9c
           (edn:read-edn "-0.1e-1"))
74868e98
   (should be float-equal
           0d0
           (edn:read-edn "0M"))
ee000f9c
   (should be float-equal
66132900
           -0.01d0
ee000f9c
           (edn:read-edn "-0.1e-1M"))
   (should be float-equal
66132900
           -0.0d0
ee000f9c
           (edn:read-edn "-0.e-1M")))
 
2a63b94b
 (deftest edn-parser ()
   (should be equal
ee000f9c
           '(:list)
           (edn:read-edn (format nil "()~%")))
   (should be equal
           '(:map (:pair 1 1))
           (edn:read-edn "{ 1 1 }"))
2a63b94b
   (should be equal
ee000f9c
           '(:vector 1 1)
           (edn:read-edn "[ 1 1 ]"))
2a63b94b
   (should be equal
ee000f9c
           '(:set 1 1)
           (edn:read-edn "#{ 1   1 }"))
2a63b94b
   (should be equal
ee000f9c
           '(:tagged (:symbol nil "foobar") (:vector 1 1))
           (edn:read-edn "#foobar [ 1 1 ]"))
2a63b94b
   (should be equal
           '(:list
             (:set
              (:vector
               (:map (:pair edn-primitives:nil edn-primitives:true)
                     (:pair edn-primitives:false edn-primitives:nil)))))
ee000f9c
           (edn:read-edn "(#{[{nil true,false nil}]})")))
74868e98
 
 (deftest maps ()
   (should be equal
           '(:map (:pair 1 2))
           (edn:read-edn "{1 2 }"))
   (should be equal
           '(:map (:pair 1 2))
           (edn:read-edn "{ 1 2}"))
   (should be equal
           '(:map (:pair 1 2))
           (edn:read-edn "{1      2}"))
   (should be equal
           '(:map (:pair 1 2))
           (edn:read-edn "{ 1 2 }"))
   (should be equal
           '(:map (:pair 1 2))
           (edn:read-edn "{     1      2     }")))
 
 (deftest translate-escape ()
   (flet ((translates-to (in out)
            (should be eql
                    out
                    (edn::translate-escape in))))
     (translates-to #\" #\")
     (translates-to #\\ #\\)
     (translates-to #\b (code-char 8))
     (translates-to #\f (code-char 12))
     (translates-to #\n (code-char 10))
     (translates-to #\r (code-char 13))
     (translates-to #\t (code-char 9))))
 
 (deftest .string-ending ()
   (should be equal
           "foobar"
           ""
           (smug:parse (edn::.string-ending) "foobar\""))
   (should be equal
           "foobar"
           "asdf"
           (smug:parse (edn::.string-ending) "foobar\"asdf"))
   (should be equal
           "foobar\"qwer"
           "asdf"
           (smug:parse (edn::.string-ending) "foobar\\\"qwer\"asdf"))
   (should be equal
           (format nil "foobar~%qwer")
           "asdf"
           (smug:parse (edn::.string-ending) "foobar\\nqwer\"asdf")))
942890c4
 
 (deftest smoke ()
   (should be =
           0
           (loop repeat 0
              for res = (edn:read-edn (edn.generate:generate-edn))
              unless res sum 1)))