diff --git a/hw-prim.cabal b/hw-prim.cabal
--- a/hw-prim.cabal
+++ b/hw-prim.cabal
@@ -1,5 +1,5 @@
 name:                   hw-prim
-version:                0.0.3.3
+version:                0.0.3.4
 synopsis:               Primitive functions and data types
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-prim#readme
diff --git a/src/HaskellWorks/Data/Search.hs b/src/HaskellWorks/Data/Search.hs
--- a/src/HaskellWorks/Data/Search.hs
+++ b/src/HaskellWorks/Data/Search.hs
@@ -7,7 +7,7 @@
 binarySearch :: (Ord a, Integral n) => a -> (n -> a) -> n -> n -> n
 binarySearch w f p q = if p + 1 >= q
   then p
-  else let m = p + q `div` 2 in
+  else let m = (p + q) `div` 2 in
     if w <= f m
       then binarySearch w f p m
       else binarySearch w f m q
diff --git a/test/HaskellWorks/Data/SearchSpec.hs b/test/HaskellWorks/Data/SearchSpec.hs
--- a/test/HaskellWorks/Data/SearchSpec.hs
+++ b/test/HaskellWorks/Data/SearchSpec.hs
@@ -1,11 +1,14 @@
+{-# LANGUAGE ScopedTypeVariables #-}
 
 module HaskellWorks.Data.SearchSpec (spec) where
 
+import           HaskellWorks.Data.Search
 import           Test.Hspec
 
-{-# ANN module ("HLint: ignore Redundant do" :: String) #-}
+{-# ANN module ("HLint: Ignore Redundant do" :: String) #-}
 
 spec :: Spec
-spec = describe "HaskellWorks.Data.BitReadSpec" $ do
+spec = describe "HaskellWorks.Data.SearchSpec" $ do
   it "No tests" $ do
-    "" `shouldBe` ""
+    let xs :: [Int] = [0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048]
+    binarySearch 513 (xs !!) 2 4 `shouldBe` 2
