diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,28 @@
 The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
 and this project adheres to the [Haskell Package Versioning Policy](https://pvp.haskell.org/).
 
+## 0.3.3.1 – 2024–03–11
+
+### Added
+
+- The tests for this package were previously in their own `yaya-unsafe-test` package, but that has been folded into this package. Presumably, they were only separated to parallel the separation between `yaya` and `yaya-test`, which had better motivation.
+
+## 0.3.3.0
+
+Unknown changes.
+
+## 0.3.2.0
+
+Unknown changes.
+
+## 0.3.1.0
+
+Unknown changes.
+
+## 0.3.0.0
+
+Unknown changes.
+
 ## 0.2.0.2 – 2023–12–21
 
 ### Changed
diff --git a/tests/Test/Fold.hs b/tests/Test/Fold.hs
new file mode 100644
--- /dev/null
+++ b/tests/Test/Fold.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE TemplateHaskell #-}
+{-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE Unsafe #-}
+{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
+
+module Test.Fold (tests) where
+
+import safe "base" Control.Category (Category (id))
+import safe "base" Control.Monad ((=<<))
+import safe "base" Data.Bool (Bool)
+import safe "base" Data.Function (($))
+import safe "base" Data.Int (Int)
+import safe "base" Data.Proxy (Proxy (Proxy))
+import safe "base" System.IO (IO)
+import safe "hedgehog" Hedgehog
+  ( Property,
+    checkParallel,
+    discover,
+    forAll,
+    property,
+  )
+import safe qualified "hedgehog" Hedgehog.Gen as Gen
+import safe "yaya" Yaya.Fold (Mu, Nu)
+import safe "yaya" Yaya.Fold.Common (size)
+import safe "yaya" Yaya.Fold.Native (Cofix, Fix)
+import safe "yaya-hedgehog" Yaya.Hedgehog.Expr
+  ( Expr,
+    genCofixExpr,
+    genExpr,
+    genFixExpr,
+    genMuExpr,
+    genNuExpr,
+  )
+import safe "yaya-hedgehog" Yaya.Hedgehog.Fold
+  ( corecursiveIsUnsafe,
+    law_anaRefl,
+    law_cataCancel,
+    law_cataCompose,
+    law_cataRefl,
+    recursiveIsUnsafe,
+  )
+import safe qualified "yaya-unsafe" Yaya.Unsafe.Fold.Instances ()
+
+-- TODO: For some reason HLint is complaining that TemplateHaskell is unused.
+{-# HLINT ignore "Unused LANGUAGE pragma" #-}
+
+prop_fixAnaRefl :: Property
+prop_fixAnaRefl =
+  property $ law_anaRefl =<< forAll (Gen.sized genFixExpr)
+
+-- | NB: Only in yaya-unsafe instead of yaya because the `Eq (Cofix f)` instance
+--       is needed.
+prop_cofixAnaRefl :: Property
+prop_cofixAnaRefl =
+  property $ law_anaRefl =<< forAll (Gen.sized genCofixExpr)
+
+prop_cofixCataCancel :: Property
+prop_cofixCataCancel =
+  property $ law_cataCancel size =<< forAll (genExpr (Gen.sized genCofixExpr))
+
+prop_cofixCataRefl :: Property
+prop_cofixCataRefl =
+  property $ law_cataRefl =<< forAll (Gen.sized genCofixExpr)
+
+prop_cofixCataCompose :: Property
+prop_cofixCataCompose =
+  property $
+    law_cataCompose (Proxy :: Proxy (Fix Expr)) size id
+      =<< forAll (Gen.sized genCofixExpr)
+
+-- | NB: Only in yaya-unsafe instead of yaya because the `Eq (Nu f)` instance is
+--       needed.
+prop_nuAnaRefl :: Property
+prop_nuAnaRefl =
+  property $ law_anaRefl =<< forAll (Gen.sized genNuExpr)
+
+prop_nuCataCancel :: Property
+prop_nuCataCancel =
+  property $ law_cataCancel size =<< forAll (genExpr (Gen.sized genNuExpr))
+
+prop_nuCataRefl :: Property
+prop_nuCataRefl =
+  property $ law_cataRefl =<< forAll (Gen.sized genNuExpr)
+
+prop_nuCataCompose :: Property
+prop_nuCataCompose =
+  property $
+    law_cataCompose (Proxy :: Proxy (Nu Expr)) size id
+      =<< forAll (Gen.sized genNuExpr)
+
+prop_muAnaRefl :: Property
+prop_muAnaRefl =
+  property $ law_anaRefl =<< forAll (Gen.sized genMuExpr)
+
+-- * These tests try to verify non-termination behavior.
+
+prop_muIsntCorecursive :: Property
+prop_muIsntCorecursive = corecursiveIsUnsafe (Proxy :: Proxy Mu) (1 :: Int)
+
+prop_nuIsntRecursive :: Property
+prop_nuIsntRecursive = recursiveIsUnsafe (Proxy :: Proxy Nu) (1 :: Int)
+
+-- TODO: Figure out why this hangs during compilation.
+-- prop_fixIsntCorecursive :: Property
+-- prop_fixIsntCorecursive = corecursiveIsUnsafe (Proxy :: Proxy Fix) (1 :: Int)
+
+prop_cofixIsntRecursive :: Property
+prop_cofixIsntRecursive = recursiveIsUnsafe (Proxy :: Proxy Cofix) (1 :: Int)
+
+tests :: IO Bool
+tests = checkParallel $$discover
diff --git a/tests/test.hs b/tests/test.hs
new file mode 100644
--- /dev/null
+++ b/tests/test.hs
@@ -0,0 +1,8 @@
+{-# LANGUAGE Unsafe #-}
+
+import safe "base" System.IO (IO)
+import safe "hedgehog" Hedgehog.Main (defaultMain)
+import qualified "this" Test.Fold as Fold
+
+main :: IO ()
+main = defaultMain [Fold.tests]
diff --git a/yaya-unsafe.cabal b/yaya-unsafe.cabal
--- a/yaya-unsafe.cabal
+++ b/yaya-unsafe.cabal
@@ -1,7 +1,7 @@
 cabal-version:  3.0
 
 name:        yaya-unsafe
-version:     0.3.3.0
+version:     0.3.3.1
 synopsis:    Non-total extensions to the Yaya recursion scheme library.
 description: Yaya is designed as a _total_ library. However, it is often
              expedient to use partial operations in some cases, and this package
@@ -212,3 +212,44 @@
     -- “Build_doctests.hs”, we set it here, and that means it has to match
     -- doctests.hs, which is `Unsafe`.
     Unsafe
+
+test-suite yaya-unsafe
+  import: defaults
+  type: exitcode-stdio-1.0
+  hs-source-dirs:
+    tests
+  main-is: test.hs
+  other-modules:
+    Test.Fold
+  build-depends:
+    hedgehog,
+    yaya >= 0.5.0,
+    yaya-hedgehog >= 0.2.1,
+    yaya-unsafe >= 0.3.0,
+  ghc-options:
+    -- NB: Need `-fno-omit-yields` so that `timeout` can interrupt native
+    --     recursion in non-termination tests.
+    -fno-omit-yields
+    -rtsopts
+    -threaded
+    -trust adjunctions
+    -trust array
+    -trust base-orphans
+    -trust binary
+    -trust bytestring
+    -trust containers
+    -trust distributive
+    -trust exceptions
+    -trust ghc-prim
+    -trust hashable
+    -trust lens
+    -trust profunctors
+    -trust semigroupoids
+    -trust stm
+    -trust template-haskell
+    -trust text
+    -trust transformers-compat
+    -with-rtsopts=-N
+  if impl(ghc < 9.6)
+    ghc-options:
+      -trust foldable1-classes-compat
