diff --git a/comfort-blas.cabal b/comfort-blas.cabal
--- a/comfort-blas.cabal
+++ b/comfort-blas.cabal
@@ -1,6 +1,6 @@
 Cabal-Version:    2.2
 Name:             comfort-blas
-Version:          0.0.1
+Version:          0.0.2
 License:          BSD-3-Clause
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -17,7 +17,7 @@
   Makefile
 
 Source-Repository this
-  Tag:         0.0.1
+  Tag:         0.0.2
   Type:        darcs
   Location:    https://hub.darcs.net/thielema/comfort-blas/
 
@@ -30,7 +30,9 @@
     blas-ffi >=0.0 && <0.2,
     netlib-ffi >=0.1.1 && <0.2,
     comfort-array >=0.5.2 && <0.6,
+    storablevector >=0.2 && <0.3,
     guarded-allocation >=0.0 && <0.1,
+    non-empty >=0.3.1 && <0.4,
     containers >=0.4 && <0.8,
     semigroups >=0.19 && <0.21,
     deepseq >=1.3 && <1.6,
diff --git a/src/Numeric/BLAS/Matrix/RowMajor.hs b/src/Numeric/BLAS/Matrix/RowMajor.hs
--- a/src/Numeric/BLAS/Matrix/RowMajor.hs
+++ b/src/Numeric/BLAS/Matrix/RowMajor.hs
@@ -11,12 +11,15 @@
    recomplex,
    scaleRows,
    scaleColumns,
+   multiplyVectorLeft,
+   multiplyVectorRight,
    ) where
 
+import qualified Numeric.BLAS.Matrix.Modifier as Modifier
 import qualified Numeric.BLAS.Private as Private
 import Numeric.BLAS.Matrix.Modifier (Conjugation(NonConjugated,Conjugated))
 import Numeric.BLAS.Scalar (zero, one)
-import Numeric.BLAS.Private (ShapeInt, shapeInt, ComplexShape, pointerSeq)
+import Numeric.BLAS.Private (ShapeInt, shapeInt, ComplexShape, pointerSeq, fill)
 
 import qualified Numeric.BLAS.FFI.Generic as Blas
 import qualified Numeric.Netlib.Utility as Call
@@ -33,8 +36,9 @@
 import qualified Data.Array.Comfort.Shape as Shape
 import Data.Array.Comfort.Storable.Unchecked (Array(Array))
 
-import Data.Complex (Complex)
 import Data.Foldable (forM_)
+import Data.Complex (Complex)
+import Data.Tuple.HT (swap)
 
 
 type Matrix height width = Array (height,width)
@@ -178,3 +182,63 @@
                   akPtr incaPtr betaPtr bkPtr incbPtr)
             (pointerSeq n aPtr)
             (pointerSeq n bPtr)
+
+
+multiplyVectorLeft ::
+   (Eq height, Shape.C height, Shape.C width, Class.Floating a) =>
+   Vector height a -> Matrix height width a -> Vector width a
+multiplyVectorLeft = multiplyVector nonTransposed
+
+multiplyVectorRight ::
+   (Shape.C height, Shape.C width, Eq width, Class.Floating a) =>
+   Matrix height width a -> Vector width a -> Vector height a
+multiplyVectorRight = flip $ multiplyVector transposed
+
+
+data Transposition heightA widthA heightB widthB =
+   Transposition
+      Modifier.Transposition Char
+      ((heightA,widthA) -> (heightB,widthB))
+
+transposed :: Transposition height width width height
+transposed = Transposition Modifier.Transposed 'T' swap
+
+nonTransposed :: Transposition height width height width
+nonTransposed = Transposition Modifier.NonTransposed 'N' id
+
+multiplyVector ::
+   (Shape.C heightB, Shape.C widthB, Eq heightB, Class.Floating a) =>
+   Transposition heightA widthA heightB widthB ->
+   Vector heightB a -> Matrix heightA widthA a -> Vector widthB a
+multiplyVector
+      (Transposition trans transChar assignDims)
+      (Array sh x) (Array shA a) =
+   let (height,width) = assignDims shA in
+   Array.unsafeCreateWithSize width $ \m0 yPtr -> do
+   Call.assert
+      "Matrix.RowMajor.multiplyVector: shapes mismatch"
+      (height == sh)
+   let n0 = Shape.size height
+   let (m,n) =
+         case trans of
+            Modifier.NonTransposed -> (m0,n0)
+            Modifier.Transposed -> (n0,m0)
+   if n==0
+      then fill zero m yPtr
+      else evalContT $ do
+
+      let lda = m
+      transPtr <- Call.char transChar
+      mPtr <- Call.cint m
+      nPtr <- Call.cint n
+      alphaPtr <- Call.number one
+      aPtr <- ContT $ withForeignPtr a
+      ldaPtr <- Call.leadingDim lda
+      xPtr <- ContT $ withForeignPtr x
+      incxPtr <- Call.cint 1
+      betaPtr <- Call.number zero
+      incyPtr <- Call.cint 1
+      liftIO $
+         Blas.gemv
+            transPtr mPtr nPtr alphaPtr aPtr ldaPtr
+            xPtr incxPtr betaPtr yPtr incyPtr
diff --git a/src/Numeric/BLAS/Slice.hs b/src/Numeric/BLAS/Slice.hs
--- a/src/Numeric/BLAS/Slice.hs
+++ b/src/Numeric/BLAS/Slice.hs
@@ -8,9 +8,14 @@
 import qualified Data.Traversable as Trav
 import qualified Data.List as List
 import Data.Map (Map)
