2026-01-30 18:13:47 +00:00
|
|
|
{-# 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
|
2026-02-11 11:02:48 +00:00
|
|
|
import Datalog.InMemoryDB (InMemoryDB)
|
|
|
|
|
import qualified Datalog.InMemoryDB as InMemoryDB
|
2026-02-11 18:02:15 +00:00
|
|
|
import Datalog.QueryEngine (QueryEngine(query), queryEngine)
|
2026-02-11 11:02:48 +00:00
|
|
|
import Datalog.NaiveQE
|
2026-01-30 18:13:47 +00:00
|
|
|
|
|
|
|
|
spec :: Spec
|
|
|
|
|
spec = do
|
|
|
|
|
describe "NaiveQESpec" do
|
2026-02-11 11:02:48 +00:00
|
|
|
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'
|