tomland-1.3.3.3: test/Test/Toml/Parser/Double.hs
module Test.Toml.Parser.Double
(doubleSpecs
) where
import Test.Hspec (Spec, describe, it)
import Test.Hspec.Megaparsec (parseSatisfies)
import Text.Megaparsec (parse)
import Test.Toml.Parser.Common (doubleFailOn, parseDouble)
import Toml.Parser.Value (doubleP)
doubleSpecs :: Spec
doubleSpecs = describe "doubleP" $ do
it "can parse a number which consists of an integral part, and a fractional part" $ do
parseDouble "+1.0" 1.0
parseDouble "3.1415" 3.1415
parseDouble "0.0" 0.0
parseDouble "-0.01" (-0.01)
parseDouble "5e+22" 5e+22
parseDouble "1e6" 1e6
parseDouble "-2E-2" (-2E-2)
parseDouble "6.626e-34" 6.626e-34
it "can parse a number with underscores" $ do
parseDouble "5e+2_2" 5e+22
parseDouble "1.1_1e6" 1.11e6
parseDouble "-2_2.21_9E-0_2" (-22.219E-2)
it "can parse sign-prefixed zero" $ do
parseDouble "+0.0" 0.0
parseDouble "-0.0" (-0.0)
it "can parse positive and negative special float values (inf and nan)" $ do
parseDouble "inf" (1 / 0)
parseDouble "+inf" (1 / 0)
parseDouble "-inf" (-1 / 0)
doubleSatisfies "nan" isNaN
doubleSatisfies "+nan" isNaN
doubleSatisfies "-nan" isNaN
it "fails if `inf` or `nan` are not all lowercase" $ do
doubleFailOn "Inf"
doubleFailOn "INF"
doubleFailOn "Nan"
doubleFailOn "NAN"
doubleFailOn "NaN"
where
doubleSatisfies given f = parse doubleP "" given `parseSatisfies` f