Files

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())
}))
})