@@ -4,17 +4,18 @@ import Data.Aeson.Encode
44import Data.Aeson.Parser (value)
55import Data.Aeson.Types
66import Data.Attoparsec.Number
7−import Test.Framework (defaultMain, testGroup)
7+import Test.Framework (Test, defaultMain, testGroup)
88import Test.Framework.Providers.QuickCheck2 (testProperty)
9−import Test.QuickCheck (Arbitrary(..))
10−import Test.QuickCheck.Monadic (assert, monadicIO, run)
119import qualified Data.ByteString.Lazy.Char8 as L
1210import qualified Data.Attoparsec.Lazy as L
1311
12+encodeDouble :: Double -> Double -> Bool
1413encodeDouble num denom
1514 | isInfinite d || isNaN d = encode (Number (D d)) == "null"
1615 | otherwise = encode (Number (D d)) == L.pack (show d)
1716 where d = num / denom
17+
18+encodeInteger :: Integer -> Bool
1819encodeInteger i = encode (Number (I i)) == L.pack (show i)
1920
2021roundTrip :: (FromJSON a, ToJSON a) => (a -> a -> Bool) -> a -> Bool
@@ -23,9 +24,12 @@ roundTrip eq i =
2324 L.Done _ (Success v) -> v `eq` i
2425 _ -> False
2526
26−roundTripBool (v::Bool) = roundTrip (==) v
27−roundTripDouble (v::Double) = roundTrip approxEq v
28−roundTripInteger (v::Integer) = roundTrip (==) v
27+roundTripBool :: Bool -> Bool
28+roundTripBool = roundTrip (==)
29+roundTripDouble :: Double -> Bool
30+roundTripDouble = roundTrip approxEq
31+roundTripInteger :: Integer -> Bool
32+roundTripInteger = roundTrip (==)
2933
3034approxEq :: Double -> Double -> Bool
3135approxEq a b = a == b ||
@@ -35,8 +39,10 @@ approxEq a b = a == b ||
3539 maxAbsoluteError = 1e-15
3640 maxRelativeError = 1e-15
3741
42+main :: IO ()
3843main = defaultMain tests
3944
45+tests :: [Test]
4046tests = [
4147 testGroup "encode" [
4248 testProperty "encodeDouble" encodeDouble