34 lines
850 B
TypeScript
34 lines
850 B
TypeScript
import { assert, describe, it } from "@effect/vitest"
|
|
import { Effect, Latch } from "effect"
|
|
|
|
describe("Latch", () => {
|
|
it.effect("release wakes current waiters and keeps the latch closed", () =>
|
|
Effect.gen(function*() {
|
|
const latch = yield* Latch.make(false)
|
|
const waiter = yield* Effect.forkChild(
|
|
Latch.await(latch),
|
|
{ startImmediately: true }
|
|
)
|
|
|
|
assert.isUndefined(waiter.pollUnsafe())
|
|
|
|
yield* latch.release
|
|
yield* Effect.yieldNow
|
|
yield* Effect.yieldNow
|
|
|
|
assert.isDefined(waiter.pollUnsafe())
|
|
}))
|
|
|
|
it.effect("isOpen reflects the state of the latch", () =>
|
|
Effect.gen(function*() {
|
|
const latch = yield* Latch.make(false)
|
|
|
|
assert.isFalse(latch.isOpen())
|
|
|
|
yield* latch.open
|
|
yield* Effect.yieldNow
|
|
|
|
assert.isTrue(latch.isOpen())
|
|
}))
|
|
})
|