/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 - 2 0 2 0 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense . Ċ Ġ*/ Ċ Ċ package Ġbenchmarks . flow Ċ Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . flow .* Ċ import Ġkotlinx . coroutines . flow . internal .* Ċ import Ġorg . openjdk . j mh . annotations .* Ċ import Ġjava . util . concurrent .* Ċ Ċ @ W arm up ( iterations Ġ= Ġ 5 , Ġtime Ġ= Ġ 1 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ Measurement ( iterations Ġ= Ġ 5 , Ġtime Ġ= Ġ 1 , Ġtime Unit Ġ= ĠTimeUnit . SECONDS ) Ċ @ Fork ( value Ġ= Ġ 1 ) Ċ @ Benchmark Mode ( Mode . Through put ) Ċ @ Output TimeUnit ( TimeUnit . MILLISECONDS ) Ċ @ State ( Scope . Benchmark ) Ċ open Ġclass ĠCombine Two Flows Benchmark Ġ{ ĊĊĠĠĠ Ġ@ Param (" 1 0 0 ", Ġ" 1 0 0 0 0 0 ", Ġ" 1 0 0 0 0 0 0 ") ĊĠĠĠ Ġprivate Ġvar Ġsize Ġ= Ġ 1 0 0 0 0 0 ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġcombine Plain () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġ( 1 Ġuntil Ġsize . to Long ()). as Flow () ĊĠĠĠĠĠĠĠ Ġflow . combine ( flow ) Ġ{ Ġa , Ġb Ġ-> Ġa Ġ+ Ġb Ġ}. collect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġcombine Transform () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġ( 1 Ġuntil Ġsize . to Long ()). as Flow () ĊĠĠĠĠĠĠĠ Ġflow . combine Transform ( flow ) Ġ{ Ġa , Ġb Ġ-> Ġemit ( a Ġ+ Ġb ) Ġ}. collect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġcombine Var arg () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġ( 1 Ġuntil Ġsize . to Long ()). as Flow () ĊĠĠĠĠĠĠĠ Ġcombine ( listOf ( flow , Ġflow )) Ġ{ Ġarr Ġ-> Ġarr [ 0 ] Ġ+ Ġarr [ 1 ] Ġ}. collect () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Benchmark ĊĠĠĠ Ġfun Ġcombine Transform Var arg () Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġflow Ġ= Ġ( 1 Ġuntil Ġsize . to Long ()). as Flow () ĊĠĠĠĠĠĠĠ Ġcombine Transform ( listOf ( flow , Ġflow )) Ġ{ Ġarr Ġ-> Ġemit ( arr [ 0 ] Ġ+ Ġarr [ 1 ]) Ġ}. collect () ĊĠĠĠ Ġ} Ċ } Ċ