36 lines
1.2 KiB
Haskell

{-# 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'