diff --git a/.changeset/bumpy-pears-push.md b/.changeset/bumpy-pears-push.md new file mode 100644 index 00000000..495947d5 --- /dev/null +++ b/.changeset/bumpy-pears-push.md @@ -0,0 +1,5 @@ +--- +"@effect-atom/atom": patch +--- + +fix Result to consider waiting flag in equality diff --git a/packages/atom/src/Result.ts b/packages/atom/src/Result.ts index f1c3e2c8..181accf5 100644 --- a/packages/atom/src/Result.ts +++ b/packages/atom/src/Result.ts @@ -84,7 +84,7 @@ const ResultProto = { return pipeArguments(this, arguments) }, [Equal.symbol](this: Result, that: Result): boolean { - if (this._tag !== that._tag && this.waiting !== that.waiting) { + if (this._tag !== that._tag || this.waiting !== that.waiting) { return false } switch (this._tag) { diff --git a/packages/atom/test/Atom.test.ts b/packages/atom/test/Atom.test.ts index 76b58913..38cb17ee 100644 --- a/packages/atom/test/Atom.test.ts +++ b/packages/atom/test/Atom.test.ts @@ -1170,7 +1170,7 @@ describe("Atom", () => { // optimistic phase: the optimistic value is set, but the true value is not expect(r.get(atom)).toEqual(Result.success(0)) - expect(r.get(optimisticAtom)).toEqual(Result.success(1)) + expect(r.get(optimisticAtom)).toEqual(Result.success(1, { waiting: true })) latch.unsafeOpen() await Effect.runPromise(Effect.yieldNow()) diff --git a/packages/atom/test/Result.test.ts b/packages/atom/test/Result.test.ts index 36ca33d1..648eab24 100644 --- a/packages/atom/test/Result.test.ts +++ b/packages/atom/test/Result.test.ts @@ -1,5 +1,5 @@ import * as _ from "@effect-atom/atom/Result" -import { Cause } from "effect" +import { Cause, Equal } from "effect" import { describe, expect, it } from "vitest" describe("Result", () => { @@ -14,4 +14,14 @@ describe("Result", () => { expect(matcher(_.failure(Cause.empty))).toEqual("fail") expect(matcher(_.success(1))).toEqual(1) }) + + it("considers waiting flag in equality", () => { + const success = _.success("value") + const waiting = _.waiting(success) + + expect(Equal.isEqual(success)).toBe(true) + expect(Equal.isEqual(waiting)).toBe(true) + expect(Equal.equals(success, waiting)).toBe(false) + expect((success as any)[Equal.symbol](waiting)).toBe(false) + }) })