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 = namesFromList tests :: TestTree tests = testGroup "DataDependenciesTests" [ testGroup "lambdaDependencies" [ testCase "if" $ lambdaDependencies mempty ("\\{x_0: i32} : {i32} -> {x_0}" :: Lambda SOACS) [names ["y_1"]] @?= [names ["y_1"]], testCase "flip" $ lambdaDependencies mempty ("\\{x_0: i32, x_1: bool} : {bool, i32} -> {x_1, x_0}" :: Lambda SOACS) [names ["y_2"], names ["y_3"]] @?= [names ["y_3"], names ["y_2"]], testCase "add" $ lambdaDependencies mempty ("\\{x_0: i32, x_1: i32} : {i32} -> let {x_2: i32} = add32(x_1, x_0) in {x_2}" :: Lambda SOACS) [names ["y_2"], names ["y_3"]] @?= [names ["y_3", "y_2"]], testCase "outer" $ lambdaDependencies (M.fromList [("x_1", names ["x_4"])]) ("\\{x_0: i32} : {i32} -> let {x_2: i32} = add32(x_1, x_0) in {x_2}" :: Lambda SOACS) [names ["y_2"]] @?= [names ["y_2", "x_1"]] ] ]