Skip to content

Instantly share code, notes, and snippets.

@leandrob13
Last active February 25, 2018 02:01
Show Gist options
  • Save leandrob13/7e10700e9f9e8fd8ca5d1e3306dce9d8 to your computer and use it in GitHub Desktop.
Save leandrob13/7e10700e9f9e8fd8ca5d1e3306dce9d8 to your computer and use it in GitHub Desktop.
import minitest.SimpleTestSuite
import monix.execution.Scheduler
object TaskLocalSuite extends SimpleTestSuite {
implicit val ec: Scheduler = monix.execution.Scheduler.Implicits.global
implicit val opts = Task.defaultOptions.enableLocalContextPropagation
testAsync("Local.apply") {
val test =
for {
local <- TaskLocal(0)
v1 <- local.read
_ <- Task.now(assertEquals(v1, 0))
_ <- local.write(100)
_ <- Task.shift
v2 <- local.read
_ <- Task.now(assertEquals(v2, 100))
_ <- local.clear
_ <- Task.shift
v3 <- local.read
_ <- Task.now(assertEquals(v3, 0))
} yield ()
test.runAsyncOpt
}
testAsync("Local.defaultLazy") {
var i = 0
val test =
for {
local <- TaskLocal.lazyDefault(Coeval { i += 1; i })
v1 <- local.read
_ <- Task.now(assertEquals(v1, 1))
_ <- local.write(100)
_ <- Task.shift
v2 <- local.read
_ <- Task.now(assertEquals(v2, 100))
_ <- local.clear
_ <- Task.shift
v3 <- local.read
_ <- Task.now(assertEquals(v3, 2))
} yield ()
test.runAsyncOpt
}
testAsync("TaskLocal!.bind") {
val test =
for {
local <- TaskLocal(0)
_ <- local.write(100)
_ <- Task.shift
v1 <- local.bind(200)(local.read.map(_ * 2))
_ <- Task.now(assertEquals(v1, 400))
v2 <- local.read
_ <- Task.now(assertEquals(v2, 100))
} yield ()
test.runAsyncOpt
}
testAsync("TaskLocal!.bindL") {
val test =
for {
local <- TaskLocal(0)
_ <- local.write(100)
_ <- Task.shift
v1 <- local.bindL(Task.eval(200))(local.read.map(_ * 2))
_ <- Task.now(assertEquals(v1, 400))
v2 <- local.read
_ <- Task.now(assertEquals(v2, 100))
} yield ()
test.runAsyncOpt
}
testAsync("TaskLocal!.bindClear") {
val test =
for {
local <- TaskLocal(200)
_ <- local.write(100)
_ <- Task.shift
v1 <- local.bindClear(local.read.map(_ * 2))
_ <- Task.now(assertEquals(v1, 400))
v2 <- local.read
_ <- Task.now(assertEquals(v2, 100))
} yield ()
test.runAsyncOpt
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment