{-# LANGUAGE OverloadedStrings #-} module LLVM.Test.Global where import Test.Tasty import Test.Tasty.HUnit import Data.Monoid import qualified Data.ByteString.Char8 as ByteString import Data.ByteString.Short (fromShort) import LLVM.Test.Support import LLVM.Context import LLVM.Module import LLVM.AST import LLVM.AST.Type as A.T import qualified LLVM.AST.Global as G tests = testGroup "Global" [ testGroup "Alignment" [ testCase name $ withContext $ \context -> do let ast = Module "" "" Nothing Nothing [ GlobalDefinition g ] ast' <- withModuleFromAST context ast moduleAST ast' @?= ast | a <- [0,1], s <- [Nothing, Just "foo"], g <- [ globalVariableDefaults { G.name = UnName 0, G.type' = i32, G.alignment = a, G.section = s }, functionDefaults { G.returnType = A.T.void, G.name = UnName 0, G.parameters = ([], False), G.alignment = a, G.section = s } ], let gn (G.Function {}) = "function" gn (G.GlobalVariable {}) = "variable" name = gn g <> ", align " <> show a <> (maybe "" ((" section " <>) . ByteString.unpack . fromShort) s) ] ]