Add travis file
authorJoachim Breitner <mail@joachim-breitner.de>
Tue, 7 Oct 2014 11:35:52 +0000 (13:35 +0200)
committerJoachim Breitner <mail@joachim-breitner.de>
Tue, 7 Oct 2014 11:35:52 +0000 (13:35 +0200)
.travis.yml [new file with mode: 0644]
Test.hs [new file with mode: 0644]
ghc-heap-view.cabal

diff --git a/.travis.yml b/.travis.yml
new file mode 100644 (file)
index 0000000..666ab44
--- /dev/null
@@ -0,0 +1,48 @@
+# NB: don't set `language: haskell` here
+
+# The following enables several GHC versions to be tested; often it's enough to test only against the last release in a major GHC version. Feel free to omit lines listings versions you don't need/want testing for.
+env:
+# - GHCVER=6.12.3
+# - GHCVER=7.0.1
+# - GHCVER=7.0.2
+# - GHCVER=7.0.3
+# - GHCVER=7.0.4
+# - GHCVER=7.2.1
+# - GHCVER=7.2.2
+# - GHCVER=7.4.1
+# - GHCVER=7.4.2
+ - GHCVER=7.6.1
+ - GHCVER=7.6.2
+ - GHCVER=7.6.3
+ - GHCVER=7.8.3
+# - GHCVER=head  # see section about GHC HEAD snapshots
+
+# Note: the distinction between `before_install` and `install` is not important.
+before_install:
+ - sudo add-apt-repository -y ppa:hvr/ghc
+ - sudo apt-get update
+ - sudo apt-get install cabal-install-1.18 ghc-$GHCVER happy
+ - sudo apt-get install libxss-dev
+ - export PATH=/opt/ghc/$GHCVER/bin:$PATH
+
+install:
+ - cabal-1.18 update
+ - cabal-1.18 install --only-dependencies --enable-tests --enable-benchmarks
+
+# Here starts the actual work to be performed for the package under test; any command which exits with a non-zero exit code causes the build to fail.
+script:
+ - cabal-1.18 configure --enable-tests --enable-benchmarks -v2  # -v2 provides useful information for debugging
+ - cabal-1.18 build   # this builds all libraries and executables (including tests/benchmarks)
+ - cabal-1.18 test
+ - cabal-1.18 check
+ - cabal-1.18 sdist   # tests that a source-distribution can be generated
+
+# The following scriptlet checks that the resulting source distribution can be built & installed
+ - export SRC_TGZ=$(cabal-1.18 info . | awk '{print $2 ".tar.gz";exit}') ;
+   cd dist/;
+   if [ -f "$SRC_TGZ" ]; then
+      cabal-1.18 install "$SRC_TGZ";
+   else
+      echo "expected '$SRC_TGZ' not found";
+      exit 1;
+   fi
diff --git a/Test.hs b/Test.hs
new file mode 100644 (file)
index 0000000..767b97b
--- /dev/null
+++ b/Test.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE MagicHash, BangPatterns #-}
+
+import GHC.Exts
+import GHC.HeapView
+import Control.DeepSeq
+
+import System.Environment
+import System.Mem
+
+import Control.Monad
+
+l = [1,2,3]
+
+main = do
+    args <- map length `fmap` getArgs
+    let l2 = 4:l
+    (l ++ l2 ++ args) `deepseq` return ()
+
+    let x = l ++ l2 ++ args
+    performGC
+    cl <- getClosureData l
+    case cl of ConsClosure {} -> return ()
+    unless (name cl == ":") $ do
+        fail "Wrong name"
+
+    cl <- getClosureData l2
+    case cl of ConsClosure {} -> return ()
+    eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox l)
+    unless eq $ do
+        fail "Doesnt reference l"
+
+    cl <- getClosureData args
+    unless (tipe (info cl) == CONSTR_NOCAF_STATIC) $ do
+        fail "Not a CONSTR_NOCAF_STATIC"
+
+    cl <- getClosureData x
+    unless (tipe (info cl) == THUNK_2_0) $ do
+        fail "Not a THUNK_2_0"
+
+
+    let !(I# m) = length args + 42
+    let !(I# m') = length args + 23
+    let f = \x n -> take (I# m + I# x) n ++ args
+        t = f m' l2
+
+    cl <- getClosureData f
+    unless (tipe (info cl) == FUN_1_1) $ do
+        fail "Not a FUN_1_1"
+    unless (dataArgs cl == [42]) $ do
+        fail "Wrong data arg"
+    cl <- getClosureData t
+    unless (tipe (info cl) == THUNK) $ do
+        fail "Not a THUNK"
+    unless (dataArgs cl == [23]) $ do
+        fail "Wrong data arg"
+    eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox f)
+    unless eq $ do
+        fail "t doesnt reference f"
+
+    let x = id (:) () x
+    x `seq` return ()
+    performGC
+    cl <- getClosureData x
+    case cl of ConsClosure {} -> return ()
+    eq <- areBoxesEqual (ptrArgs cl !! 1) (asBox x)
+    unless eq $ do
+        fail "x doesnt reference itself"
index 88aeee7..f7396f1 100644 (file)
@@ -79,9 +79,18 @@ Library
   C-Sources: cbits/HeapView.c cbits/HeapViewPrim.cmm
   Hs-source-dirs: src/
   Ghc-options: -Wall -dcmm-lint
+  default-language: Haskell2010
 
   if flag(prim-supports-any)
     cpp-options: -DPRIM_SUPPORTS_ANY
+test-suite Test
+  type:           exitcode-stdio-1.0
+  main-is:        Test.hs
+  build-depends:  base, ghc-heap-view, deepseq
+  default-language: Haskell2010
+  Ghc-options:    -O0
+
   
 source-repository head
   type:     git