tidying up, more tests
This commit is contained in:
parent
41275dfc71
commit
e066e68818
@ -7,7 +7,7 @@ import Text.Megaparsec.Char
|
|||||||
import qualified Text.Megaparsec.Char.Lexer as L
|
import qualified Text.Megaparsec.Char.Lexer as L
|
||||||
import Data.Void
|
import Data.Void
|
||||||
import Data.Text (Text)
|
import Data.Text (Text)
|
||||||
import qualified Data.Text as T
|
-- import qualified Data.Text as T
|
||||||
|
|
||||||
-- Type aliases for convenience
|
-- Type aliases for convenience
|
||||||
type Parser = Parsec Void Text
|
type Parser = Parsec Void Text
|
||||||
@ -95,17 +95,3 @@ chainl1 p op = do
|
|||||||
where
|
where
|
||||||
rest x = (do f <- op; y <- p; rest (f x y)) <|> pure x
|
rest x = (do f <- op; y <- p; rest (f x y)) <|> pure x
|
||||||
|
|
||||||
-- ┌───────────────────────────────┐
|
|
||||||
-- │ Examples │
|
|
||||||
-- └───────────────────────────────┘
|
|
||||||
examples :: [(Text, Maybe Expr)]
|
|
||||||
examples =
|
|
||||||
[ ("42", Just $ ENumber 42)
|
|
||||||
, ("-7 + 3", Just $ EAdd (ENumber (-7)) (ENumber 3))
|
|
||||||
, ("2 * (3 + 4)", Just $ EMul (ENumber 2) (EAdd (ENumber 3) (ENumber 4)))
|
|
||||||
, ("10 - 2 * 3", Just $ ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3)))
|
|
||||||
, ("(8 / 2) + 1", Just $ EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1))
|
|
||||||
, ("", Nothing)
|
|
||||||
, ("5 +", Nothing) -- incomplete
|
|
||||||
, ("2 ** 3", Nothing) -- ** not supported
|
|
||||||
]
|
|
||||||
@ -14,6 +14,7 @@ module Test.ArithmeticParserSpec where
|
|||||||
import Test.Hspec
|
import Test.Hspec
|
||||||
|
|
||||||
import ArithmeticParser
|
import ArithmeticParser
|
||||||
|
import Data.Either
|
||||||
|
|
||||||
spec :: Spec
|
spec :: Spec
|
||||||
spec = do
|
spec = do
|
||||||
@ -25,6 +26,6 @@ spec = do
|
|||||||
parseExpr "10 - 2 * 3" `shouldBe` Right (ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3)))
|
parseExpr "10 - 2 * 3" `shouldBe` Right (ESub (ENumber 10) (EMul (ENumber 2) (ENumber 3)))
|
||||||
parseExpr "(8 / 2) + 1" `shouldBe` Right (EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1))
|
parseExpr "(8 / 2) + 1" `shouldBe` Right (EAdd (EDiv (ENumber 8) (ENumber 2)) (ENumber 1))
|
||||||
parseExpr "2 + 3 * (10 - 4)" `shouldBe` Right (EAdd (ENumber 2) (EMul (ENumber 3) (ESub (ENumber 10) (ENumber 4))))
|
parseExpr "2 + 3 * (10 - 4)" `shouldBe` Right (EAdd (ENumber 2) (EMul (ENumber 3) (ESub (ENumber 10) (ENumber 4))))
|
||||||
|
isLeft (parseExpr "") `shouldBe` True -- missing expression
|
||||||
|
isLeft (parseExpr "5 +") `shouldBe` True -- incomplete
|
||||||
|
isLeft (parseExpr "2 ** 3") `shouldBe` True -- not supported
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user