1import { assert, describe, it } from "@effect/vitest"
2import { AtomRef } from "effect/reactivity"
3
4describe("AtomRef", () => {
5 it("notifies each subscribed listener once when a listener resubscribes itself", () => {
6 const ref = AtomRef.make(0)
7 const calls = { A: 0, B: 0, C: 0 }
8
9 let unsubscribeA = () => {}
10 function A() {
11 calls.A++
12 unsubscribeA()
13 unsubscribeA = ref.subscribe(A)
14 }
15 unsubscribeA = ref.subscribe(A)
16 ref.subscribe(() => {
17 calls.B++
18 })
19 ref.subscribe(() => {
20 calls.C++
21 })
22
23 ref.set(1)
24
25 assert.deepStrictEqual(calls, { A: 1, B: 1, C: 1 })
26 })
27})