diff --git a/src/Parser/Numbers.md b/src/Parser/Numbers.md index 008b649..d25343b 100644 --- a/src/Parser/Numbers.md +++ b/src/Parser/Numbers.md @@ -76,6 +76,23 @@ natBase10 : Parser Nat natBase10 = nat base10 ``` +### Integer + +```idris +export +integer : Base -> Parser Integer +integer b = do + negative <- map isJust . tryMaybe $ parseExactChar '-' + value <- map natToInteger $ nat b + if negative + then pure $ negate value + else pure $ value + +export +integerBase10 : Parser Integer +integerBase10 = integer base10 +``` + ## Unit tests Test roundtripping a value through the provided parser @@ -111,3 +128,22 @@ natRoundTrip = pure $ && !(roundtrip 1234567890000 natBase10) && !(roundtrip 12345678901234567890 natBase10) ``` + +```idris +-- @@test Integer round trip +integerRoundTrip : IO Bool +integerRoundTrip = pure $ + !(roundtrip 0 integerBase10) + && !(roundtrip 1 integerBase10) + && !(roundtrip 100 integerBase10) + && !(roundtrip 1234 integerBase10) + && !(roundtrip 1234567890 integerBase10) + && !(roundtrip 1234567890000 integerBase10) + && !(roundtrip 12345678901234567890 integerBase10) + && !(roundtrip (-1) integerBase10) + && !(roundtrip (-100) integerBase10) + && !(roundtrip (-1234) integerBase10) + && !(roundtrip (-1234567890) integerBase10) + && !(roundtrip (-1234567890000) integerBase10) + && !(roundtrip (-12345678901234567890) integerBase10) +```