| 1 | import { assert, describe, it } from "@effect/vitest" |
| 2 | import { Effect, Option, SynchronizedRef } from "effect" |
| 3 | |
| 4 | describe("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 | }) |