1import { assert, describe, it } from "@effect/vitest"
2import { Effect, Option, SynchronizedRef } from "effect"
3
4describe("SynchronizedRef.modifySomeEffect", () => {
5 it.effect("supports callback-only currying", () =>
6 Effect.gen(function*() {
7 const ref = yield* SynchronizedRef.make(1)
8 const result = yield* SynchronizedRef.modifySomeEffect((value: number) =>
9 Effect.succeed(["updated", Option.some(value + 1)] as const)
10 )(ref)
11
12 assert.strictEqual(result, "updated")
13 assert.strictEqual(yield* SynchronizedRef.get(ref), 2)
14 }))
15
16 it.effect("preserves the value for Option.none", () =>
17 Effect.gen(function*() {
18 const ref = yield* SynchronizedRef.make(1)
19 const result = yield* SynchronizedRef.modifySomeEffect((_: number) =>
20 Effect.succeed(["unchanged", Option.none<number>()] as const)
21 )(ref)
22
23 assert.strictEqual(result, "unchanged")
24 assert.strictEqual(yield* SynchronizedRef.get(ref), 1)
25 }))
26})