From 50040231c7654cd654c64c88ad2f2d3a70d6c899 Mon Sep 17 00:00:00 2001 From: Alexander Bondarenko <486682+dpwiz@users.noreply.github.com> Date: Wed, 27 Mar 2024 14:24:37 +0200 Subject: [PATCH] add bs concat --- benchmarks/Bench.hs | 4 +++- benchmarks/Bench/BsConcat.hs | 23 +++++++++++++++++++++++ simplexmq.cabal | 1 + 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 benchmarks/Bench/BsConcat.hs diff --git a/benchmarks/Bench.hs b/benchmarks/Bench.hs index 898f37080..a175cd522 100644 --- a/benchmarks/Bench.hs +++ b/benchmarks/Bench.hs @@ -8,6 +8,7 @@ Pick one or group: cabal bench -O2 simplexmq-bench --benchmark-options "-p TRcvQ module Main where +import Bench.BsConcat import Bench.Compression import Bench.SNTRUP761 import Bench.TRcvQueues @@ -18,5 +19,6 @@ main = defaultMain [ bgroup "TRcvQueues" benchTRcvQueues, bgroup "SNTRUP761" benchSNTRUP761, - bgroup "Compression" benchCompression + bgroup "Compression" benchCompression, + bgroup "BsConcat" benchBsConcat ] diff --git a/benchmarks/Bench/BsConcat.hs b/benchmarks/Bench/BsConcat.hs new file mode 100644 index 000000000..c0f9ba166 --- /dev/null +++ b/benchmarks/Bench/BsConcat.hs @@ -0,0 +1,23 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Bench.BsConcat where + +import Data.ByteString (ByteString) +import qualified Data.ByteString.Char8 as B +import Test.Tasty.Bench + +benchBsConcat :: [Benchmark] +benchBsConcat = + [ bgroup "3 elements" + [ bench "(3-tuple baseline)" $ nf (\(a, s, b) -> a `seq` s `seq` b `seq` "" :: ByteString) ("aaa" :: ByteString, " " :: ByteString, "bbb" :: ByteString), + bench "a <> s <> b" $ nf (\(a, s, b) -> a <> s <> b :: ByteString) ("aaa", " ", "bbb"), + bench "concat [a, s, b]" $ nf (\(a, s, b) -> B.concat [a, s, b] :: ByteString) ("aaa", " ", "bbb"), + bench "unwords [a, b]" $ nf (\(a, b) -> B.unwords [a, b] :: ByteString) ("aaa", "bbb") + ], + bgroup "5 elements" + [ bench "a <> s <> b <> s <> c" $ nf (\(a, s1, b, s2, c) -> a <> s1 <> b <> s2 <> c :: ByteString) ("aaa", " ", "bbb", " ", "ccc"), + bench "(a <> s <> b) <> (s <> c)" $ nf (\(a, s1, b, s2, c) -> (a <> s1 <> b) <> (s2 <> c) :: ByteString) ("aaa", " ", "bbb", " ", "ccc"), + bench "concat [a, s, b, s c]" $ nf (\(a, s1, b, s2, c) -> B.concat [a, s1, b, s2, c] :: ByteString) ("aaa", " ", "bbb", " ", "ccc"), + bench "unwords [a, b, c]" $ nf (\(a, b, c) -> B.unwords [a, b, c] :: ByteString) ("aaa", "bbb", "ccc") + ] + ] diff --git a/simplexmq.cabal b/simplexmq.cabal index 79823b25b..240a76aea 100644 --- a/simplexmq.cabal +++ b/simplexmq.cabal @@ -733,6 +733,7 @@ benchmark simplexmq-bench type: exitcode-stdio-1.0 main-is: Bench.hs other-modules: + Bench.BsConcat Bench.Compression Bench.SNTRUP761 Bench.TRcvQueues