@@ -386,6 +386,7 @@ o_1_space_serial_composition value =
386386 , benchIOSink value "serial_ (all, any)" $ serial_ value
387387 , benchIOSink value "tee (all, any)" $ teeAllAny value
388388 , benchIOSink value "many drain (take 1)" many
389+ , bench "unfoldMany" $ unfoldMany value
389390 , benchIOSink value "shortest (sum, length)" shortest
390391 , benchIOSink value "longest (sum, length)" longest
391392 , benchIOSink value "tee (sum, length)" teeSumLength
@@ -398,30 +399,9 @@ o_1_space_serial_composition value =
398399 , benchIOSink value "unzip (sum, length)" unzip
399400 , benchIOSink value "unzipWithFstM (sum, length)" unzipWithFstM
400401 , benchIOSink value "unzipWithMinM (sum, length)" unzipWithMinM
401− , benchIOSink value "demuxDefaultWith [sum, length] sum"
402− $ demuxDefaultWith fn mp
403− , benchIOSink value "demuxWith [sum, length]" $ demuxWith fn mp
404− , benchIOSink value "classifyWith sum"
405− $ classifyWith (fst . fn)
406− , benchIOSink value "classifyScanWith sum"
407− $ classifyScanWith (fst . fn)
408− , bench "unfoldMany" $ unfoldMany value
409− , benchIOSink value "classifyMutWith sum"
410− $ classifyMutWith (fst . fn)
411− , benchIOSink value "classifyMutWithHash sum"
412− $ classifyMutWithHash (fst . fn)
413− , benchIOSink value "classifyMutWithInt sum"
414− $ classifyMutWithInt (fst . fn)
415402 ]
416403 ]
417404
418− where
419−
420− -- We use three keys 0, 1, and 2. 0 and 1 are mapped and 3 is unmapped.
421− fn x = (x `mod` 3, x)
422−
423− mp = Map.fromList [(0, FL.sum), (1, FL.length)]
424−
425405o_n_space_serial :: Int -> [Benchmark]
426406o_n_space_serial value =
427407 [ benchIOSink value "sequence_/100" $ S.fold (sequence_ (value `div` 100))
@@ -442,8 +422,39 @@ o_n_heap_serial value =
442422 (S.fold FL.toStreamRev
443423 :: SerialT IO a -> IO (SerialT Identity a))
444424 ]
425+ , bgroup "key-value"
426+ [
427+ benchIOSink value "demuxDefaultWith (64 buckets) [sum, length] sum"
428+ $ demuxDefaultWith (getKey 64) mp
429+ , benchIOSink value "demuxWith (64 buckets) [sum, length]"
430+ $ demuxWith (getKey 64) mp
431+ , benchIOSink value "classifyWith (64 buckets) sum"
432+ $ classifyWith (fst . getKey 64)
433+ , benchIOSink value "classifyScanWith (64 buckets) sum"
434+ $ classifyScanWith (fst . getKey 64)
435+ , benchIOSink value "classifyMutWith (single bucket) sum"
436+ $ classifyMutWith (fst . getKey 1)
437+ , benchIOSink value "classifyMutWith (64 buckets) sum"
438+ $ classifyMutWith (fst . getKey 64)
439+ , benchIOSink value "classifyMutWith (max buckets) sum"
440+ $ classifyMutWith (fst . getKey value)
441+ , benchIOSink value "classifyMutWithHash (single bucket) sum"
442+ $ classifyMutWithHash (fst . getKey 1)
443+ , benchIOSink value "classifyMutWithHash (64 buckets) sum"
444+ $ classifyMutWithHash (fst . getKey 64)
445+ , benchIOSink value "classifyMutWithHash (max buckets) sum"
446+ $ classifyMutWithHash (fst . getKey value)
447+ , benchIOSink value "classifyMutWithInt (64 buckets) sum"
448+ $ classifyMutWithInt (fst . getKey 64)
449+ ]
445450 ]
446451
452+ where
453+
454+ getKey buckets x = (x `mod` buckets, x)
455+
456+ mp = Map.fromList [(0, FL.sum), (1, FL.length)]
457+
447458-------------------------------------------------------------------------------
448459-- Driver
449460-------------------------------------------------------------------------------