SInterBenchmarks.scala 2.3 KB
Newer Older
D
Dejan Mijić 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/*
 * Copyright 2021 John A. De Goes and the ZIO contributors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

梦境迷离's avatar
梦境迷离 已提交
17
package zio.redis.sets
18 19 20 21 22 23

import java.util.concurrent.TimeUnit

import org.openjdk.jmh.annotations._

import zio.ZIO
D
Dejan Mijić 已提交
24
import zio.redis.{BenchmarkRuntime, sAdd, sInter}
25 26 27 28 29 30 31

@State(Scope.Thread)
@BenchmarkMode(Array(Mode.Throughput))
@OutputTimeUnit(TimeUnit.SECONDS)
@Measurement(iterations = 15)
@Warmup(iterations = 15)
@Fork(2)
梦境迷离's avatar
梦境迷离 已提交
32 33
class SInterBenchmarks extends BenchmarkRuntime {

34
  @Param(Array("500"))
D
Dejan Mijić 已提交
35
  var count: Int = _
36

梦境迷离's avatar
梦境迷离 已提交
37 38
  private var items: List[String]      = _
  private var otherItems: List[String] = _
39

梦境迷离's avatar
梦境迷离 已提交
40 41
  private val key      = "test-set1"
  private val otherKey = "test-set2"
42 43 44

  @Setup(Level.Trial)
  def setup(): Unit = {
梦境迷离's avatar
梦境迷离 已提交
45 46
    items = (0 to count).toList.map(_.toString)
    otherItems = (0 to count).toList.map(_.toString)
47
    zioUnsafeRun(sAdd(key, items.head, items.tail: _*).unit)
梦境迷离's avatar
梦境迷离 已提交
48 49
    zioUnsafeRun(sAdd(otherKey, otherItems.head, otherItems.tail: _*).unit)

50 51 52 53 54
  }

  @Benchmark
  def laserdisc(): Unit = {
    import _root_.laserdisc.fs2._
D
Dejan Mijić 已提交
55
    import _root_.laserdisc.{all => cmd, _}
56 57 58
    import cats.instances.list._
    import cats.syntax.foldable._

梦境迷离's avatar
梦境迷离 已提交
59 60 61
    unsafeRun[LaserDiscClient](c =>
      items.traverse_(_ => c.send(cmd.sinter(Key.unsafeFrom(key), Key.unsafeFrom(otherKey))))
    )
62 63 64 65 66 67
  }

  @Benchmark
  def rediculous(): Unit = {
    import cats.implicits._
    import io.chrisdavenport.rediculous._
梦境迷离's avatar
梦境迷离 已提交
68
    unsafeRun[RediculousClient](c => items.traverse_(_ => RedisCommands.sinter[RedisIO](List(key, otherKey)).run(c)))
69 70 71 72 73 74
  }

  @Benchmark
  def redis4cats(): Unit = {
    import cats.instances.list._
    import cats.syntax.foldable._
梦境迷离's avatar
梦境迷离 已提交
75
    unsafeRun[Redis4CatsClient[String]](c => items.traverse_(_ => c.sInter(key, otherKey)))
76 77 78
  }

  @Benchmark
79
  def zio(): Unit = zioUnsafeRun(ZIO.foreach_(items)(_ => sInter(key, otherKey).returning[String]))
80
}