From 11887bb51ed059d03bfef5a3dd790f817a3847f2 Mon Sep 17 00:00:00 2001 From: Michael Arnaldi Date: Mon, 29 Apr 2024 13:03:22 +0200 Subject: [PATCH] Consider type of failure in Cause equality --- .changeset/tender-clouds-wash.md | 5 +++++ packages/effect/src/internal/cause.ts | 3 +++ packages/effect/test/Cause.test.ts | 4 ++++ 3 files changed, 12 insertions(+) create mode 100644 .changeset/tender-clouds-wash.md diff --git a/.changeset/tender-clouds-wash.md b/.changeset/tender-clouds-wash.md new file mode 100644 index 0000000000..5d823f5c30 --- /dev/null +++ b/.changeset/tender-clouds-wash.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +Consider type of failure in Cause equality diff --git a/packages/effect/src/internal/cause.ts b/packages/effect/src/internal/cause.ts index dbbac2de28..0600d94916 100644 --- a/packages/effect/src/internal/cause.ts +++ b/packages/effect/src/internal/cause.ts @@ -686,6 +686,7 @@ const evaluateCause = ( break } case OpCodes.OP_FAIL: { + _parallel = HashSet.add(_parallel, cause._tag) _parallel = HashSet.add(_parallel, cause.error) if (stack.length === 0) { return [_parallel, _sequential] @@ -694,6 +695,7 @@ const evaluateCause = ( break } case OpCodes.OP_DIE: { + _parallel = HashSet.add(_parallel, cause._tag) _parallel = HashSet.add(_parallel, cause.defect) if (stack.length === 0) { return [_parallel, _sequential] @@ -702,6 +704,7 @@ const evaluateCause = ( break } case OpCodes.OP_INTERRUPT: { + _parallel = HashSet.add(_parallel, cause._tag) _parallel = HashSet.add(_parallel, cause.fiberId as unknown) if (stack.length === 0) { return [_parallel, _sequential] diff --git a/packages/effect/test/Cause.test.ts b/packages/effect/test/Cause.test.ts index fe8ccdb813..e838f3ec6a 100644 --- a/packages/effect/test/Cause.test.ts +++ b/packages/effect/test/Cause.test.ts @@ -360,4 +360,8 @@ describe("Cause", () => { assert.strictEqual(Cause.pretty(Cause.fail([{ toString: "" }])), `Error: [{"toString":""}]`) }) }) + + it("equals keep account for the failure type", () => { + expect(Equal.equals(Cause.die(0), Cause.fail(0))).toBe(false) + }) })