tidying up, more tests

This commit is contained in:
Felix Dilke 2026-01-16 16:21:43 +00:00
parent 41275dfc71
commit e066e68818
2 changed files with 5 additions and 18 deletions

View File

@ -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
]

View File

@ -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