From e32342b363c2454de9d2d9bae5f389b11a3cb1d7 Mon Sep 17 00:00:00 2001 From: Brian Hicks Date: Fri, 11 Jun 2021 15:28:34 -0500 Subject: [PATCH] add not equals --- src/Datalog.elm | 8 ++++++++ tests/DatalogTests.elm | 12 ++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/Datalog.elm b/src/Datalog.elm index d51a85c..8c18430 100644 --- a/src/Datalog.elm +++ b/src/Datalog.elm @@ -870,6 +870,7 @@ type Token | GreaterThan | GreaterThanOrEquals | Equals + | NotEquals | OrToken | NotToken | LineComment @@ -1012,6 +1013,8 @@ opParser = |. Parser.token greaterThanToken , Parser.succeed eq |. Parser.token equalsToken + , Parser.succeed (\lhs rhs -> not_ (eq lhs rhs)) + |. Parser.token notEqualsToken ] @@ -1174,6 +1177,11 @@ equalsToken = Parser.Token "=" (ExpectedToken Equals) +notEqualsToken : Parser.Token ParsingProblem +notEqualsToken = + Parser.Token "!=" (ExpectedToken NotEquals) + + orToken : Parser.Token ParsingProblem orToken = Parser.Token "||" (ExpectedToken OrToken) diff --git a/tests/DatalogTests.elm b/tests/DatalogTests.elm index cefb34e..44a16af 100644 --- a/tests/DatalogTests.elm +++ b/tests/DatalogTests.elm @@ -485,6 +485,18 @@ datalogTests = |> with "thing" [ var "name", var "legs" ] |> filter (eq "legs" (int 8)) ] + , test "not equal to" <| + \_ -> + expectParses + """ + notASpider(name) :- + thing(name, legs), + legs != 8. + """ + [ rule "notASpider" [ "name" ] + |> with "thing" [ var "name", var "legs" ] + |> filter (not_ (eq "legs" (int 8))) + ] , test "or" <| \_ -> expectParses