+import Data.Bool.HT (if')
 
+import Text.Printf (printf)
 
+
 {- $setup
+>>> :set -XTypeOperators
+>>>
 >>> import qualified Numeric.BLAS.Slice as Slice
 >>> import Test.Slice (shapeInt)
 >>>
@@ -20,10 +25,19 @@
 >>> import Data.Array.Comfort.Shape ((::+)((::+)))
 >>> import Data.Array.Comfort.Boxed ((!))
 >>>
->>> import Control.Applicative (liftA3, pure)
+>>> import Control.Applicative (liftA2, liftA3, pure)
 >>>
 >>> import qualified Test.QuickCheck as QC
 >>>
+>>> genShape :: QC.Gen (Shape.Range Int)
+>>> genShape =
+>>>    liftA2
+>>>       (\m n -> Shape.Range (min m n) (max m n))
+>>>       QC.arbitrary QC.arbitrary
+>>>
+>>> genAppend :: QC.Gen (Shape.Range Int ::+ Shape.Range Int)
+>>> genAppend = liftA2 (::+) genShape genShape
+>>>
 >>> genSlice :: sh -> QC.Gen (Slice.T sh)
 >>> genSlice sh =
 >>>    liftA3 Slice.Cons (QC.choose (0,100)) (QC.choose (1,100)) (pure sh)
@@ -33,6 +47,14 @@
 >>>    s <- QC.choose (0,100)
 >>>    k <- QC.choose (1,100)
 >>>    return (Slice.Cons s k shA, Slice.Cons s k shB)
+>>>
+>>> type ShapeInt = Shape.ZeroBased Int
+>>>
+>>> mapShape :: (shA -> shB) -> Slice.T shA -> Slice.T shB
+>>> mapShape f (Slice.Cons s k sh) = Slice.Cons s k (f sh)
+>>>
+>>> toShapeInt :: (Shape.C sh) => Slice.T sh -> Slice.T ShapeInt
+>>> toShapeInt = mapShape (shapeInt . Shape.size)
 -}
 
 
@@ -92,6 +114,10 @@
    Cons (s + k * Shape.size sh0) k (sh1,sh)
 
 
+diagonal :: (Shape.C sh) => T (Shape.Square sh) -> T sh
+diagonal (Cons s k (Shape.Square sh)) =
+   Cons s (k * (Shape.size sh + 1)) sh
+
 cartesianFromSquare :: T (Shape.Square sh) -> T (sh,sh)
 cartesianFromSquare (Cons s k (Shape.Square sh)) = Cons s k (sh,sh)
 
@@ -141,10 +167,42 @@
 right (Cons s k (sh0::+sh1)) = Cons (s + k * Shape.size sh0) k sh1
 
 
+type ShapeInt = Shape.ZeroBased Int
+
 {- |
+prop> QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.take (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.left slice)
+-}
+take :: Int -> T ShapeInt -> T ShapeInt
+take m (Cons s k (Shape.ZeroBased n)) =
+   if m<0
+      then error $ printf "Slice.take: negative size %d" m
+      else Cons s k $ Shape.ZeroBased $ min m n
+
+{- |
+prop> QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.drop (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.right slice)
+-}
+drop :: Int -> T ShapeInt -> T ShapeInt
+drop m (Cons s k (Shape.ZeroBased n)) =
+   if m<0
+      then error $ printf "Slice.drop: negative size %d" m
+      else Cons (s + k * m) k $ Shape.ZeroBased $ max 0 $ n-m
+
+{- |
+@Slice.sub start size@
+
+prop> \(QC.NonNegative n) -> QC.forAll (genSlice $ shapeInt n) $ \slice (QC.NonNegative start) (QC.NonNegative size) -> Slice.sub start size slice == Slice.take size (Slice.drop start slice)
+-}
+sub :: Int -> Int -> T ShapeInt -> T ShapeInt
+sub start_ size (Cons s k (Shape.ZeroBased n)) =
+   if' (start_<0) (error $ printf "Slice.sub: negative start %d" start_) $
+   if' (size  <0) (error $ printf "Slice.sub: negative size %d" size) $
+   Cons (s + k * start_) k $ Shape.ZeroBased $ max 0 $ min size $ n-start_
+
+
+{- |
 prop> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeA -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeB -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeC -> QC.forAll (genSlice2 (Map.fromList $ ('a', shapeA) : ('b', shapeB) : ('c', shapeC) : []) (shapeA ::+ shapeB ::+ shapeC)) $ \(sliceMap, sliceParted) -> Slice.map sliceMap Map.! 'b' == Slice.left (Slice.right sliceParted)
 
-prop> QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> let rowShape = shapeInt numRows; columnShape = shapeInt numColumns; mapShape = Map.fromList $ map (\k -> (k, columnShape)) (Shape.indices rowShape) in QC.forAll (genSlice2 mapShape (rowShape, columnShape)) $ \(sliceMap, sliceMatrix) -> Map.toAscList (Slice.map sliceMap) == Array.toAssociations (Slice.rowArray sliceMatrix)
+prop> QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> let rowShape = shapeInt numRows; columnShape = shapeInt numColumns; mapShape_ = Map.fromList $ map (\k -> (k, columnShape)) (Shape.indices rowShape) in QC.forAll (genSlice2 mapShape_ (rowShape, columnShape)) $ \(sliceMap, sliceMatrix) -> Map.toAscList (Slice.map sliceMap) == Array.toAssociations (Slice.rowArray sliceMatrix)
 -}
 map :: (Shape.C sh) => T (Map k sh) -> Map k (T sh)
 map (Cons s k m) =
diff --git a/src/Numeric/BLAS/Vector.hs b/src/Numeric/BLAS/Vector.hs
--- a/src/Numeric/BLAS/Vector.hs
+++ b/src/Numeric/BLAS/Vector.hs
@@ -76,7 +76,7 @@
 import Control.Monad.IO.Class (liftIO)
 import Control.Monad.ST (runST)
 import Control.Monad (when, fmap, return, (=<<))
-import Control.Applicative (liftA3, (<$>), (*>))
+import Control.Applicative (liftA3, (<$>))
 
 import qualified Data.Array.Comfort.Storable.Mutable.Unchecked as UMutArray
 import qualified Data.Array.Comfort.Storable.Mutable as MutArray
diff --git a/src/Numeric/BLAS/Vector/Slice.hs b/src/Numeric/BLAS/Vector/Slice.hs
--- a/src/Numeric/BLAS/Vector/Slice.hs
+++ b/src/Numeric/BLAS/Vector/Slice.hs
@@ -7,10 +7,15 @@
    RealOf,
    ComplexOf,
    slice,
+   fromStorableVector,
    fromVector,
    toVector,
    extract,
    access,
+   replicate,
+   append,
+   Chunk, chunk,
+   concat,
    dot, inner,
    sum,
    absSum,
@@ -70,7 +75,12 @@
 
 import qualified Data.Array.Comfort.Storable.Unchecked as Array
 import qualified Data.Array.Comfort.Shape as Shape
+import qualified Data.StorableVector.Base as SVB
+import qualified Data.Foldable as Fold
+import qualified Data.NonEmpty as NonEmpty
+import qualified Data.List as List
 import Data.Array.Comfort.Storable.Unchecked (Array(Array))
+import Data.Array.Comfort.Shape ((::+)((::+)))
 
 import Text.Show (Show)
 import Data.Function (($), (.))
@@ -104,7 +114,7 @@
 >>> import qualified Data.Array.Comfort.Shape as Shape
 >>> import qualified Data.List as List
 >>> import Numeric.BLAS.Vector ((+++), (|+|))
->>> import Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
+>>> import Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne)
 >>> import Data.Array.Comfort.Shape ((::+)((::+)))
 >>> import Data.Tuple.HT (mapPair)
 >>> import Data.Complex (Complex)
