packages feed

ring-buffer-0.4: Test.hs

{-# LANGUAGE FlexibleContexts #-}

import Data.List
import qualified Data.Vector as V
import qualified Data.Vector.Generic as VG
import Data.RingBuffer as RB
import Test.HUnit

main :: IO ()
main = do
    runTestTT $ test [testConcat]
    return ()

testConcat :: Test
testConcat = TestCase $ do
    rb <- RB.new 40 :: IO (RB.RingBuffer V.Vector Int)
    --mapM_ (flip RB.append rb) [0..44]
    RB.concat (V.fromList [0..4]) rb
    RB.concat (V.fromList [0..50]) rb

    checkLength rb 40
    checkItems rb [50,49..11]
    withItems rb $ \items -> do
        let expected = [11..50]
        assertEqual "withItems: expected" expected (sort $ V.toList items)

checkLength :: VG.Vector v a => RingBuffer v a -> Int -> Assertion
checkLength rb expected = do
    len <- RB.length rb
    assertEqual ("Expected length "++show expected) expected len

checkItems :: (Eq a, Show a, VG.Vector v a)
           => RingBuffer v a -> [a] -> Assertion
checkItems rb expected = do
    items <- RB.toList rb
    assertEqual ("Expected items "++show expected) expected items