diff --git a/haskell-experiments/test/Test/Datalog/DigestedQuerySpec.hs b/haskell-experiments/test/Test/Datalog/DigestedQuerySpec.hs index af59af1..5b9c283 100644 --- a/haskell-experiments/test/Test/Datalog/DigestedQuerySpec.hs +++ b/haskell-experiments/test/Test/Datalog/DigestedQuerySpec.hs @@ -17,7 +17,7 @@ import Datalog.DigestedQuery (digestQuery) spec :: Spec spec = do describe "DigestedQuery" $ do - it "can digest basic queries" $ do + it "can digest a basic query" $ do digestQuery "?- parent(alice,X)." `shouldBe` DigestedQuery { allBoundVariables = ["X"], numSoughtVariables = 1, @@ -31,3 +31,46 @@ spec = do } ] } + it "can digest a query with all variables explicitly sought" $ do + digestQuery "?- knows(a,X), friend(X,Y) → X,Y." `shouldBe` DigestedQuery { + allBoundVariables = ["X", "Y"], + numSoughtVariables = 2, + conditions = [ + DigestedQueryCondition { + __relation = "knows", + _entries = [ + DigestedQueryEntryConstant $ Sym "a", + DigestedQueryEntryVariable 0 + ] + }, + DigestedQueryCondition { + __relation = "friend", + _entries = [ + DigestedQueryEntryVariable 0, + DigestedQueryEntryVariable 1 + ] + } + ] + } + it "can digest a query with unsought variables" $ do + digestQuery "?- edge(A,B), edge(B,C) → A,C ." `shouldBe` DigestedQuery { + allBoundVariables = ["A", "C", "B"], + numSoughtVariables = 2, + conditions = [ + DigestedQueryCondition { + __relation = "edge", + _entries = [ + DigestedQueryEntryVariable 0, + DigestedQueryEntryVariable 2 + ] + }, + DigestedQueryCondition { + __relation = "edge", + _entries = [ + DigestedQueryEntryVariable 2, + DigestedQueryEntryVariable 1 + ] + } + ] + } +