diff options
Diffstat (limited to 'testsuite/tests/concurrent/prog001/Mult.hs')
-rw-r--r-- | testsuite/tests/concurrent/prog001/Mult.hs | 237 |
1 files changed, 237 insertions, 0 deletions
diff --git a/testsuite/tests/concurrent/prog001/Mult.hs b/testsuite/tests/concurrent/prog001/Mult.hs new file mode 100644 index 0000000000..e387244f68 --- /dev/null +++ b/testsuite/tests/concurrent/prog001/Mult.hs @@ -0,0 +1,237 @@ + +module Main where + +import Arithmetic +import Trit +import Converter +import System.IO.Unsafe +import Data.Ratio +import Utilities +import Thread + +main = startM1 + +startM1 :: IO() +startM1 = do + c <- unsafeInterleaveIO (mult (rationalToGray (1%3)) (rationalToGray (0%1))) + putStrLn (show (take 100 (drop 1 c))) + + + + +mult :: Gray -> Gray -> IO Gray +mult xs ys = do + c <- threadTesting1 xs ys + case c of + + 101 -> do + --putStrLn ("In case 101") + let tx = drop 2 xs + let ty = drop 2 ys + t1 <- unsafeInterleaveIO (addition tx ty) + t2 <- unsafeInterleaveIO (addition (fl t1) (1:t1)) + t3 <- unsafeInterleaveIO (mult tx ty) + c' <- unsafeInterleaveIO (addition t2 (1:0:0:(fl t3))) + return c' + + 102 -> do + --putStrLn ("In case 102") + let tx = drop 2 xs + let ty = drop 2 ys + t1 <- unsafeInterleaveIO (addition (fl tx) ty) + t2 <- unsafeInterleaveIO (addition tx ty) + t0 <- unsafeInterleaveIO (addition t1 (1:fl t2)) + t3 <- unsafeInterleaveIO (mult tx ty) + c' <- unsafeInterleaveIO (addition t0 (1:1:0:fl t3)) + return c' + + 103 -> do + --putStrLn ("In case 103") + let tx = drop 2 xs + let ty = drop 2 ys + t <- unsafeInterleaveIO (mult (0:0:tx) (0:0:ty)) + return (fl t) + + 104 -> do + --putStrLn ("In case 104") + let tx = drop 2 xs + let ty = drop 2 ys + t <- unsafeInterleaveIO (mult (0:0:tx) (0:1:ty)) + return (fl t) + + 201 -> do + c' <- unsafeInterleaveIO (mult ys xs) + return c' + + 202 -> do + --putStrLn ("In case 202") + let tx = drop 2 xs + let ty = drop 2 ys + t1 <- unsafeInterleaveIO (addition tx ty) + t2 <- unsafeInterleaveIO (addition t1 (0:fl t1)) + t3 <- unsafeInterleaveIO (mult tx ty) + c' <- unsafeInterleaveIO (addition t2 (1:1:1:fl t3)) + return c' + + 203 -> do + --putStrLn ("In case 203") + let tx = drop 2 xs + let ty = drop 2 ys + t <- unsafeInterleaveIO (mult (0:1:tx) (0:0:ty)) + return (fl t) + + 204 -> do + --putStrLn ("In case 204") + let tx = drop 2 xs + let ty = drop 2 ys + t <- unsafeInterleaveIO (mult (0:1:tx) (0:1:ty)) + return (fl t) + + 30 -> do + --putStrLn ("In case 30") + let y1 = ys !! 0 + let tx = drop 2 xs + let ty = drop 3 ys + t1 <- unsafeInterleaveIO (addition ((f0' y1):1:ty) ((f0' y1):1:0:ty)) + t0 <- unsafeInterleaveIO (mult tx (y1: fl ty)) + let c4 = head t0 + let d4 = fl (tail t0) + c' <- unsafeInterleaveIO (addition t1 (c4:1:0:0:d4)) + return c' + + 31 -> do + --putStrLn ("In case 31") + let tx = drop 2 xs + c' <- unsafeInterleaveIO (mult (0:0:tx) ys) + return (fl c') + + 40 -> do + --putStrLn ("In case 40") + let tx = drop 2 xs + let y2 = ys !! 1 + let ty = drop 3 ys + t1 <- unsafeInterleaveIO (addition (y2:fl ty) tx) + t2 <- unsafeInterleaveIO (addition (fl t1) (1:y2:1:ty)) + t0 <- unsafeInterleaveIO (mult tx (y2:fl ty)) + let c2 = f0' (head t0) + let d2 = fl (tail t0) + c' <- unsafeInterleaveIO (addition t2 (1:c2:1:0:d2)) + return c' + + 41 -> do + --putStrLn ("In case 41") + let tx = drop 2 xs + let y2 = ys !! 1 + let ty = drop 3 ys + c' <- unsafeInterleaveIO (mult (0:0:tx) (0:y2:1:ty)) + return (fl c') + + 50 -> do + --putStrLn ("In case 50") + let tx = drop 2 xs + let y2 = ys !! 1 + let ty = drop 3 ys + t1 <- unsafeInterleaveIO (addition tx (fl (y2:fl ty))) + t2 <- unsafeInterleaveIO (addition t1 (0:y2:1:ty)) + t0 <- unsafeInterleaveIO (mult (fl tx) (y2:fl ty)) + let c1 = f0' (head t0) + let d1 = fl (tail t0) + c' <- unsafeInterleaveIO (addition t2 (1:c1:1:0:d1)) + return c' + + 51 -> do + --putStrLn ("In case 51") + let tx = drop 2 xs + let y2 = ys !! 1 + let ty = drop 3 ys + c' <- unsafeInterleaveIO (mult (0:1:tx) (0:y2:1:ty)) + return (fl c') + + + 60 -> do + --putStrLn ("In case 60") + let tx = drop 2 xs + let y1 = ys !! 0 + let ty = drop 3 ys + t1 <- unsafeInterleaveIO (addition ((f0' y1):1:ty) (y1:1:0:ty)) + t0 <- unsafeInterleaveIO (mult (fl tx) (y1:fl ty)) + let c1 = head t0 + let d1 = fl (tail t0) + c' <- unsafeInterleaveIO (addition t1 (c1:1:0:0:d1)) + return c' + + 61 -> do + --putStrLn ("In case 61") + let tx = drop 2 xs + let y1 = ys !! 0 + let ty = drop 3 ys + c' <- unsafeInterleaveIO (mult (0:1:tx) (y1:1:0:ty)) + return (fl c') + + + 70 -> do + --putStrLn ("In case 70") + c' <- unsafeInterleaveIO (mult ys xs) + return c' + + 80 -> do + --putStrLn ("In case 80") + let x2 = xs !! 1 + let y2 = ys !! 1 + let tx = drop 3 xs + let ty = drop 3 ys + t1 <- unsafeInterleaveIO (addition (x2:fl tx) (y2:fl ty)) + t0 <- unsafeInterleaveIO (mult (x2:fl tx) (y2:fl ty)) + let c1 = head (fl t1) + let d1 = tail (fl t1) + let c2 = f0' (head t0) + let d2 = fl (tail t0) + c' <- unsafeInterleaveIO (addition (c1:1:(fl d1)) (1:c2:1:0:d2)) + return c' + + 81 -> do + --putStrLn ("In case 81") + let x2 = xs !! 1 + let y2 = ys !! 1 + let tx = drop 3 xs + let ty = drop 3 ys + c' <- unsafeInterleaveIO (mult (0:x2:1:tx) (0:y2:1:ty)) + return (fl c') + + 90 -> do + --putStrLn ("In case 90") + let x2 = xs!!1 + let y1 = ys!!0 + let tx = drop 3 xs + let ty = drop 3 ys + t0 <- unsafeInterleaveIO (mult (x2:fl tx) (y1:fl ty)) + let c1 = head t0 + let d1 = fl (tail t0) + c' <- unsafeInterleaveIO (addition ((f0' y1):1:0:ty) (c1:1:0:0:d1)) + return c' + + 91 -> do + --putStrLn ("In case 91") + let x2 = xs!!1 + let y1 = ys!!0 + let tx = drop 3 xs + let ty = drop 3 ys + c' <- unsafeInterleaveIO (mult (0:x2:1:tx) (y1:1:0:ty)) + return (fl c') + + 100 -> do + --putStrLn ("In case 100") + let x1 = head xs + let y1 = head ys + let tx = drop 3 xs + let ty = drop 3 ys + t0 <- unsafeInterleaveIO (mult (x1:fl tx) (y1:fl ty)) + let c4 = head t0 + let d4 = fl (tail t0) + return (c4:1:0:0:0:d4) + + + +f0' 0 = 1 +f0' 1 = 0 + |