(defpackage :edn-test (:use :cl :st) (:export )) (in-package :edn-test) (defun float-equal (a b) (and (typep a (type-of b)) (typep b (type-of a)) (> 0.00001 (abs (- a b))))) (deftest floating () (should be float-equal 0.1d0 (edn:read-edn "0.1") ) (should be float-equal 0.1d0 (edn:read-edn "+0.1")) (should be float-equal -0.1d0 (edn:read-edn "-0.1")) (should be float-equal 1d0 (edn:read-edn "0.1e1")) (should be float-equal 1d0 (edn:read-edn "0.1e+1")) (should be float-equal 0.01d0 (edn:read-edn "0.1e-1")) (should be float-equal -0.01d0 (edn:read-edn "-0.1e-1")) (should be float-equal 0d0 (edn:read-edn "0M")) (should be float-equal -0.01d0 (edn:read-edn "-0.1e-1M")) (should be float-equal -0.0d0 (edn:read-edn "-0.e-1M"))) (deftest edn-parser () (should be equal '(:list) (edn:read-edn (format nil "()~%"))) (should be equal '(:map (:pair 1 1)) (edn:read-edn "{ 1 1 }")) (should be equal '(:vector 1 1) (edn:read-edn "[ 1 1 ]")) (should be equal '(:set 1 1) (edn:read-edn "#{ 1 1 }")) (should be equal '(:tagged (:symbol nil "foobar") (:vector 1 1)) (edn:read-edn "#foobar [ 1 1 ]")) (should be equal '(:list (:set (:vector (:map (:pair edn-primitives:nil edn-primitives:true) (:pair edn-primitives:false edn-primitives:nil))))) (edn:read-edn "(#{[{nil true,false nil}]})"))) (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"))) (deftest smoke () (should be = 0 (loop repeat 0 for res = (edn:read-edn (edn.generate:generate-edn)) unless res sum 1)))