packages feed

biscuit-haskell-0.5.0.0: test/Spec/AST.hs

{-# LANGUAGE OverloadedStrings #-}
module Spec.AST (specs) where

import           Test.Tasty
import           Test.Tasty.HUnit

import           Auth.Biscuit.Datalog.AST

specs :: TestTree
specs = testGroup "datalog AST"
  [ toStackClosure
  , fromStackClosure
  ]

toStackClosure :: TestTree
toStackClosure = testCase "Turn a closure expr into a stack" $
  let cE = EClosure
             ["x"]
             (EBinary
               Equal
               (EValue (Variable "x"))
               (EValue (LInteger 42)))
      cO = [COp ["x"]
            [ VOp (Variable "x")
            , VOp (LInteger 42)
            , BOp Equal
            ]]
   in toStack cE @?= cO


fromStackClosure :: TestTree
fromStackClosure = testCase "Turn a closure op into an expression" $
  let cO = [COp ["x"]
            [ VOp (Variable "x")
            , VOp (LInteger 42)
            , BOp Equal
            ]]
      cE = EClosure
            ["x"]
            (EBinary
              Equal
              (EValue (Variable "x"))
              (EValue (LInteger 42)))
   in fromStack cO @?= Right cE