@@ -149,8 +159,8 @@
 >>>    Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a ->
 >>>    VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a
 >>> takeColumn c =
->>>    VectorSlice.slice
->>>       (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector
+>>>    VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .
+>>>    VectorSlice.fromVector
 >>>
 >>> listFromSlice ::
 >>>    (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]
@@ -270,6 +280,17 @@
          <*> pure syPtr
          <*> Call.cint 1
 
+{- |
+Non-copying conversion from @StorableVector@.
+-}
+fromStorableVector :: SVB.Vector a -> T ShapeInt ShapeInt a
+fromStorableVector xs =
+   case SVB.toForeignPtr xs of
+      (buffer, s, l) ->
+         Cons
+            (Slice.Cons s 1 (Shape.ZeroBased l))
+            (Array (Shape.ZeroBased (s+l)) buffer)
+
 fromVector :: (Shape.C sh) => Vector sh a -> T sh sh a
 fromVector xs = Cons (Slice.fromShape $ Array.shape xs) xs
 
@@ -296,6 +317,64 @@
    Shape.DeferredIndex (s + k * Shape.offset ssh ix)
 (!) = access
 
+
+
+{- |
+prop> QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)
+-}
+replicate :: (Shape.C sh, Storable a) => sh -> a -> T () sh a
+replicate sh a =
+   Cons
+      (Slice.Cons 0 0 sh)
+      (Array.fromAssociations a () [])
+
+
+type ShapeInt = Shape.ZeroBased Int
+
+{- |
+>>> List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))
+[3.0,1.0,4.0,1.0,0.0,0.0,0.0]
+-}
+append ::
+   (Shape.C sliceA, Shape.C sliceB, Class.Floating a) =>
+   T shA sliceA a -> T shB sliceB a -> Vector (sliceA::+sliceB) a
+append xs ys =
+   Array.unsafeCreate (shape xs ::+ shape ys) $ \zPtr ->
+   evalContT $ do
+      let chunkX = chunk $ mapShape (Shape.ZeroBased . Shape.size) xs
+      let chunkY = chunk $ mapShape (Shape.ZeroBased . Shape.size) ys
+      nxPtr <- Call.cint $ chunkSize chunkX
+      nyPtr <- Call.cint $ chunkSize chunkY
+      (xPtr, incxPtr) <- chunkData chunkX
+      (yPtr, incyPtr) <- chunkData chunkY
+      inczPtr <- Call.cint 1
+      liftIO $ Blas.copy nxPtr xPtr incxPtr zPtr inczPtr
+      liftIO $ Blas.copy nyPtr yPtr incyPtr
+                     (advancePtr zPtr $ chunkSize chunkX) inczPtr
+
+data Chunk a =
+   Chunk {
+      chunkSize :: Int,
+      chunkData :: ContT () IO (Ptr a, Ptr CInt)
+   }
+
+chunk :: (Storable a) => T sh ShapeInt a -> Chunk a
+chunk x@(Cons slc _dat) = Chunk (Shape.size $ Slice.shape slc) (sliceArg x)
+
+{- |
+>>> List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]
+[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]
+-}
+concat :: (Class.Floating a) => [Chunk a] -> Vector ShapeInt a
+concat xs =
+   let offsets = NonEmpty.scanl (+) 0 $ List.map chunkSize xs
+   in Array.unsafeCreate (Shape.ZeroBased $ NonEmpty.last offsets) $ \yPtr ->
+      Fold.for_ (List.zip (NonEmpty.flatten offsets) xs) $ \(offset, x) ->
+      evalContT $ do
+         nPtr <- Call.cint $ chunkSize x
+         (xPtr, incxPtr) <- chunkData x
+         incyPtr <- Call.cint 1
+         liftIO $ Blas.copy nPtr xPtr incxPtr (advancePtr yPtr offset) incyPtr
 
 
 dot ::
