module Futhark.Analysis.DataDependenciesTests (tests) where import Data.Map qualified as M import Futhark.Analysis.DataDependencies import Futhark.IR.SOACS import Futhark.IR.SOACSTests () import Test.Tasty import Test.Tasty.HUnit names :: [VName] -> Names names :: [VName] -> Names names = [VName] -> Names namesFromList tests :: TestTree tests :: TestTree tests = TestName -> [TestTree] -> TestTree testGroup TestName "DataDependenciesTests" [ TestName -> [TestTree] -> TestTree testGroup TestName "lambdaDependencies" [ TestName -> Assertion -> TestTree testCase TestName "if" (Assertion -> TestTree) -> Assertion -> TestTree forall a b. (a -> b) -> a -> b $ Dependencies -> Lambda SOACS -> [Names] -> [Names] forall rep. ASTRep rep => Dependencies -> Lambda rep -> [Names] -> [Names] lambdaDependencies Dependencies forall a. Monoid a => a mempty (Lambda SOACS "\\{x_0: i32} : {i32} -> {x_0}" :: Lambda SOACS) [[VName] -> Names names [VName "y_1"]] [Names] -> [Names] -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= [[VName] -> Names names [VName "y_1"]], TestName -> Assertion -> TestTree testCase TestName "flip" (Assertion -> TestTree) -> Assertion -> TestTree forall a b. (a -> b) -> a -> b $ Dependencies -> Lambda SOACS -> [Names] -> [Names] forall rep. ASTRep rep => Dependencies -> Lambda rep -> [Names] -> [Names] lambdaDependencies Dependencies forall a. Monoid a => a mempty (Lambda SOACS "\\{x_0: i32, x_1: bool} : {bool, i32} -> {x_1, x_0}" :: Lambda SOACS) [[VName] -> Names names [VName "y_2"], [VName] -> Names names [VName "y_3"]] [Names] -> [Names] -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= [[VName] -> Names names [VName "y_3"], [VName] -> Names names [VName "y_2"]], TestName -> Assertion -> TestTree testCase TestName "add" (Assertion -> TestTree) -> Assertion -> TestTree forall a b. (a -> b) -> a -> b $ Dependencies -> Lambda SOACS -> [Names] -> [Names] forall rep. ASTRep rep => Dependencies -> Lambda rep -> [Names] -> [Names] lambdaDependencies Dependencies forall a. Monoid a => a mempty (Lambda SOACS "\\{x_0: i32, x_1: i32} : {i32} -> let {x_2: i32} = add32(x_1, x_0) in {x_2}" :: Lambda SOACS) [[VName] -> Names names [VName "y_2"], [VName] -> Names names [VName "y_3"]] [Names] -> [Names] -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= [[VName] -> Names names [VName "y_3", VName "y_2"]], TestName -> Assertion -> TestTree testCase TestName "outer" (Assertion -> TestTree) -> Assertion -> TestTree forall a b. (a -> b) -> a -> b $ Dependencies -> Lambda SOACS -> [Names] -> [Names] forall rep. ASTRep rep => Dependencies -> Lambda rep -> [Names] -> [Names] lambdaDependencies ([(VName, Names)] -> Dependencies forall k a. Ord k => [(k, a)] -> Map k a M.fromList [(VName "x_1", [VName] -> Names names [VName "x_4"])]) (Lambda SOACS "\\{x_0: i32} : {i32} -> let {x_2: i32} = add32(x_1, x_0) in {x_2}" :: Lambda SOACS) [[VName] -> Names names [VName "y_2"]] [Names] -> [Names] -> Assertion forall a. (Eq a, Show a, HasCallStack) => a -> a -> Assertion @?= [[VName] -> Names names [VName "y_2", VName "x_1"]] ] ]