packages feed

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,()))