diff --git a/hw-streams.cabal b/hw-streams.cabal
--- a/hw-streams.cabal
+++ b/hw-streams.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hw-streams
-version:        0.0.0.7
+version:        0.0.0.8
 synopsis:       Primitive functions and data types
 description:    Primitive functions and data types.
 category:       Data
@@ -92,7 +92,8 @@
   if flag(bounds-checking-enabled)
     cpp-options: -DBOUNDS_CHECKING_ENABLED
   other-modules:
-      HaskellWorks.Data.Stream.Vector.StorableSpec
+      HaskellWorks.Data.Streams.Stream.OpsSpec
+      HaskellWorks.Data.Streams.Vector.StorableSpec
       Test.Gen
   default-language: Haskell2010
 
diff --git a/src/HaskellWorks/Data/Streams/Stream/Ops.hs b/src/HaskellWorks/Data/Streams/Stream/Ops.hs
--- a/src/HaskellWorks/Data/Streams/Stream/Ops.hs
+++ b/src/HaskellWorks/Data/Streams/Stream/Ops.hs
@@ -38,4 +38,7 @@
         splice a b = (a .>. o) .|. (b .<. (64 - o))
 
 add :: Stream Word64 -> Stream Word64 -> Stream Word64
-add = HW.zipWithState (\a b c -> let d = a + b in (c + d, d `ltWord` a)) 0
+add = HW.zipWithState (\a b c ->
+    let d = a + b + c     in
+    let e = d `ltWord` a  in
+    (d, e)) 0
diff --git a/test/HaskellWorks/Data/Stream/Vector/StorableSpec.hs b/test/HaskellWorks/Data/Stream/Vector/StorableSpec.hs
deleted file mode 100644
--- a/test/HaskellWorks/Data/Stream/Vector/StorableSpec.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-{-# LANGUAGE OverloadedStrings   #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module HaskellWorks.Data.Stream.Vector.StorableSpec
-  ( spec
-  ) where
-
-import HaskellWorks.Hspec.Hedgehog
-import Hedgehog
-import Test.Hspec
-
-import qualified Data.Vector.Storable                      as DVS
-import qualified HaskellWorks.Data.Streams.Vector.Storable as SDVS
-import qualified Hedgehog.Gen                              as G
-import qualified Hedgehog.Range                            as R
-import qualified Test.Gen                                  as G
-
-{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
-
-spec :: Spec
-spec = describe "HaskellWorks.Data.Stream.Vector.StorableSpec" $ do
-  it "map" $ requireProperty $ do
-    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
-
-    DVS.map (+ 1) v === SDVS.map (+ 1) v
-  it "foldl" $ requireProperty $ do
-    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
-
-    DVS.foldl (+) 0 v === SDVS.foldl (+) 0 v
-  it "sum" $ requireProperty $ do
-    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
-
-    DVS.sum v === SDVS.sum v
diff --git a/test/HaskellWorks/Data/Streams/Stream/OpsSpec.hs b/test/HaskellWorks/Data/Streams/Stream/OpsSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/HaskellWorks/Data/Streams/Stream/OpsSpec.hs
@@ -0,0 +1,28 @@
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module HaskellWorks.Data.Streams.Stream.OpsSpec
+  ( spec
+  ) where
+
+import Data.Semigroup              ((<>))
+import Data.Word
+import HaskellWorks.Hspec.Hedgehog
+import Hedgehog
+import Test.Hspec
+
+import qualified Data.Vector.Storable                      as DVS
+import qualified HaskellWorks.Data.Streams.Stream.Ops      as S
+import qualified HaskellWorks.Data.Streams.Vector.Storable as SDVS
+
+{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
+
+spec :: Spec
+spec = describe "HaskellWorks.Data.Stream.Vector.StorableSpec" $ do
+  it "map" $ requireTest $ do
+    u <- forAll $ pure $ DVS.fromList $ replicate 4 (0xffffffffffffffff :: Word64)
+    v <- forAll $ pure $ DVS.fromList $ [0x0000000000000001 :: Word64] <> replicate 3 0
+
+    let result = SDVS.unstream (S.add (SDVS.stream u) (SDVS.stream v))
+
+    result === DVS.replicate 4 (0x0000000000000000 :: Word64)
diff --git a/test/HaskellWorks/Data/Streams/Vector/StorableSpec.hs b/test/HaskellWorks/Data/Streams/Vector/StorableSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/HaskellWorks/Data/Streams/Vector/StorableSpec.hs
@@ -0,0 +1,33 @@
+{-# LANGUAGE OverloadedStrings   #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module HaskellWorks.Data.Streams.Vector.StorableSpec
+  ( spec
+  ) where
+
+import HaskellWorks.Hspec.Hedgehog
+import Hedgehog
+import Test.Hspec
+
+import qualified Data.Vector.Storable                      as DVS
+import qualified HaskellWorks.Data.Streams.Vector.Storable as SDVS
+import qualified Hedgehog.Gen                              as G
+import qualified Hedgehog.Range                            as R
+import qualified Test.Gen                                  as G
+
+{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
+
+spec :: Spec
+spec = describe "HaskellWorks.Data.Stream.Vector.StorableSpec" $ do
+  it "map" $ requireProperty $ do
+    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
+
+    DVS.map (+ 1) v === SDVS.map (+ 1) v
+  it "foldl" $ requireProperty $ do
+    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
+
+    DVS.foldl (+) 0 v === SDVS.foldl (+) 0 v
+  it "sum" $ requireProperty $ do
+    v <- forAll $ G.vector (R.linear 0 100) (G.word64 (R.constantBounded))
+
+    DVS.sum v === SDVS.sum v
diff --git a/test/Test/Gen.hs b/test/Test/Gen.hs
--- a/test/Test/Gen.hs
+++ b/test/Test/Gen.hs
@@ -1,9 +1,7 @@
 module Test.Gen where
 
-import Data.Vector.Storable        (Storable)
-import HaskellWorks.Hspec.Hedgehog
+import Data.Vector.Storable (Storable)
 import Hedgehog
-import Test.Hspec
 
 import qualified Data.Vector.Storable as DVS
 import qualified Hedgehog.Gen         as G
