@@ -4,17 +4,18 @@ import Data.Aeson.Encode
4import Data.Aeson.Parser (value)
4import Data.Aeson.Parser (value)
5import Data.Aeson.Types
5import Data.Aeson.Types
6import Data.Attoparsec.Number
6import Data.Attoparsec.Number
7−import Test.Framework (defaultMain, testGroup)
7+import Test.Framework (Test, defaultMain, testGroup)
8import Test.Framework.Providers.QuickCheck2 (testProperty)
8import Test.Framework.Providers.QuickCheck2 (testProperty)
9−import Test.QuickCheck (Arbitrary(..))
10−import Test.QuickCheck.Monadic (assert, monadicIO, run)
11import qualified Data.ByteString.Lazy.Char8 as L
9import qualified Data.ByteString.Lazy.Char8 as L
12import qualified Data.Attoparsec.Lazy as L
10import qualified Data.Attoparsec.Lazy as L
12+encodeDouble :: Double -> Double -> Bool
14encodeDouble num denom
13encodeDouble num denom
15 | isInfinite d || isNaN d = encode (Number (D d)) == "null"
14 | isInfinite d || isNaN d = encode (Number (D d)) == "null"
16 | otherwise = encode (Number (D d)) == L.pack (show d)
15 | otherwise = encode (Number (D d)) == L.pack (show d)
17 where d = num / denom
16 where d = num / denom
18+encodeInteger :: Integer -> Bool
18encodeInteger i = encode (Number (I i)) == L.pack (show i)
19encodeInteger i = encode (Number (I i)) == L.pack (show i)
20roundTrip :: (FromJSON a, ToJSON a) => (a -> a -> Bool) -> a -> Bool
21roundTrip :: (FromJSON a, ToJSON a) => (a -> a -> Bool) -> a -> Bool
@@ -23,9 +24,12 @@ roundTrip eq i =
23 L.Done _ (Success v) -> v `eq` i
24 L.Done _ (Success v) -> v `eq` i
24 _ -> False
25 _ -> False
26−roundTripBool (v::Bool) = roundTrip (==) v
27+roundTripBool :: Bool -> Bool
28+roundTripBool = roundTrip (==)
27−roundTripDouble (v::Double) = roundTrip approxEq v
29+roundTripDouble :: Double -> Bool
30+roundTripDouble = roundTrip approxEq
28−roundTripInteger (v::Integer) = roundTrip (==) v
31+roundTripInteger :: Integer -> Bool
32+roundTripInteger = roundTrip (==)
30approxEq :: Double -> Double -> Bool
34approxEq :: Double -> Double -> Bool
31approxEq a b = a == b ||
35approxEq a b = a == b ||
@@ -35,8 +39,10 @@ approxEq a b = a == b ||
35 maxAbsoluteError = 1e-15
39 maxAbsoluteError = 1e-15
36 maxRelativeError = 1e-15
40 maxRelativeError = 1e-15
38main = defaultMain tests
43main = defaultMain tests
41 testGroup "encode" [
47 testGroup "encode" [
42 testProperty "encodeDouble" encodeDouble
48 testProperty "encodeDouble" encodeDouble