diff --git a/test/Test/ComplexDouble/Numeric/BLAS/Vector.hs b/test/Test/ComplexDouble/Numeric/BLAS/Vector.hs
--- a/test/Test/ComplexDouble/Numeric/BLAS/Vector.hs
+++ b/test/Test/ComplexDouble/Numeric/BLAS/Vector.hs
@@ -104,178 +104,213 @@
 test = do
  DocTest.printPrefix "Numeric.BLAS.Vector:239: "
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))
+      forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:248: "
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))
+      Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:249: "
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))
+      Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:250: "
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))
+      Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:252: "
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))
+      forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:253: "
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))
+      forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:254: "
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:269: "
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))
+      cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:270: "
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))
+      cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:271: "
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))
+      cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:272: "
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))
+      cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:274: "
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
-     (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))
+      forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:291: "
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))
+      QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:326: "
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:379: "
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))
+      forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:439: "
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))
+      forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.example(
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+    Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
+  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
  DocTest.printPrefix "Numeric.BLAS.Vector:466: "
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:467: "
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:468: "
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector:463: "
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
-  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
- DocTest.printPrefix "Numeric.BLAS.Vector:515: "
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:512: "
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
+ DocTest.example(
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
+    Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
   [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.property(
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:548: "
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))
+      QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:558: "
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:559: "
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:560: "
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:576: "
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:606: "
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)
+      forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:607: "
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)
+      forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:676: "
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)
+      forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:677: "
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)
+      forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:707: "
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))
+      forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:720: "
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))
+      QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:737: "
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)
+      forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:745: "
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys
+  )
diff --git a/test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs b/test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs
--- a/test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs
+++ b/test/Test/ComplexDouble/Numeric/BLAS/Vector/Slice.hs
@@ -1,13 +1,14 @@
 -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs
-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 
 {-# OPTIONS_GHC -XTypeOperators #-}
 {-# OPTIONS_GHC -XGADTs #-}
 module Test.ComplexDouble.Numeric.BLAS.Vector.Slice where
 
+import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 import     qualified Test.Slice as TestSlice
 import     Test.ComplexDouble.Numeric.BLAS.Vector
        (maxElem, maxDim, genVector, number_, real_, complex_)
@@ -25,7 +26,7 @@
 import     qualified Data.Array.Comfort.Shape as Shape
 import     qualified Data.List as List
 import     Numeric.BLAS.Vector ((+++), (|+|))
-import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
+import     Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne)
 import     Data.Array.Comfort.Shape ((::+)((::+)))
 import     Data.Tuple.HT (mapPair)
 import     Data.Complex (Complex)
@@ -70,8 +71,8 @@
        Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a ->
        VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a
 takeColumn     c =
-       VectorSlice.slice
-          (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector
+       VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .
+       VectorSlice.fromVector
 
 listFromSlice     ::
        (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]
@@ -129,123 +130,167 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))
+  )
+  [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]
+  )
+  [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis
+  )
diff --git a/test/Test/ComplexFloat/Numeric/BLAS/Vector.hs b/test/Test/ComplexFloat/Numeric/BLAS/Vector.hs
--- a/test/Test/ComplexFloat/Numeric/BLAS/Vector.hs
+++ b/test/Test/ComplexFloat/Numeric/BLAS/Vector.hs
@@ -104,178 +104,213 @@
 test = do
  DocTest.printPrefix "Numeric.BLAS.Vector:239: "
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))
+      forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:248: "
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))
+      Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:249: "
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))
+      Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:250: "
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))
+      Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:252: "
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))
+      forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:253: "
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))
+      forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:254: "
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:269: "
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))
+      cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:270: "
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))
+      cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:271: "
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))
+      cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:272: "
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))
+      cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:274: "
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
-     (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))
+      forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:291: "
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))
+      QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:326: "
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:379: "
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))
+      forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:439: "
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))
+      forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.example(
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+    Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
+  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
  DocTest.printPrefix "Numeric.BLAS.Vector:466: "
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:467: "
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:468: "
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector:463: "
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
-  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
- DocTest.printPrefix "Numeric.BLAS.Vector:515: "
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:512: "
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
+ DocTest.example(
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
+    Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
   [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.property(
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:548: "
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))
+      QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:558: "
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:559: "
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:560: "
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:576: "
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:606: "
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)
+      forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:607: "
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)
+      forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:676: "
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)
+      forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:677: "
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)
+      forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:707: "
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))
+      forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:720: "
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))
+      QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:737: "
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)
+      forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:745: "
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys
+  )
diff --git a/test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs b/test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs
--- a/test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs
+++ b/test/Test/ComplexFloat/Numeric/BLAS/Vector/Slice.hs
@@ -1,13 +1,14 @@
 -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs
-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 
 {-# OPTIONS_GHC -XTypeOperators #-}
 {-# OPTIONS_GHC -XGADTs #-}
 module Test.ComplexFloat.Numeric.BLAS.Vector.Slice where
 
+import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 import     qualified Test.Slice as TestSlice
 import     Test.ComplexFloat.Numeric.BLAS.Vector
        (maxElem, maxDim, genVector, number_, real_, complex_)
@@ -25,7 +26,7 @@
 import     qualified Data.Array.Comfort.Shape as Shape
 import     qualified Data.List as List
 import     Numeric.BLAS.Vector ((+++), (|+|))
-import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
+import     Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne)
 import     Data.Array.Comfort.Shape ((::+)((::+)))
 import     Data.Tuple.HT (mapPair)
 import     Data.Complex (Complex)
@@ -70,8 +71,8 @@
        Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a ->
        VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a
 takeColumn     c =
-       VectorSlice.slice
-          (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector
+       VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .
+       VectorSlice.fromVector
 
 listFromSlice     ::
        (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]
@@ -129,123 +130,167 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))
+  )
+  [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]
+  )
+  [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis
+  )
diff --git a/test/Test/Double/Numeric/BLAS/Vector.hs b/test/Test/Double/Numeric/BLAS/Vector.hs
--- a/test/Test/Double/Numeric/BLAS/Vector.hs
+++ b/test/Test/Double/Numeric/BLAS/Vector.hs
@@ -104,178 +104,213 @@
 test = do
  DocTest.printPrefix "Numeric.BLAS.Vector:239: "
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))
+      forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:248: "
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))
+      Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:249: "
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))
+      Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:250: "
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))
+      Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:252: "
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))
+      forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:253: "
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))
+      forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:254: "
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:269: "
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))
+      cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:270: "
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))
+      cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:271: "
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))
+      cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:272: "
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))
+      cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:274: "
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
-     (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))
+      forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:291: "
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))
+      QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:326: "
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:379: "
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))
+      forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:439: "
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))
+      forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.example(
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+    Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
+  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
  DocTest.printPrefix "Numeric.BLAS.Vector:466: "
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:467: "
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:468: "
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector:463: "
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
-  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
- DocTest.printPrefix "Numeric.BLAS.Vector:515: "
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:512: "
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
+ DocTest.example(
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
+    Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
   [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.property(
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:548: "
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))
+      QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:558: "
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:559: "
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:560: "
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:576: "
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:606: "
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)
+      forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:607: "
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)
+      forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:676: "
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)
+      forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:677: "
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)
+      forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:707: "
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))
+      forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:720: "
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))
+      QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:737: "
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)
+      forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:745: "
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys
+  )
diff --git a/test/Test/Double/Numeric/BLAS/Vector/Slice.hs b/test/Test/Double/Numeric/BLAS/Vector/Slice.hs
--- a/test/Test/Double/Numeric/BLAS/Vector/Slice.hs
+++ b/test/Test/Double/Numeric/BLAS/Vector/Slice.hs
@@ -1,13 +1,14 @@
 -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs
