{-# LANGUAGE BlockArguments #-} {-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE OverloadedRecordDot #-} {-# HLINT ignore "Use const" #-} {-# HLINT ignore "Unused LANGUAGE pragma" #-} {-# HLINT ignore "Avoid lambda" #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE NoFieldSelectors #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} module Test.Datalog.NaiveQESpec where import Test.Hspec import Datalog.InMemoryDB (InMemoryDB) import qualified Datalog.InMemoryDB as InMemoryDB import Datalog.QueryEngine (QueryEngine(query), queryEngine) import Datalog.NaiveQE spec :: Spec spec = do describe "NaiveQESpec" do it "can do basic queries" do let db :: InMemoryDB = InMemoryDB.withFacts [ "parent(\"alice\", \"bob\")." , "parent(\"bob\", \"carol\")." ] qe :: NaiveQE InMemoryDB = queryEngine db query qe "?- parent(alice,X)." `shouldBe` "#NYI" -- ideally, 'bob'