This commit is contained in:
Dmitry Zuikov 2023-01-24 20:38:47 +03:00
parent 8782318d8f
commit e2f06f0757
1 changed files with 72 additions and 64 deletions

View File

@ -2,12 +2,13 @@ module Main where
import HBS2.Net.Proto.Sessions import HBS2.Net.Proto.Sessions
import HBS2.Hash import HBS2.Hash
import HBS2.Clock
import Control.Monad import Control.Monad
import Control.Concurrent.STM import Control.Concurrent.STM
import Data.ByteString (ByteString) import Data.ByteString (ByteString)
import Data.ByteString.Lazy.Char8 as B import Data.ByteString.Lazy.Char8 qualified as B
import Data.Cache (Cache) import Data.Cache (Cache)
import Data.Cache qualified as Cache import Data.Cache qualified as Cache
import Data.Map qualified as Map import Data.Map qualified as Map
@ -16,6 +17,7 @@ import System.Random.MWC
import System.TimeIt import System.TimeIt
import Test.QuickCheck import Test.QuickCheck
import Data.HashMap.Strict qualified as HashMap import Data.HashMap.Strict qualified as HashMap
import Control.Concurrent.Async
main :: IO () main :: IO ()
main = do main = do
@ -27,79 +29,85 @@ main = do
bytes <- replicateM 256 $ uniformM g :: IO [Char] bytes <- replicateM 256 $ uniformM g :: IO [Char]
pure $ hashObject @HbSync (B.pack bytes) pure $ hashObject @HbSync (B.pack bytes)
timeItNamed "Cache (Hash HbSync)" $ do race ( pause ( 3 :: Timeout 'Seconds ) >> putStrLn "Cache (Hash HbSync) failed") $ do
replicateM_ 1000 $ do timeItNamed "Cache (Hash HbSync)" $ do
m1 <- Cache.newCache Nothing :: IO (Cache (Hash HbSync) ()) replicateM_ 1000 $ do
forM_ ss $ \key -> Cache.insert m1 key () m1 <- Cache.newCache Nothing :: IO (Cache (Hash HbSync) ())
forM_ ss $ \key -> Cache.lookup' m1 key
forM_ ss $ \key -> Cache.insert m1 key ()
forM_ ss $ \key -> Cache.lookup' m1 key
race ( pause ( 3 :: Timeout 'Seconds ) >> putStrLn "Cache (SKey) failed") $ do
timeItNamed "Cache (SKey)" $ do
let keys = fmap newSKey ss
replicateM_ 1000 $ do
m1 <- Cache.newCache Nothing
forM_ keys $ \key -> Cache.insert m1 key ()
forM_ keys $ \key -> Cache.lookup' m1 key
race ( pause ( 3 :: Timeout 'Seconds ) >> putStrLn "HashMap (Hash HbSync) failed") $ do
timeItNamed "HashMap (Hash HbSync)" $ do
let keys = ss
replicateM_ 1000 $ do
m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> do
atomically $ modifyTVar' m1 (HashMap.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
m <- readTVarIO m1
let !x = HashMap.lookup key m
pure ()
race ( pause ( 3 :: Timeout 'Seconds ) >> putStrLn "HashMap (SKey) failed") $ do
timeItNamed "HashMap (Skey)" $ do
let keys = fmap newSKey ss
replicateM_ 1000 $ do
m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> do
atomically $ modifyTVar' m1 (HashMap.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
m <- readTVarIO m1
let !x = HashMap.lookup key m
pure ()
timeItNamed "Cache (SKey)" $ do race ( pause ( 3 :: Timeout 'Seconds ) >> putStrLn "Map (Hash HbSync) failed") $ do
timeItNamed "Map (Hash HbSync)" $ do
let keys = fmap newSKey ss let keys = ss
replicateM_ 1000 $ do replicateM_ 1000 $ do
m1 <- Cache.newCache Nothing m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> Cache.insert m1 key () forM_ keys $ \key -> do
forM_ keys $ \key -> Cache.lookup' m1 key atomically $ modifyTVar' m1 (Map.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
timeItNamed "HashMap (Hash HbSync)" $ do m <- readTVarIO m1
let !x = Map.lookup key m
let keys = ss pure ()
replicateM_ 1000 $ do
m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> do
atomically $ modifyTVar' m1 (HashMap.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
m <- readTVarIO m1
let !x = HashMap.lookup key m
pure ()
timeItNamed "HashMap (Skey)" $ do
let keys = fmap newSKey ss
replicateM_ 1000 $ do
m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> do
atomically $ modifyTVar' m1 (HashMap.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
m <- readTVarIO m1
let !x = HashMap.lookup key m
pure ()
timeItNamed "Map (Hash HbSync)" $ do
let keys = ss
replicateM_ 1000 $ do
m1 <- newTVarIO mempty -- .newCache Nothing
forM_ keys $ \key -> do
atomically $ modifyTVar' m1 (Map.insert key ())
-- Cache.insert m1 key ()
forM_ keys $ \key -> do
m <- readTVarIO m1
let !x = Map.lookup key m
pure ()
pure () pure ()