-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 
 {-# OPTIONS_GHC -XTypeOperators #-}
 {-# OPTIONS_GHC -XGADTs #-}
 module Test.Double.Numeric.BLAS.Vector.Slice where
 
+import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 import     qualified Test.Slice as TestSlice
 import     Test.Double.Numeric.BLAS.Vector
        (maxElem, maxDim, genVector, number_, real_, complex_)
@@ -25,7 +26,7 @@
 import     qualified Data.Array.Comfort.Shape as Shape
 import     qualified Data.List as List
 import     Numeric.BLAS.Vector ((+++), (|+|))
-import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
+import     Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne)
 import     Data.Array.Comfort.Shape ((::+)((::+)))
 import     Data.Tuple.HT (mapPair)
 import     Data.Complex (Complex)
@@ -70,8 +71,8 @@
        Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a ->
        VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a
 takeColumn     c =
-       VectorSlice.slice
-          (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector
+       VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .
+       VectorSlice.fromVector
 
 listFromSlice     ::
        (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]
@@ -129,123 +130,167 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))
+  )
+  [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]
+  )
+  [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis
+  )
diff --git a/test/Test/Float/Numeric/BLAS/Vector.hs b/test/Test/Float/Numeric/BLAS/Vector.hs
--- a/test/Test/Float/Numeric/BLAS/Vector.hs
+++ b/test/Test/Float/Numeric/BLAS/Vector.hs
@@ -104,178 +104,213 @@
 test = do
  DocTest.printPrefix "Numeric.BLAS.Vector:239: "
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 239 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs)))
+      forVector number_ $ \xs -> forVector number_ $ \ys -> forVector number_ $ \zs -> Vector.toList ((xs +++ ys) +++ zs) == Vector.toList (xs +++ (ys +++ zs))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:248: "
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 248 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_))
+      Vector.autoFromList [] == (Vector.reverse $ Vector.autoFromList [] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:249: "
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 249 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_))
+      Vector.autoFromList [1] == (Vector.reverse $ Vector.autoFromList [1] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:250: "
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 250 "src/Numeric/BLAS/Vector.hs" #-}
-     (Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_))
+      Vector.autoFromList [3,2,1] == (Vector.reverse $ Vector.autoFromList [1,2,3] :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:252: "
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 252 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs))
+      forVector number_ $ \xs -> reverse (Vector.toList xs) == Vector.toList (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:253: "
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 253 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs))
+      forVector number_ $ \xs -> xs == Vector.reverse (Vector.reverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:254: "
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 254 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> Vector.reverse (xs <> ys) == Vector.reverse ys <> Vector.reverse xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:269: "
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 269 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList []))
+      cyclicVectorFromList [] == Vector.cyclicReverse (cyclicVectorFromList [])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:270: "
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 270 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1]))
+      cyclicVectorFromList [1] == Vector.cyclicReverse (cyclicVectorFromList [1])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:271: "
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 271 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3]))
+      cyclicVectorFromList [1,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:272: "
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 272 "src/Numeric/BLAS/Vector.hs" #-}
-     (cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6]))
+      cyclicVectorFromList [1,6,5,4,3,2] == Vector.cyclicReverse (cyclicVectorFromList [1,2,3,4,5,6])
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:274: "
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 274 "src/Numeric/BLAS/Vector.hs" #-}
-     (forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs))
+      forCyclicVector number_ $ \xs -> xs == Vector.cyclicReverse (Vector.cyclicReverse xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:291: "
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 291 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_))
+      QC.forAll (QC.choose (1,100)) $ \dim -> QC.forAll (QC.choose (0, dim-1)) $ \i -> QC.forAll (QC.choose (0, dim-1)) $ \j -> Vector.unit (Shape.ZeroBased dim) i == (Vector.swap i j (Vector.unit (Shape.ZeroBased dim) j) :: Vector Number_)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:326: "
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 326 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.inner xs ys == Vector.dot (Vector.conjugate xs) ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:379: "
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 379 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs))
+      forVector number_ $ \xs -> Vector.sum xs == List.sum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:439: "
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 439 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs)))
+      forVector number_ $ \xs -> Vector.normInf xs == List.maximum (0 : List.map absolute (Vector.toList xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector:463: "
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.example(
+{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
+    Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
+  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
  DocTest.printPrefix "Numeric.BLAS.Vector:466: "
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 466 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = Vector.argAbsMaximum xs in xs!xi == xm
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:467: "
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 467 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs)
+      forVector number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = Vector.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ Vector.toList xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:468: "
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 468 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector:463: "
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
-{-# LINE 463 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbsMaximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
-  [ExpectedLine [LineChunk "(3,6.0 :+ 0.0)"]]
- DocTest.printPrefix "Numeric.BLAS.Vector:515: "
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
-{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs)
+      forVector number_ $ \xs -> forVector number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = Vector.argAbsMaximum xs; (_yi,ym) = Vector.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (xs+++ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:512: "
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.example
+ DocTest.example(
 {-# LINE 512 "src/Numeric/BLAS/Vector.hs" #-}
-   (Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_])
+    Vector.argAbs1Maximum $ Vector.autoFromList [1:+2, 3:+4, 5, 6 :: Complex_]
+  )
   [ExpectedLine [LineChunk "(1,3.0 :+ 4.0)"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector:515: "
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+ DocTest.property(
+{-# LINE 515 "src/Numeric/BLAS/Vector.hs" #-}
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.argAbsMaximum xs == Vector.argAbs1Maximum xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:548: "
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 548 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_))))
+      QC.forAll (QC.choose (0,10)) $ \dim -> QC.forAll (genVector (shapeInt dim) (genNumber 3)) $ \xs -> approx 1e-2 (Vector.product xs) (List.product (Vector.toList (xs :: Vector Number_)))
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:558: "
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 558 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.minimum xs == List.minimum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:559: "
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 559 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.maximum xs == List.maximum (Vector.toList xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:560: "
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 560 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs))
+      forVector real_ $ \xs -> isNonEmpty xs ==> - Vector.maximum xs == Vector.minimum (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:576: "
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 576 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs)
+      forVector real_ $ \xs -> isNonEmpty xs ==> Vector.limits xs == Array.limits xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:606: "
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 606 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs)
+      forVector number_ $ \xs -> Vector.negate xs == Vector.scale minusOne xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:607: "
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 607 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs)
+      forVector number_ $ \xs -> Vector.scale 2 xs == xs |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:676: "
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 676 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs)
+      forVector2 number_ $ \xs ys -> xs |+| ys == ys |+| xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:677: "
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 677 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys)
+      forVector2 number_ $ \xs ys -> xs == xs |-| ys |+| ys
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:707: "
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 707 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs))
+      forVector number_ $ \xs -> xs == Vector.negate (Vector.negate xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:720: "
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 720 "src/Numeric/BLAS/Vector.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs))
+      QC.forAll (genNumber maxElem) $ \d -> forVector number_ $ \xs -> xs == Vector.raise (-d) (Vector.raise d xs)
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:737: "
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 737 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs)
+      forVector2 number_ $ \xs ys -> Vector.mul xs ys == Vector.mul ys xs
+  )
  DocTest.printPrefix "Numeric.BLAS.Vector:745: "
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
- DocTest.property
+ DocTest.property(
 {-# LINE 745 "src/Numeric/BLAS/Vector.hs" #-}
-     (forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys)
+      forVector2 number_ $ \xs ys -> Vector.mulConj xs ys == Vector.mul (Vector.conjugate xs) ys
+  )
diff --git a/test/Test/Float/Numeric/BLAS/Vector/Slice.hs b/test/Test/Float/Numeric/BLAS/Vector/Slice.hs
--- a/test/Test/Float/Numeric/BLAS/Vector/Slice.hs
+++ b/test/Test/Float/Numeric/BLAS/Vector/Slice.hs
@@ -1,13 +1,14 @@
 -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Vector/Slice.hs
-{-# LINE 87 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 97 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 
 {-# OPTIONS_GHC -XTypeOperators #-}
 {-# OPTIONS_GHC -XGADTs #-}
 module Test.Float.Numeric.BLAS.Vector.Slice where
 
+import Test.DocTest.Base
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 90 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+{-# LINE 100 "src/Numeric/BLAS/Vector/Slice.hs" #-}
 import     qualified Test.Slice as TestSlice
 import     Test.Float.Numeric.BLAS.Vector
        (maxElem, maxDim, genVector, number_, real_, complex_)
@@ -25,7 +26,7 @@
 import     qualified Data.Array.Comfort.Shape as Shape
 import     qualified Data.List as List
 import     Numeric.BLAS.Vector ((+++), (|+|))
-import     Numeric.BLAS.Scalar (RealOf, absolute, minusOne)
+import     Numeric.BLAS.Scalar (RealOf, absolute, realPart, minusOne)
 import     Data.Array.Comfort.Shape ((::+)((::+)))
 import     Data.Tuple.HT (mapPair)
 import     Data.Complex (Complex)
@@ -70,8 +71,8 @@
        Vector.Vector (sh0 ::+ (sh, sh1) ::+ sh2) a ->
        VectorSlice.T (sh0 ::+ (sh, sh1) ::+ sh2) sh a
 takeColumn     c =
-       VectorSlice.slice
-          (Slice.column c . Slice.left . Slice.right) . VectorSlice.fromVector
+       VectorSlice.slice (Slice.column c . Slice.left . Slice.right) .
+       VectorSlice.fromVector
 
 listFromSlice     ::
        (Shape.C sh, Class.Floating a) => VectorSlice.T shA sh a -> [a]
@@ -129,123 +130,167 @@
 
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:280: "
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 280 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:282: "
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 282 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:314: "
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 314 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:315: "
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 315 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:398: "
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 398 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:471: "
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 471 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:482: "
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 482 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs)))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:497: "
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 497 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:498: "
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 498 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:499: "
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 499 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:546: "
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 546 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:571: "
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 571 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_))))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:582: "
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 582 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:583: "
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 583 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:599: "
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 599 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:629: "
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 629 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:630: "
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 630 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:689: "
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 689 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:690: "
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 690 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:715: "
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 715 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:728: "
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 728 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:745: "
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 745 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs)
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:753: "
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 753 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys))
- DocTest.printPrefix "Numeric.BLAS.Vector.Slice:877: "
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
- DocTest.property
-{-# LINE 877 "src/Numeric/BLAS/Vector/Slice.hs" #-}
-     (forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis)
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:301: "
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 301 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector shape number_) $ \xs -> VectorSlice.extract (Slice.column c . Slice.left . Slice.right) xs == Matrix.takeColumn c (Vector.takeLeft (Vector.takeRight (xs :: Vector Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:303: "
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 303 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forAll_ (TestSlice.genShapeSelect 4 100) $ \(TestSlice.ShapeSelect sh select) -> QC.forAll (genVector sh number_) $ \xs -> case TestSlice.instantiate sh select of TestSlice.Extraction slice cut -> VectorSlice.extract slice xs == cut xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:323: "
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 323 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \shape a -> VectorSlice.toVector (VectorSlice.replicate shape a) == Vector.constant shape (a :: Number_)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:335: "
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 335 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ VectorSlice.append (VectorSlice.fromVector $ Vector.autoFromList [3,1,4,1]) (VectorSlice.replicate (Shape.ZeroBased (3::Int)) (0::Number_))
+  )
+  [ExpectedLine [LineChunk "[3.0,1.0,4.0,1.0,0.0,0.0,0.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:365: "
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.example(
+{-# LINE 365 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+    List.map realPart $ Vector.toList $ let matrix = Vector.fromList (Shape.ZeroBased (4::Int), Shape.ZeroBased (3::Int)) $ map (\x -> fromInteger x :: Number_) [0 ..] in VectorSlice.concat $ map (\k -> VectorSlice.chunk (VectorSlice.slice (Slice.column k) $ VectorSlice.fromVector matrix)) [0,1,2]
+  )
+  [ExpectedLine [LineChunk "[0.0,3.0,6.0,9.0,1.0,4.0,7.0,10.0,2.0,5.0,8.0,11.0]"]]
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:393: "
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 393 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.inner xs ys == Vector.dot (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:394: "
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 394 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.inner xs xs == Scalar.fromReal (VectorSlice.norm2Squared xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:477: "
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 477 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.sum xs == List.sum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:550: "
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 550 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf xs == List.maximum (0 : List.map absolute (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:561: "
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 561 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.normInf1 xs == List.maximum (0 : List.map Scalar.norm1 (listFromSlice xs))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:576: "
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 576 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (xi,xm) = VectorSlice.argAbsMaximum xs in VectorSlice.access xs xi == xm
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:577: "
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 577 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> isNonEmpty xs ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs in List.all (\x -> absolute x <= absolute xm) $ listFromSlice xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:578: "
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 578 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> forSliced number_ $ \ys -> isNonEmpty xs && isNonEmpty ys ==> let (_xi,xm) = VectorSlice.argAbsMaximum xs; (_yi,ym) = VectorSlice.argAbsMaximum ys; (zi,zm) = Vector.argAbsMaximum (VectorSlice.toVector xs +++ VectorSlice.toVector ys) in case zi of Left _ -> xm==zm && absolute xm >= absolute ym; Right _ -> ym==zm && absolute xm < absolute ym
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:625: "
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 625 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.argAbsMaximum xs == VectorSlice.argAbs1Maximum xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:650: "
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 650 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll genShape $ \sh@(_::+(_rows,columns)::+_) -> QC.forAll (QC.elements (Shape.indices columns)) $ \c -> QC.forAll (genVector sh $ genNumber 3) $ \xt -> let xs = takeColumn c xt in approx 1e-2 (VectorSlice.product xs) (List.product (listFromSlice (xs :: Sliced Number_)))
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:661: "
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 661 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.minimum xs == List.minimum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:662: "
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 662 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.maximum xs == List.maximum (listFromSlice xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:678: "
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 678 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced real_ $ \xs -> isNonEmpty xs ==> VectorSlice.limits xs == Array.limits (VectorSlice.toVector xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:708: "
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 708 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.negate xs == VectorSlice.scale minusOne xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:709: "
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 709 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.scale 2 xs == VectorSlice.add xs xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:768: "
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 768 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.add xs ys == VectorSlice.add ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:769: "
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 769 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.toVector xs == VectorSlice.sub xs ys |+| VectorSlice.toVector ys
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:794: "
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 794 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.negate (VectorSlice.negate xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:807: "
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 807 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      QC.forAll (genNumber maxElem) $ \d -> forSliced number_ $ \xs -> VectorSlice.toVector xs == Vector.raise (-d) (VectorSlice.raise d xs)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:824: "
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 824 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mul xs ys == VectorSlice.mul ys xs
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:832: "
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 832 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced2 number_ $ \xs ys -> VectorSlice.mulConj xs ys == Vector.mul (VectorSlice.conjugate xs) (VectorSlice.toVector ys)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Vector.Slice:956: "
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 956 "src/Numeric/BLAS/Vector/Slice.hs" #-}
+      forSliced complex_ $ \xs -> approxReal 1e-2 (VectorSlice.norm2 xs) $ let (xrs,xis) = VectorSlice.unzipComplex xs in sqrt $ VectorSlice.norm2Squared xrs + VectorSlice.norm2Squared xis
+  )
diff --git a/test/Test/Numeric/BLAS/Slice.hs b/test/Test/Numeric/BLAS/Slice.hs
--- a/test/Test/Numeric/BLAS/Slice.hs
+++ b/test/Test/Numeric/BLAS/Slice.hs
@@ -1,11 +1,13 @@
 -- Do not edit! Automatically created with doctest-extract from src/Numeric/BLAS/Slice.hs
-{-# LINE 13 "src/Numeric/BLAS/Slice.hs" #-}
+{-# LINE 16 "src/Numeric/BLAS/Slice.hs" #-}
 
+{-# OPTIONS_GHC -XTypeOperators #-}
+
 module Test.Numeric.BLAS.Slice where
 
 import qualified Test.DocTest.Driver as DocTest
 
-{-# LINE 14 "src/Numeric/BLAS/Slice.hs" #-}
+{-# LINE 19 "src/Numeric/BLAS/Slice.hs" #-}
 import     qualified Numeric.BLAS.Slice as Slice
 import     Test.Slice (shapeInt)
 
@@ -15,10 +17,19 @@
 import     Data.Array.Comfort.Shape ((::+)((::+)))
 import     Data.Array.Comfort.Boxed ((!))
 
-import     Control.Applicative (liftA3, pure)
+import     Control.Applicative (liftA2, liftA3, pure)
 
 import     qualified Test.QuickCheck as QC
 
+genShape     :: QC.Gen (Shape.Range Int)
+genShape     =
+       liftA2
+          (\m n -> Shape.Range (min m n) (max m n))
+          QC.arbitrary QC.arbitrary
+
+genAppend     :: QC.Gen (Shape.Range Int ::+ Shape.Range Int)
+genAppend     = liftA2 (::+) genShape genShape
+
 genSlice     :: sh -> QC.Gen (Slice.T sh)
 genSlice     sh =
        liftA3 Slice.Cons (QC.choose (0,100)) (QC.choose (1,100)) (pure sh)
@@ -29,25 +40,55 @@
        k <- QC.choose (1,100)
        return (Slice.Cons s k shA, Slice.Cons s k shB)
 
+type     ShapeInt = Shape.ZeroBased Int
+
+mapShape     :: (shA -> shB) -> Slice.T shA -> Slice.T shB
+mapShape     f (Slice.Cons s k sh) = Slice.Cons s k (f sh)
+
+toShapeInt     :: (Shape.C sh) => Slice.T sh -> Slice.T ShapeInt
+toShapeInt     = mapShape (shapeInt . Shape.size)
+
 test :: DocTest.T ()
 test = do
- DocTest.printPrefix "Numeric.BLAS.Slice:58: "
-{-# LINE 58 "src/Numeric/BLAS/Slice.hs" #-}
- DocTest.property
-{-# LINE 58 "src/Numeric/BLAS/Slice.hs" #-}
-     (QC.forAll (QC.choose (1,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numRows) $ \ix -> Slice.row ix slice == Slice.rowArray slice ! ix)
- DocTest.printPrefix "Numeric.BLAS.Slice:70: "
-{-# LINE 70 "src/Numeric/BLAS/Slice.hs" #-}
- DocTest.property
-{-# LINE 70 "src/Numeric/BLAS/Slice.hs" #-}
-     (QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (1,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numColumns) $ \ix -> Slice.column ix slice == Slice.columnArray slice ! ix)
- DocTest.printPrefix "Numeric.BLAS.Slice:145: "
-{-# LINE 145 "src/Numeric/BLAS/Slice.hs" #-}
- DocTest.property
-{-# LINE 145 "src/Numeric/BLAS/Slice.hs" #-}
-     (QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeA -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeB -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeC -> QC.forAll (genSlice2 (Map.fromList $ ('a', shapeA) : ('b', shapeB) : ('c', shapeC) : []) (shapeA ::+ shapeB ::+ shapeC)) $ \(sliceMap, sliceParted) -> Slice.map sliceMap Map.! 'b' == Slice.left (Slice.right sliceParted))
- DocTest.printPrefix "Numeric.BLAS.Slice:147: "
-{-# LINE 147 "src/Numeric/BLAS/Slice.hs" #-}
- DocTest.property
-{-# LINE 147 "src/Numeric/BLAS/Slice.hs" #-}
-     (QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> let rowShape = shapeInt numRows; columnShape = shapeInt numColumns; mapShape = Map.fromList $ map (\k -> (k, columnShape)) (Shape.indices rowShape) in QC.forAll (genSlice2 mapShape (rowShape, columnShape)) $ \(sliceMap, sliceMatrix) -> Map.toAscList (Slice.map sliceMap) == Array.toAssociations (Slice.rowArray sliceMatrix))
+ DocTest.printPrefix "Numeric.BLAS.Slice:80: "
+{-# LINE 80 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 80 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (QC.choose (1,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numRows) $ \ix -> Slice.row ix slice == Slice.rowArray slice ! ix
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:92: "
+{-# LINE 92 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 92 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (1,100)) $ \numColumns -> QC.forAll (genSlice (shapeInt numRows, shapeInt numColumns)) $ \slice -> QC.forAll (QC.elements $ Shape.indices $ shapeInt numColumns) $ \ix -> Slice.column ix slice == Slice.columnArray slice ! ix
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:173: "
+{-# LINE 173 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 173 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.take (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.left slice)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:182: "
+{-# LINE 182 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 182 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (genSlice =<< genAppend) $ \slice -> Slice.drop (case Slice.shape slice of (sh::+_) -> Shape.size sh) (toShapeInt slice) == toShapeInt (Slice.right slice)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:193: "
+{-# LINE 193 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 193 "src/Numeric/BLAS/Slice.hs" #-}
+      \(QC.NonNegative n) -> QC.forAll (genSlice $ shapeInt n) $ \slice (QC.NonNegative start) (QC.NonNegative size) -> Slice.sub start size slice == Slice.take size (Slice.drop start slice)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:203: "
+{-# LINE 203 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 203 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeA -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeB -> QC.forAll (fmap shapeInt $ QC.choose (0,100)) $ \shapeC -> QC.forAll (genSlice2 (Map.fromList $ ('a', shapeA) : ('b', shapeB) : ('c', shapeC) : []) (shapeA ::+ shapeB ::+ shapeC)) $ \(sliceMap, sliceParted) -> Slice.map sliceMap Map.! 'b' == Slice.left (Slice.right sliceParted)
+  )
+ DocTest.printPrefix "Numeric.BLAS.Slice:205: "
+{-# LINE 205 "src/Numeric/BLAS/Slice.hs" #-}
+ DocTest.property(
+{-# LINE 205 "src/Numeric/BLAS/Slice.hs" #-}
+      QC.forAll (QC.choose (0,100)) $ \numRows -> QC.forAll (QC.choose (0,100)) $ \numColumns -> let rowShape = shapeInt numRows; columnShape = shapeInt numColumns; mapShape_ = Map.fromList $ map (\k -> (k, columnShape)) (Shape.indices rowShape) in QC.forAll (genSlice2 mapShape_ (rowShape, columnShape)) $ \(sliceMap, sliceMatrix) -> Map.toAscList (Slice.map sliceMap) == Array.toAssociations (Slice.rowArray sliceMatrix)
+  )
