summaryrefslogtreecommitdiff
path: root/testsuite/tests/concurrent/prog001/Mult.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/concurrent/prog001/Mult.hs')
-rw-r--r--testsuite/tests/concurrent/prog001/Mult.hs237
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
+