summaryrefslogtreecommitdiff
path: root/testsuite/tests/programs/jtod_circint/Bit.hs
diff options
context:
space:
mode:
Diffstat (limited to 'testsuite/tests/programs/jtod_circint/Bit.hs')
-rw-r--r--testsuite/tests/programs/jtod_circint/Bit.hs183
1 files changed, 183 insertions, 0 deletions
diff --git a/testsuite/tests/programs/jtod_circint/Bit.hs b/testsuite/tests/programs/jtod_circint/Bit.hs
new file mode 100644
index 0000000000..be11a6f517
--- /dev/null
+++ b/testsuite/tests/programs/jtod_circint/Bit.hs
@@ -0,0 +1,183 @@
+module Bit where
+import LogFun
+import Signal
+
+data Bit = Bot | WeakZero | WeakOne | Zero | One | Top
+ deriving (Eq,Show{-was:Text-})
+
+instance Static Bit where
+ intToSig = intToSigBit
+ sigToInt = sigToIntBit
+ showStaticSig = showBit
+
+instance Lattice Bit where
+ bot = Bot
+ top = Top
+ weakZero = WeakZero
+ weakOne = WeakOne
+ lub = lubBit
+ pass = passBit
+
+instance Signal Bit where
+ showSig = showBit
+ initial = Zero
+ zerO = Zero
+ one = One
+ tt1 = tt1Bit
+ tt2 = tt2Bit
+
+instance Log Bit where
+ dumLog = Zero
+
+tt1Bit :: TT1 -> Bit -> Bit
+tt1Bit (a,b) =
+ let p = intBit a
+ q = intBit b
+ f x = case x of
+ Bot -> Bot
+ Zero -> p
+ One -> q
+ Top -> Top
+ in f
+
+tt2Bit :: TT2 -> Bit -> Bit -> Bit
+tt2Bit (a,b,c,d) = f
+ where p = intBit a
+ q = intBit b
+ r = intBit c
+ s = intBit d
+ f x y = case x of
+ Bot -> case y of
+ Bot -> Bot
+ WeakZero -> Bot
+ WeakOne -> Bot
+ Zero -> Bot
+ One -> Bot
+ Top -> Top
+ WeakZero -> case y of
+ Bot -> Bot
+ WeakZero -> p
+ WeakOne -> q
+ Zero -> p
+ One -> q
+ Top -> Top
+ WeakOne -> case y of
+ Bot -> Bot
+ WeakZero -> r
+ WeakOne -> s
+ Zero -> r
+ One -> s
+ Top -> Top
+ Zero -> case y of
+ Bot -> Bot
+ WeakZero -> p
+ WeakOne -> q
+ Zero -> p
+ One -> q
+ Top -> Top
+ One -> case y of
+ Bot -> Bot
+ WeakZero -> r
+ WeakOne -> s
+ Zero -> r
+ One -> s
+ Top -> Top
+ Top -> case y of
+ Bot -> Top
+ WeakZero -> Top
+ WeakOne -> Top
+ Zero -> Top
+ One -> Top
+ Top -> Top
+
+lubBit :: Bit -> Bit -> Bit
+lubBit a b =
+ case a of
+ Bot -> case b of
+ Bot -> Bot
+ WeakZero -> WeakZero
+ WeakOne -> WeakOne
+ Zero -> Zero
+ One -> One
+ Top -> Top
+ WeakZero -> case b of
+ Bot -> Zero
+ WeakZero -> WeakZero
+ WeakOne -> Top
+ Zero -> Zero
+ One -> One
+ Top -> Top
+ WeakOne -> case b of
+ Bot -> WeakOne
+ WeakZero -> Top
+ WeakOne -> WeakOne
+ Zero -> Zero
+ One -> One
+ Top -> Top
+ Zero -> case b of
+ Bot -> Zero
+ WeakZero -> Zero
+ WeakOne -> Zero
+ Zero -> Zero
+ One -> Top
+ Top -> Top
+ One -> case b of
+ Bot -> One
+ WeakZero -> One
+ WeakOne -> One
+ Zero -> Top
+ One -> One
+ Top -> Top
+ Top -> case b of
+ Bot -> Top
+ WeakZero -> Top
+ WeakOne -> Top
+ Zero -> Top
+ One -> Top
+ Top -> Top
+
+showBit :: Bit -> String
+showBit Bot = "v"
+showBit WeakZero = "z"
+showBit WeakOne = "o"
+showBit Zero = "0"
+showBit One = "1"
+showBit Top = "^"
+
+
+intBit :: Int -> Bit
+intBit 0 = Zero
+intBit 1 = One
+intBit x =
+ error ("\nintBit received bad Int " ++ show x ++ ".\n")
+
+intToSigBit :: Int -> Bit
+intToSigBit i
+ | i==0 = Zero
+ | i==1 = One
+ | i==8 = Bot
+ | i==9 = Top
+
+sigToIntBit :: Bit -> Int
+sigToIntBit Zero = 0
+sigToIntBit One = 1
+sigToIntBit Bot = 8
+sigToIntBit Top = 9
+
+passBit :: Bit -> Bit -> Bit
+passBit c a =
+ case c of
+ Bot -> Bot
+ Zero -> Bot
+ One -> a
+ Top -> Top
+
+instance Num Bit where
+ (+) = or2
+ (*) = and2
+ a - b = xor a b
+ negate = inv
+ abs = error "abs not defined for Signals"
+ signum = error "signum not defined for Signals"
+ fromInteger = error "fromInteger not defined for Signals"
+