@@ -11,6 +11,7 @@ import qualified Text.Libyaml as Y
1111import qualified Data.ByteString as BS
1212import qualified Data.ByteString.Char8 as B8
1313import Data.Int (Int64)
14+import qualified Data.Scientific as S
1415
1516import Test.HUnit hiding (Test, path)
1617
@@ -20,6 +21,7 @@ import qualified Data.Conduit.List as CL
2021import Control.Monad
2122import Control.Exception (try, SomeException)
2223import Test.Hspec
24+import Test.Hspec.QuickCheck
2325import Data.Either.Compat
2426import System.Directory (createDirectory, createDirectoryIfMissing)
2527import Test.Mockery.Directory
@@ -310,6 +312,13 @@ spec = do
310312 ] `shouldReturn`
311313 "[\"foo\", 99, 99.99, bar, !foo \"foo\", !foo foo]\n"
312314
315+ prop "Scientific values round-trip" $ \coeff expon -> do
316+ let val = D.Number $ S.scientific coeff expon
317+ let rendered = D.encode val
318+ case D.decodeEither' rendered of
319+ Left e -> error $ show (coeff, expon, e)
320+ Right val' -> val' `shouldBe` val
321+
313322specialStrings :: [T.Text]
314323specialStrings =
315324 [ "fo\"o"