diff --git a/src/Streaming/Base64.hs b/src/Streaming/Base64.hs
--- a/src/Streaming/Base64.hs
+++ b/src/Streaming/Base64.hs
@@ -12,8 +12,9 @@
 import           Data.Char
 import           Data.Function
 import           Data.Maybe
-import           Data.Semigroup
 import           Data.Word
+import           Prelude ()
+import           Prelude.Compat
 import           Streaming.Prelude         (Of (..), Stream, cons, for, next,
                                             yield)
 import qualified Streaming.Prelude         as Stream
diff --git a/streaming-base64.cabal b/streaming-base64.cabal
--- a/streaming-base64.cabal
+++ b/streaming-base64.cabal
@@ -1,16 +1,14 @@
-cabal-version: 2.2
--- cabal-version:       >=1.10
 name:                streaming-base64
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Streaming conversion from/to base64
 -- description:
--- license:             PublicDomain
-license:             CC0-1.0
-author:              koral
-maintainer:          koral@mailoo.org
+license:             PublicDomain
+author:              chahine.moreau@gmail.com
+maintainer:          chahine.moreau@gmail.com
 -- category:
 build-type:          Simple
 -- extra-source-files:  ChangeLog.md
+cabal-version:       >=1.10
 
 source-repository head
     type: git
@@ -21,14 +19,14 @@
     Streaming.Base64
   -- other-modules:
   -- other-extensions:
-  build-depends:       base >=4.9 && <5, safe-exceptions, streaming, streaming-bytestring, transformers
+  build-depends:       base >=4.7 && <5, base-compat-batteries, safe-exceptions, streaming, streaming-bytestring, transformers
   hs-source-dirs:      src
   default-language:    Haskell2010
 
-test-suite unit-tests
+test-suite golden-tests
   type: exitcode-stdio-1.0
-  main-is: UnitTests.hs
-  build-depends: base >=4.9 && <5, streaming-base64, streaming-bytestring, tasty, tasty-hunit
+  main-is: GoldenTests.hs
+  build-depends: base >=4.7 && <5, base-compat-batteries, filepath, streaming-base64, streaming-bytestring, streaming-with, tasty, tasty-golden
   default-language: Haskell2010
   hs-source-dirs: test
   -- other-modules:
diff --git a/test/GoldenTests.hs b/test/GoldenTests.hs
new file mode 100644
--- /dev/null
+++ b/test/GoldenTests.hs
@@ -0,0 +1,32 @@
+{-# LANGUAGE OverloadedStrings #-}
+import qualified Streaming.Base64          as Base64
+
+import           Control.Arrow
+import           Control.Monad
+import           Data.ByteString.Streaming (ByteString)
+import qualified Data.ByteString.Streaming as Bytes
+import           Streaming.With
+import           System.FilePath
+import           Prelude ()
+import           Prelude.Compat
+import           Test.Tasty
+import           Test.Tasty.Golden         (findByExtension, goldenVsString)
+
+main :: IO ()
+main = defaultMain =<< do
+  decodedFiles <- findByExtension [".decoded"] "."
+  encodedFiles <- findByExtension [".encoded"] "."
+
+  return $ testGroup "Golden tests" $ map encodingTest decodedFiles <> map decodingTest encodedFiles
+
+encodingTest :: FilePath -> TestTree
+encodingTest decodedFile = goldenVsString name encodedFile f where
+  encodedFile = replaceExtension decodedFile "encoded"
+  name = "Encoding " <> dropExtension decodedFile
+  f = withBinaryFileContents decodedFile (Bytes.toLazy_ <<< Bytes.pack <<< Base64.encode)
+
+decodingTest :: FilePath -> TestTree
+decodingTest encodedFile = goldenVsString name decodedFile f where
+  decodedFile = replaceExtension encodedFile "decoded"
+  name = "Decoding " <> dropExtension encodedFile
+  f = withBinaryFileContents encodedFile (Bytes.toLazy_ <<< Base64.decode <<< Bytes.unpack)
diff --git a/test/UnitTests.hs b/test/UnitTests.hs
deleted file mode 100644
--- a/test/UnitTests.hs
+++ /dev/null
@@ -1,31 +0,0 @@
-{-# LANGUAGE OverloadedStrings #-}
-import qualified Streaming.Base64          as Base64
-
-import           Control.Arrow
-import           Control.Monad
-import           Data.ByteString.Streaming (ByteString)
-import qualified Data.ByteString.Streaming as Bytes
-import           Test.Tasty
-import           Test.Tasty.HUnit
-
-main :: IO ()
-main = defaultMain $ testGroup "Unit tests"
-  [ encodeCase
-  , decodeCase
-  ]
-
-examples =
-  [ ("Man is distinguished, not only by his reason, but by this singular passion from other animals, which is a lust of the mind, that by a perseverance of delight in the continued and indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.",   "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlzIHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2YgdGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGludWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRoZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=")
-  ]
-
-encodeCase :: TestTree
-encodeCase = testCase "encode" $ do
-  forM_ examples $ \(input, expected) -> do
-    result <- (Bytes.toLazy_ <<< Bytes.pack <<< Base64.encode <<< Bytes.fromLazy) input
-    result @?= expected
-
-decodeCase :: TestTree
-decodeCase = testCase "decode" $ do
-  forM_ examples $ \(expected, input) -> do
-    result <- (Bytes.toLazy_ <<< Base64.decode <<< Bytes.unpack <<< Bytes.fromLazy) input
-    result @?= expected
