{-# LANGUAGE OverloadedStrings #-}
import Criterion.Main
import qualified Data.Vector.Storable as Vec
import Numeric.LinearAlgebra
import Numeric.LinearAlgebra.Data
import Numeric.LinearAlgebra.Devel
import Numeric.LinearAlgebra.SVD.SVDLIBC as SVD
import System.IO


main :: IO ()
main = defaultMain
  [ bench "Factorizes a random dense matrix" $ nfIO $ do
      let (width, height) = (20, 10)
      SVD.svd (min width height) <$> randn width height
  , bench "Factorizes a random sparse matrix" $ nfIO $ do
      let (width, height) = (20, 10)
      SVD.sparseSvd (min width height) <$> SVD.sparsify <$> randn width height
  ]