26 lines · 882 B · TypeScript
RawDownload
import { assert, it } from "@effect/vitest";import * as Deferred from "effect/Deferred";import * as Effect from "effect/Effect"; import { makeReplayRecorderDeferredRegistry } from "./replayRecorderDeferredRegistry.ts"; it.effect("atomically shares one deferred across concurrent get-or-create calls", () =>  Effect.gen(function* () {    const registry = yield* makeReplayRecorderDeferredRegistry();    const deferreds = yield* Effect.all(      Array.from({ length: 100 }, () => registry.getOrCreate("turn-1")),      { concurrency: "unbounded" },    );     for (const deferred of deferreds) {      assert.strictEqual(deferred, deferreds[0]);    }     yield* registry.succeed("turn-1");    assert.isTrue(yield* Deferred.isDone(deferreds[0]!));    yield* Effect.all(deferreds.map(Deferred.await), {      concurrency: "unbounded",      discard: true,    });  }),);