packages feed

strict-data-0.2.0.2: test/StrictVector.hs

{-# OPTIONS_GHC -fno-warn-type-defaults -fno-warn-name-shadowing -F -pgmF htfpp #-}
module StrictVector where

import Data.Option
import Data.StrictVector

import Control.Exception
import Test.Framework
import qualified Data.List as L
import qualified Data.Vector.Generic as VG

prop_groupBy :: [(Int,Int)] -> Bool
prop_groupBy l =
    let eq (_,x) (_,y) = x == y
        res1 = groupBy eq (fromList l)
        res2 = fmap fromList (fromList (L.groupBy eq l))
    in res2 == res1

-- prop_groupOn :: [(Int,Int)] -> Bool
-- prop_groupOn l =
--     let proj = snd
--         res1 = groupOn proj (fromList l)
--         res2 = fmap (second fromList) (fromList (L.groupOn proj l))
--     in res2 == res1

test_lookingAround :: IO ()
test_lookingAround =
    do assertEqual expected1 (f input1)
       assertEqual [] (f [])
       assertEqual [(Nothing,1,Nothing)] (f [1])
       assertEqual [(Nothing,1,Just 2),(Just 1,2,Nothing)] (f [1,2])
    where
      f :: [Int] -> [(Maybe Int, Int, Maybe Int)]
      f list = toList (lookAround (fromList list))
      input1 = [1,2,3]
      expected1 = [ (Nothing, 1, Just 2)
                  , (Just 1, 2, Just 3)
                  , (Just 2, 3, Nothing)
                  ]

test_uncons :: IO ()
test_uncons =
    let atoe :: Int
        atoe = 42
    in do assertEqual None (uncons $ fromList $ L.drop 1 [atoe])
          assertEqual (Some (atoe, fromList [5,2,3]))
                      (uncons $ fromList [atoe,5,2,3])

test_binarySearchL :: IO ()
test_binarySearchL =
    do assertEqual 0 (binarySearchL (flip compare 0) (fromList [0,1,2]))
       assertEqual 1 (binarySearchL (flip compare 1) (fromList [0,1,2]))
       assertEqual 1 (binarySearchL (flip compare 1) (fromList [0,1,1,2]))
       assertEqual 2 (binarySearchL (flip compare 2) (fromList [0,1,2]))
       assertEqual 3 (binarySearchL (flip compare 3) (fromList [0,1,2]))

test_binarySearchR :: IO ()
test_binarySearchR =
    do assertEqual 0 (binarySearchR (flip compare 0) (fromList [1,2,3]))
       assertEqual 1 (binarySearchR (flip compare 0) (fromList [0,1,2]))
       assertEqual 2 (binarySearchR (flip compare 1) (fromList [0,1,2]))
       assertEqual 3 (binarySearchR (flip compare 1) (fromList [0,1,1,2]))
       assertEqual 3 (binarySearchR (flip compare 2) (fromList [0,1,2]))
       assertEqual 3 (binarySearchR (flip compare 3) (fromList [0,1,2]))

test_fromListStrict :: IO ()
test_fromListStrict =
    do let err = ErrorCall "..."
       res <- try $ (VG.fromList [1,2,throw err] :: Vector Int) `seq` return ()
       assertEqual (Left err) res