[commit: ghc] wip/ttypeable: testsuite: Add test of Typeable Binary instances (88ae3cd)

git at git.haskell.org git at git.haskell.org
Fri Jul 29 16:29:18 UTC 2016


Repository : ssh://git@git.haskell.org/ghc

On branch  : wip/ttypeable
Link       : http://ghc.haskell.org/trac/ghc/changeset/88ae3cda1d254522bc3767072e3f80d18a241fd0/ghc

>---------------------------------------------------------------

commit 88ae3cda1d254522bc3767072e3f80d18a241fd0
Author: Ben Gamari <ben at smart-cactus.org>
Date:   Fri Jul 22 13:13:36 2016 +0200

    testsuite: Add test of Typeable Binary instances


>---------------------------------------------------------------

88ae3cda1d254522bc3767072e3f80d18a241fd0
 .../typecheck/should_run/TestTypeableBinary.hs     | 37 ++++++++++++++++++++++
 .../typecheck/should_run/TestTypeableBinary.stdout | 15 +++++++++
 testsuite/tests/typecheck/should_run/all.T         |  1 +
 3 files changed, 53 insertions(+)

diff --git a/testsuite/tests/typecheck/should_run/TestTypeableBinary.hs b/testsuite/tests/typecheck/should_run/TestTypeableBinary.hs
new file mode 100644
index 0000000..e427c13
--- /dev/null
+++ b/testsuite/tests/typecheck/should_run/TestTypeableBinary.hs
@@ -0,0 +1,37 @@
+{-# LANGUAGE MagicHash #-}
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE PolyKinds #-}
+
+import qualified Data.ByteString as BS
+import Type.Reflection
+import Data.Binary
+import GHCi.TH.Binary ()
+
+import GHC.Exts
+import Data.Kind
+import Data.Proxy
+
+testRoundtrip :: Typeable a => TypeRep a -> IO ()
+testRoundtrip rep
+  | rep /= rep' = putStrLn $ "bad: " ++ show rep ++ " /= " ++ show rep'
+  | otherwise   = putStrLn $ "good: " ++ show rep
+  where
+    rep' = decode (encode rep)
+
+main :: IO ()
+main = do
+    testRoundtrip (typeRep :: TypeRep Int)
+    testRoundtrip (typeRep :: TypeRep Int#)
+    testRoundtrip (typeRep :: TypeRep IO)
+    testRoundtrip (typeRep :: TypeRep Maybe)
+    testRoundtrip (typeRep :: TypeRep TYPE)
+    testRoundtrip (typeRep :: TypeRep RuntimeRep)
+    testRoundtrip (typeRep :: TypeRep 'IntRep)
+    testRoundtrip (typeRep :: TypeRep (->))
+    testRoundtrip (typeRep :: TypeRep (Proxy Int))
+    testRoundtrip (typeRep :: TypeRep (Proxy Int#))
+    testRoundtrip (typeRep :: TypeRep Type)
+    testRoundtrip (typeRep :: TypeRep (Int -> Int))
+    testRoundtrip (typeRep :: TypeRep 5)
+    testRoundtrip (typeRep :: TypeRep "hello world")
+    testRoundtrip (typeRep :: TypeRep ('Just 5))
diff --git a/testsuite/tests/typecheck/should_run/TestTypeableBinary.stdout b/testsuite/tests/typecheck/should_run/TestTypeableBinary.stdout
new file mode 100644
index 0000000..7e32096
--- /dev/null
+++ b/testsuite/tests/typecheck/should_run/TestTypeableBinary.stdout
@@ -0,0 +1,15 @@
+good: (Int)
+good: Int# :: ((TYPE :: ((RuntimeRep) -> (*))) ('IntRep :: (RuntimeRep)))
+good: IO :: ((*) -> (*))
+good: Maybe :: ((*) -> (*))
+good: TYPE :: ((RuntimeRep) -> (*))
+good: (RuntimeRep)
+good: 'IntRep :: (RuntimeRep)
+good: -> :: ((*) -> ((*) -> (*)))
+good: ((Proxy :: ((*) -> (*))) (Int))
+good: ((Proxy :: (((TYPE :: ((RuntimeRep) -> (*))) ('IntRep :: (RuntimeRep))) -> (*))) (Int# :: ((TYPE :: ((RuntimeRep) -> (*))) ('IntRep :: (RuntimeRep)))))
+good: (*)
+good: ((Int) -> (Int))
+good: 5 :: (Nat)
+good: "hello world" :: (Symbol)
+good: ('Just :: ((Nat) -> ((Maybe :: ((*) -> (*))) (Nat)))) (5 :: (Nat)) :: ((Maybe :: ((*) -> (*))) (Nat))
diff --git a/testsuite/tests/typecheck/should_run/all.T b/testsuite/tests/typecheck/should_run/all.T
index c2b277d..f51dbe3 100755
--- a/testsuite/tests/typecheck/should_run/all.T
+++ b/testsuite/tests/typecheck/should_run/all.T
@@ -117,3 +117,4 @@ test('TypeOf', normal, compile_and_run, [''])
 test('TypeRep', normal, compile_and_run, [''])
 test('T11120', normal, compile_and_run, [''])
 test('KindInvariant', normal, ghci_script, ['KindInvariant.script'])
+test('TestTypeableBinary', normal, compile_and_run, [''])



More information about the ghc-commits mailing list