0.2.0 #5
@@ -208,6 +208,31 @@ describe("Lens", () => {
|
||||
expect(result[1]).toBe(25)
|
||||
})
|
||||
|
||||
test("modifyEffect updates are atomic under concurrency", async () => {
|
||||
const iterations = 100
|
||||
|
||||
const result = await Effect.runPromise(Effect.flatMap(
|
||||
SubscriptionRef.make({ count: 0 }),
|
||||
parent => {
|
||||
const countLens = Lens.focusObjectOn(Lens.fromSubscriptionRef(parent), "count")
|
||||
|
||||
return Effect.flatMap(
|
||||
Effect.forEach(
|
||||
Array.from({ length: iterations }),
|
||||
() => Lens.updateEffect(
|
||||
countLens,
|
||||
count => Effect.as(Effect.yieldNow(), count + 1),
|
||||
),
|
||||
{ concurrency: "unbounded", discard: true },
|
||||
),
|
||||
() => parent.get,
|
||||
)
|
||||
},
|
||||
))
|
||||
|
||||
expect(result.count).toBe(iterations)
|
||||
})
|
||||
|
||||
test("focusObjectOn focuses a nested property without touching other fields", async () => {
|
||||
const [initialCount, updatedState] = await Effect.runPromise(
|
||||
Effect.flatMap(
|
||||
|
||||
Reference in New Issue
Block a user