{-# 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)) import qualified Datalog.QueryEngine as QueryEngine import qualified Datalog.NaiveQE as NaiveQE import Datalog.QueryEngine (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'