summaryrefslogtreecommitdiff
path: root/testsuite/tests/ffi/should_run/ffi009.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/ffi/should_run/ffi009.hs')
-rw-r--r--testsuite/tests/ffi/should_run/ffi009.hs552
1 files changed, 552 insertions, 0 deletions
diff --git a/testsuite/tests/ffi/should_run/ffi009.hs b/testsuite/tests/ffi/should_run/ffi009.hs
new file mode 100644
index 0000000000..5e91843bb5
--- /dev/null
+++ b/testsuite/tests/ffi/should_run/ffi009.hs
@@ -0,0 +1,552 @@
+import Foreign
+import System.Random
+
+--------------------------------------------------------------------------------
+
+type FunType5I = Int -> Int -> Int -> Int -> Int -> Int
+
+foreign import ccall "dynamic" callFun5I :: FunPtr FunType5I -> FunType5I
+foreign import ccall "wrapper" mkFun5I :: FunType5I -> IO (FunPtr FunType5I)
+
+manyArgs5I :: FunType5I
+manyArgs5I a1 a2 a3 a4 a5 = (((a1 * 31 + a2) * 31 + a3) * 31 + a4) * 31 + a5
+
+test5I :: IO ()
+test5I = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ funAddr <- mkFun5I manyArgs5I
+ print (callFun5I funAddr a1 a2 a3 a4 a5 ==
+ manyArgs5I a1 a2 a3 a4 a5)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunType11D = Double -> Double -> Double -> Double -> Double -> Double
+ -> Double -> Double -> Double -> Double -> Double -> Double
+
+foreign import ccall "dynamic" callFun11D :: FunPtr FunType11D -> FunType11D
+foreign import ccall "wrapper" mkFun11D :: FunType11D -> IO (FunPtr FunType11D)
+
+manyArgs11D :: FunType11D
+manyArgs11D a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+ ((((a1 * 31 + a2) * 31 + a3) * 31 + a4) * 31 + a5) * 31 + a6
+ + a7 + a8 + a9 + a10 + a11
+
+test11D :: IO ()
+test11D = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ funAddr <- mkFun11D manyArgs11D
+ let x = callFun11D funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11
+ y = manyArgs11D a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11
+ if x /= y then
+ print x >> print y
+ else
+ print True
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunType11M = Int -> Double -> Float -> Char -> Bool -> Int -> Float -> Int
+ -> Char -> Double -> Bool -> Double
+
+foreign import ccall "dynamic" callFun11M :: FunPtr FunType11M -> FunType11M
+foreign import ccall "wrapper" mkFun11M :: FunType11M -> IO (FunPtr FunType11M)
+
+manyArgs11M :: FunType11M
+manyArgs11M a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 =
+ (((((((((fromIntegral a1 * 31 + a2) * 31 +
+ realToFrac a3) * 31 + fromIntegral (fromEnum a4)) * 31 +
+ fromIntegral (fromEnum a5)) * 31 + fromIntegral a6) * 31 +
+ realToFrac a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral (fromEnum a9)) * 31 + a10) * 31 +
+ fromIntegral (fromEnum a11)
+
+test11M :: IO ()
+test11M = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ funAddr <- mkFun11M manyArgs11M
+ print (callFun11M funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 ==
+ manyArgs11M a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM1 = Double -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM1 :: FunPtr FunTypeM1 -> FunTypeM1
+foreign import ccall "wrapper" mkFunM1 :: FunTypeM1 -> IO (FunPtr FunTypeM1)
+
+manyArgsM1 :: FunTypeM1
+manyArgsM1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ (((((((((( a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM1 :: IO ()
+testM1 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM1 manyArgsM1
+ print (callFunM1 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM1 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM2 = Int -> Double -> Int -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM2 :: FunPtr FunTypeM2 -> FunTypeM2
+foreign import ccall "wrapper" mkFunM2 :: FunTypeM2 -> IO (FunPtr FunTypeM2)
+
+manyArgsM2 :: FunTypeM2
+manyArgsM2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM2 :: IO ()
+testM2 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM2 manyArgsM2
+ print (callFunM2 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM2 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM3 = Int -> Int -> Double -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM3 :: FunPtr FunTypeM3 -> FunTypeM3
+foreign import ccall "wrapper" mkFunM3 :: FunTypeM3 -> IO (FunPtr FunTypeM3)
+
+manyArgsM3 :: FunTypeM3
+manyArgsM3 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM3 :: IO ()
+testM3 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM3 manyArgsM3
+ print (callFunM3 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM3 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM4 = Int -> Int -> Int -> Double -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM4 :: FunPtr FunTypeM4 -> FunTypeM4
+foreign import ccall "wrapper" mkFunM4 :: FunTypeM4 -> IO (FunPtr FunTypeM4)
+
+manyArgsM4 :: FunTypeM4
+manyArgsM4 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM4 :: IO ()
+testM4 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM4 manyArgsM4
+ print (callFunM4 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM4 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM5 = Int -> Int -> Int -> Int -> Double -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM5 :: FunPtr FunTypeM5 -> FunTypeM5
+foreign import ccall "wrapper" mkFunM5 :: FunTypeM5 -> IO (FunPtr FunTypeM5)
+
+manyArgsM5 :: FunTypeM5
+manyArgsM5 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM5 :: IO ()
+testM5 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM5 manyArgsM5
+ print (callFunM5 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM5 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM6 = Int -> Int -> Int -> Int -> Int -> Double -> Int -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM6 :: FunPtr FunTypeM6 -> FunTypeM6
+foreign import ccall "wrapper" mkFunM6 :: FunTypeM6 -> IO (FunPtr FunTypeM6)
+
+manyArgsM6 :: FunTypeM6
+manyArgsM6 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM6 :: IO ()
+testM6 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM6 manyArgsM6
+ print (callFunM6 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM6 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM7 = Int -> Int -> Int -> Int -> Int -> Int -> Double -> Int -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM7 :: FunPtr FunTypeM7 -> FunTypeM7
+foreign import ccall "wrapper" mkFunM7 :: FunTypeM7 -> IO (FunPtr FunTypeM7)
+
+manyArgsM7 :: FunTypeM7
+manyArgsM7 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM7 :: IO ()
+testM7 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM7 manyArgsM7
+ print (callFunM7 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM7 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM8 = Int -> Int -> Int -> Int -> Int -> Int -> Int -> Double -> Int
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM8 :: FunPtr FunTypeM8 -> FunTypeM8
+foreign import ccall "wrapper" mkFunM8 :: FunTypeM8 -> IO (FunPtr FunTypeM8)
+
+manyArgsM8 :: FunTypeM8
+manyArgsM8 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM8 :: IO ()
+testM8 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM8 manyArgsM8
+ print (callFunM8 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM8 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM9 = Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Double
+ -> Int -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM9 :: FunPtr FunTypeM9 -> FunTypeM9
+foreign import ccall "wrapper" mkFunM9 :: FunTypeM9 -> IO (FunPtr FunTypeM9)
+
+manyArgsM9 :: FunTypeM9
+manyArgsM9 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM9 :: IO ()
+testM9 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM9 manyArgsM9
+ print (callFunM9 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM9 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM10 = Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Double -> Int -> Int -> Double
+
+foreign import ccall "dynamic" callFunM10 :: FunPtr FunTypeM10 -> FunTypeM10
+foreign import ccall "wrapper" mkFunM10 :: FunTypeM10 -> IO (FunPtr FunTypeM10)
+
+manyArgsM10 :: FunTypeM10
+manyArgsM10 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + a10) * 31 +
+ fromIntegral a11) * 31 + fromIntegral a12
+
+testM10 :: IO ()
+testM10 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM10 manyArgsM10
+ print (callFunM10 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM10 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM11 = Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Double -> Int -> Double
+
+foreign import ccall "dynamic" callFunM11 :: FunPtr FunTypeM11 -> FunTypeM11
+foreign import ccall "wrapper" mkFunM11 :: FunTypeM11 -> IO (FunPtr FunTypeM11)
+
+manyArgsM11 :: FunTypeM11
+manyArgsM11 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ a11) * 31 + fromIntegral a12
+
+testM11 :: IO ()
+testM11 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM11 manyArgsM11
+ print (callFunM11 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM11 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+type FunTypeM12 = Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int
+ -> Int -> Int -> Double -> Double
+
+foreign import ccall "dynamic" callFunM12 :: FunPtr FunTypeM12 -> FunTypeM12
+foreign import ccall "wrapper" mkFunM12 :: FunTypeM12 -> IO (FunPtr FunTypeM12)
+
+manyArgsM12 :: FunTypeM12
+manyArgsM12 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 =
+ ((((((((((fromIntegral a1 * 31 + fromIntegral a2) * 31 +
+ fromIntegral a3) * 31 + fromIntegral a4) * 31 +
+ fromIntegral a5) * 31 + fromIntegral a6) * 31 +
+ fromIntegral a7) * 31 + fromIntegral a8) * 31 +
+ fromIntegral a9) * 31 + fromIntegral a10) * 31 +
+ fromIntegral a11) * 31 + a12
+
+testM12 :: IO ()
+testM12 = do
+ a1 <- randomIO
+ a2 <- randomIO
+ a3 <- randomIO
+ a4 <- randomIO
+ a5 <- randomIO
+ a6 <- randomIO
+ a7 <- randomIO
+ a8 <- randomIO
+ a9 <- randomIO
+ a10 <- randomIO
+ a11 <- randomIO
+ a12 <- randomIO
+ funAddr <- mkFunM12 manyArgsM12
+ print (callFunM12 funAddr a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 ==
+ manyArgsM12 a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12)
+ freeHaskellFunPtr funAddr
+
+--------------------------------------------------------------------------------
+
+rep :: String -> IO () -> IO ()
+rep msg tst = do
+ putStrLn ("Testing " ++ msg ++ "...")
+ sequence_ (replicate 10 tst)
+
+main :: IO ()
+main = do
+ setStdGen (mkStdGen 4711)
+ rep "5 Int arguments" test5I
+ rep "11 Double arguments" test11D
+ rep "11 mixed arguments" test11M
+ rep "Double as 1st argument, rest Int" testM1
+ rep "Double as 2nd argument, rest Int" testM2
+ rep "Double as 3rd argument, rest Int" testM3
+ rep "Double as 4th argument, rest Int" testM4
+ rep "Double as 5th argument, rest Int" testM5
+ rep "Double as 6th argument, rest Int" testM6
+ rep "Double as 7th argument, rest Int" testM7
+ rep "Double as 8th argument, rest Int" testM8
+ rep "Double as 9th argument, rest Int" testM9
+ rep "Double as 10th argument, rest Int" testM10
+ rep "Double as 11th argument, rest Int" testM11
+ rep "Double as 12th argument, rest Int" testM12