phino-0.0.0.41: test/FunctionsSpec.hs
-- SPDX-FileCopyrightText: Copyright (c) 2025 Objectionary.com
-- SPDX-License-Identifier: MIT
module FunctionsSpec where
import Ast
import Data.Map.Strict qualified as Map
import Functions (buildTerm)
import Logger (logDebug)
import Matcher (MetaValue (MvBindings), Subst (Subst))
import Misc (uniqueBindings')
import Pretty (prettyExpression')
import Term (Term (TeBindings))
import Test.Hspec (Spec, describe, it, shouldBe)
import Text.Printf (printf)
import Yaml (ExtraArgument (ArgBinding))
spec :: Test.Hspec.Spec
spec = describe "Functions" $
Test.Hspec.it "contains only unique bindings after 'join'" $ do
let first = ("B1", MvBindings [BiVoid AtRho, BiDelta BtEmpty, BiTau (AtLabel "x") ExGlobal, BiVoid (AtAlpha 0)])
second = ("B2", MvBindings [BiTau AtRho ExThis, BiLambda "Func", BiDelta (BtOne "00"), BiVoid (AtAlpha 1)])
third = ("B3", MvBindings [BiLambda "Some", BiTau (AtLabel "y") ExThis, BiTau (AtLabel "x") ExThis, BiVoid (AtAlpha 0)])
subst = Subst (Map.fromList [first, second, third])
TeBindings bds <- buildTerm "join" [ArgBinding (BiMeta "B1"), ArgBinding (BiMeta "B2"), ArgBinding (BiMeta "B3")] subst (Program ExGlobal)
bds' <- uniqueBindings' bds
logDebug (printf "Joined bindings:\n%s" (prettyExpression' (ExFormation bds')))
length bds' `shouldBe` 9