diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for cabal-detailed-quickcheck
 
+## 0.3.0.0 — 2026-03-30
+
+* Updated dependencies
+* Updated language to GHC2021
+* Added tests
+
 ## 0.2.0.1 — 2022-10-29
 
 * Broaden version bounds
diff --git a/cabal-detailed-quickcheck.cabal b/cabal-detailed-quickcheck.cabal
--- a/cabal-detailed-quickcheck.cabal
+++ b/cabal-detailed-quickcheck.cabal
@@ -1,6 +1,6 @@
-cabal-version:      2.4
+cabal-version:      3.4
 name:               cabal-detailed-quickcheck
-version:            0.2.0.1
+version:            0.3.0.0
 synopsis:           QuickCheck for Cabal tests
 description:        Turn QuickCheck properties into detailed Cabal tests
 homepage:           https://github.com/schuelermine/cabal-detailed-quickcheck
@@ -14,15 +14,30 @@
 extra-source-files: CHANGELOG.md
                     README.md
 
+tested-with:        GHC == 9.10.3
+
+common basic-config
+    build-depends:      
+        base >=4 && <5,
+        QuickCheck >=2.14.2 && <2.19,
+        Cabal >=3.6 && <3.17
+    default-language:   GHC2021
+
 library
+    import:             basic-config
     exposed-modules:    Distribution.TestSuite.QuickCheck
-    build-depends:      
-        base >=4&&<5,
-        QuickCheck ^>=2.14.2,
-        Cabal >=3.6&&<3.9
     hs-source-dirs:     lib
-    default-language:   Haskell2010
 
+test-suite test
+    import:             basic-config
+    hs-source-dirs:     tests
+    build-depends:      cabal-detailed-quickcheck
+    type:               detailed-0.9
+    test-module:        Tests
+    -- | Tests require /dev/null to exist
+    if !os(linux)
+        buildable:      False
+
 source-repository head
     type:               git
     location:           https://github.com/schuelermine/cabal-detailed-quickcheck.git
@@ -31,4 +46,4 @@
 source-repository this
     type:               git
     location:           https://github.com/schuelermine/cabal-detailed-quickcheck.git
-    tag:                0.2.0.1
+    tag:                0.3.0.0
diff --git a/lib/Distribution/TestSuite/QuickCheck.hs b/lib/Distribution/TestSuite/QuickCheck.hs
--- a/lib/Distribution/TestSuite/QuickCheck.hs
+++ b/lib/Distribution/TestSuite/QuickCheck.hs
@@ -1,7 +1,5 @@
 {-# LANGUAGE BlockArguments #-}
-{-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE TypeApplications #-}
 
 -- |
 -- Module:       Distribution.TestSuite.QuickCheck
diff --git a/tests/Tests.hs b/tests/Tests.hs
new file mode 100644
--- /dev/null
+++ b/tests/Tests.hs
@@ -0,0 +1,48 @@
+{-# LANGUAGE BlockArguments #-}
+{-# LANGUAGE ViewPatterns #-}
+module Tests where
+
+import Data.Maybe (maybeToList)
+import Distribution.TestSuite (Test)
+import Distribution.TestSuite.QuickCheck
+import System.CPUTime (getCPUTime)
+import System.IO (hFlush, withFile, IOMode(WriteMode))
+import Test.QuickCheck
+  ( Positive,
+    Testable,
+    getPositive,
+    ioProperty,
+    (===), verbose,
+  )
+
+tests :: IO [Test]
+tests =
+  return [
+    mkPT
+      PropertyTest
+        { name = "law-of-identity",
+          tags = [],
+          property = \(i :: Integer) -> i === i
+        },
+    mkPT
+      PropertyTest
+        { name = "monotonicity-of-addition",
+          tags = [],
+          property = \(getPositive -> a :: Integer) (getPositive -> b :: Integer) ->
+            0 <= a + b
+        }, mkPT
+      PropertyTest
+        { name = "monotinicity-time",
+          tags = [],
+          property = ioProperty do
+            timeBefore <- getCPUTime
+            withFile "/dev/null" WriteMode \handle -> do
+              mapM_ print [1..10000]
+              hFlush handle
+            timeAfter <- getCPUTime
+            return (timeBefore < timeAfter)
+        }
+  ]
+  where
+    mkPT :: Testable prop => PropertyTest prop -> Test
+    mkPT = getPropertyTestWith (stdTestArgs {verbosity = Verbose})
