lvish-1.1.1.1: tests/SLMapTests.hs
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE DataKinds, TypeFamilies #-}
{-# LANGUAGE CPP #-}
-- | Tests for the Data.LVar.PureMap and Data.LVar.SLMap modules.
module SLMapTests(tests, runTests) where
import qualified Data.LVar.SLSet as IS
import qualified Data.LVar.SLMap as IM
import qualified Data.Concurrent.SkipListMap as SLM
import qualified Data.LVar.SLMap as SM
#include "CommonMapTests.hs"
--------------------------------------------------------------------------------
tests :: Test
tests = testGroup "" [tests_here, tests_common ]
tests_here :: Test
tests_here = $(testGroupGenerator)
runTests :: IO ()
runTests = defaultMainSeqTests [tests]
------------------------------------------------------------------------------------------
-- Show instances
------------------------------------------------------------------------------------------
-- | It happens that these come out in the opposite order from the Pure one:
case_show02 :: Assertion
case_show02 = assertEqual "show for SLMap" "{IMap: (\"key2\",44), (\"key1\",33)}" show02
show02 :: String
show02 = show$ runParThenFreeze $ do
mp <- IM.newEmptyMap
SM.insert "key1" (33::Int) mp
SM.insert "key2" (44::Int) mp
return mp
--------------------------------------------------------------------------------
-- Issue related:
--------------------------------------------------------------------------------
-- -- Issue #27, spurious duplication.
-- case_handlrDup :: Assertion
-- case_handlrDup = runParIO $ do
-- ctr <- I.liftIO$ newIORef 0
-- mp <- SM.newEmptyMap
-- hp <- newPool
-- -- Register handler FIRST.. no race.
-- SM.forEachHP (Just hp) mp $ \ (k::Int) v -> do
-- logDbgLn 1 $ "[case_handlrDup] Callback executing: " ++ show (k,v)
-- I.liftIO $ incr ctr
-- SM.insert 2 2 mp
-- SM.insert 3 3 mp
-- quiesce hp
-- sum <- I.liftIO $ readIORef ctr
-- I.liftIO $ assertEqual "Should be no duplication in this case" 2 sum
-- incr :: IORef Int -> IO ()
-- incr ref = atomicModifyIORef' ref (\x -> (x+1,()))