Skip to content

Commit

Permalink
Bring tests back
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrey Bobylev committed Feb 11, 2020
1 parent 3bb42ae commit bd05a25
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 0 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ trait Cache[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => F[V]): F[V]

/**
* Does not run `value` concurrently for the same key
*/
Expand Down Expand Up @@ -70,6 +72,8 @@ trait SerialMap[F[_], K, V] {

def get(key: K): F[Option[V]]

def getOrElse(key: K, default: => F[V]): F[V]

def put(key: K, value: V): F[Option[V]]

/**
Expand Down
11 changes: 11 additions & 0 deletions src/test/scala/com/evolutiongaming/scache/CacheEmptySpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,17 @@ class CacheEmptySpec extends AsyncFunSuite with Matchers {
result.run()
}

test("getOrElse") {
val result = for {
value <- cache.getOrElse(0, 1.pure[IO])
_ <- Sync[IO].delay { value shouldEqual 1 }
_ <- cache.put(0, 2)
value <- cache.getOrElse(0, 1.pure[IO])
_ <- Sync[IO].delay { value shouldEqual 1 }
} yield {}
result.run()
}

test("put") {
val result = for {
value <- cache.put(0, 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ class CacheFencedTest extends AsyncFunSuite with Matchers {
result.run()
}

test("getOrElse succeeds after cache is released") {
val result = for {
cache <- cache.use(_.pure[IO])
a <- cache.getOrElse(0, 1.pure[IO])
_ = a shouldEqual 1
} yield {}
result.run()
}

test(s"put succeeds after cache is released") {
val result = for {
cache <- cache.use(_.pure[IO])
Expand Down
24 changes: 24 additions & 0 deletions src/test/scala/com/evolutiongaming/scache/CacheSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,30 @@ class CacheSpec extends AsyncFunSuite with Matchers {
}


test(s"getOrElse: $name") {
val result = cache.use { cache =>
for {
value <- cache.getOrElse(0, 1.pure[IO])
_ = value shouldEqual 1
_ <- cache.put(0, 2)
value <- cache.getOrElse(0, 1.pure[IO])
_ = value shouldEqual 2
} yield {}
}
result.run()
}


test(s"getOrElse succeeds after cache is released: $name") {
val result = for {
cache <- cache.use(_.pure[IO])
a <- cache.getOrElse(0, 1.pure[IO])
_ = a shouldEqual 1
} yield {}
result.run()
}


test(s"put: $name") {
val result = cache.use { cache =>
for {
Expand Down
17 changes: 17 additions & 0 deletions src/test/scala/com/evolutiongaming/scache/SerialMapSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@ class SerialMapSpec extends AsyncFunSuite with Matchers {
get[IO].run()
}

test("getOrElse") {
getOrElse[IO].run()
}

test("put") {
put[IO].run()
}
Expand Down Expand Up @@ -75,6 +79,19 @@ class SerialMapSpec extends AsyncFunSuite with Matchers {
}
}

private def getOrElse[F[_] : Concurrent] = {
val key = "key"
for {
serialMap <- SerialMap.of[F, String, Int]
value0 <- serialMap.getOrElse(key, 1.pure[F])
_ <- serialMap.put(key, 2)
value1 <- serialMap.getOrElse(key, 1.pure[F])
} yield {
value0 shouldEqual 1
value1 shouldEqual 2
}
}

private def put[F[_] : Concurrent] = {
val key = "key"
for {
Expand Down

0 comments on commit bd05a25

Please sign in to comment.