diff --git a/opentheory.cabal b/opentheory.cabal
--- a/opentheory.cabal
+++ b/opentheory.cabal
@@ -1,5 +1,5 @@
 name: opentheory
-version: 1.195
+version: 1.196
 category: Formal Methods
 synopsis: The standard theory library
 license: MIT
@@ -10,30 +10,25 @@
 maintainer: Joe Leslie-Hurd <joe@gilith.com>
 description:
   The standard theory library - this package was automatically generated
-  from the OpenTheory package base-1.195
+  from the OpenTheory package base-1.196
 
 library
   build-depends:
     base >= 4.0 && < 5.0,
     QuickCheck >= 2.4.0.1 && < 3.0,
-    opentheory-primitive >= 1.3 && < 2.0
-
+    opentheory-primitive >= 1.4 && < 2.0
   hs-source-dirs: src
-
   ghc-options: -Wall
-
   exposed-modules:
-    OpenTheory.List
+    OpenTheory.List,
     OpenTheory.Natural
 
-executable opentheory-test
+test-suite opentheory-test
+  type: exitcode-stdio-1.0
   build-depends:
     base >= 4.0 && < 5.0,
     QuickCheck >= 2.4.0.1 && < 3.0,
-    opentheory-primitive >= 1.3 && < 2.0
-
-  hs-source-dirs: src, testsrc
-
+    opentheory-primitive >= 1.4 && < 2.0
+  hs-source-dirs: src
   ghc-options: -Wall
-
-  main-is: Main.hs
+  main-is: Test.hs
diff --git a/src/Test.hs b/src/Test.hs
new file mode 100644
--- /dev/null
+++ b/src/Test.hs
@@ -0,0 +1,31 @@
+{- |
+module: Main
+description: The standard theory library - testing
+license: MIT
+
+maintainer: Joe Leslie-Hurd <joe@gilith.com>
+stability: provisional
+portability: portable
+-}
+module Main
+  ( main )
+where
+
+import qualified Data.Maybe as Maybe
+import OpenTheory.Primitive.Test
+
+proposition0 :: Maybe Bool -> Bool
+proposition0 x = not (Maybe.isJust x == Maybe.isNothing x)
+
+proposition1 :: Bool -> Bool -> Bool
+proposition1 a b = not (Left a == Right b)
+
+proposition2 :: [(Bool, Bool)] -> Bool
+proposition2 l = (let (x, y) = unzip l in zip x y) == l
+
+main :: IO ()
+main =
+    do check "Proposition 0:\n  !x. ~(isSome x <=> isNone x)\n  " proposition0
+       check "Proposition 1:\n  !a b. ~(left a = right b)\n  " proposition1
+       check "Proposition 2:\n  !l. (let (x, y) <- unzip l in zip x y) = l\n  " proposition2
+       return ()
diff --git a/testsrc/Main.hs b/testsrc/Main.hs
deleted file mode 100644
--- a/testsrc/Main.hs
+++ /dev/null
@@ -1,31 +0,0 @@
-{- |
-module: Main
-description: The standard theory library - testing
-license: MIT
-
-maintainer: Joe Leslie-Hurd <joe@gilith.com>
-stability: provisional
-portability: portable
--}
-module Main
-  ( main )
-where
-
-import qualified Data.Maybe as Maybe
-import OpenTheory.Primitive.Test
-
-proposition0 :: Maybe Bool -> Bool
-proposition0 x = not (Maybe.isJust x == Maybe.isNothing x)
-
-proposition1 :: Bool -> Bool -> Bool
-proposition1 a b = not (Left a == Right b)
-
-proposition2 :: [(Bool, Bool)] -> Bool
-proposition2 l = (let (x, y) = unzip l in zip x y) == l
-
-main :: IO ()
-main =
-    do check "Proposition 0:\n  !x. ~(isSome x <=> isNone x)\n  " proposition0
-       check "Proposition 1:\n  !a b. ~(left a = right b)\n  " proposition1
-       check "Proposition 2:\n  !l. (let (x, y) <- unzip l in zip x y) = l\n  " proposition2
-       return ()
