Skip to content

Commit 15d97b6

Browse files
LaureRCeffect-bot
authored andcommitted
Add Hashmap.every (#4513)
1 parent 114fc95 commit 15d97b6

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

.changeset/lemon-flies-hunt.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"effect": minor
3+
---
4+
5+
Add HashMap.every

packages/effect/src/HashMap.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,3 +461,17 @@ export const some: {
461461
<K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => boolean
462462
<K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean
463463
} = HM.some
464+
465+
/**
466+
* Checks if all entries in a hashmap meets a specific condition.
467+
*
468+
* @param self - The hashmap to check.
469+
* @param predicate - The condition to test entries (value, key).
470+
*
471+
* @since 3.14.0
472+
* @category elements
473+
*/
474+
export const every: {
475+
<K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HashMap<K, A>) => boolean
476+
<K, A>(self: HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean
477+
} = HM.every

packages/effect/src/internal/hashMap.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,3 +555,12 @@ export const some: {
555555
return false
556556
}
557557
)
558+
559+
/** @internal */
560+
export const every: {
561+
<K, A>(predicate: (a: NoInfer<A>, k: K) => boolean): (self: HM.HashMap<K, A>) => boolean
562+
<K, A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean
563+
} = Dual.dual(
564+
2,
565+
<K, A>(self: HM.HashMap<K, A>, predicate: (a: A, k: K) => boolean): boolean => !some(self, (a, k) => !predicate(a, k))
566+
)

packages/effect/test/HashMap.test.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,19 @@ describe("HashMap", () => {
296296
deepStrictEqual(HM.some(mapWith3LettersMax, (value, key) => value.length > 1 && key === 1), true)
297297
})
298298

299+
it("every", () => {
300+
const mapWith3LettersMax = HM.make([0, "a"], [1, "bb"], [3, "ccc"])
301+
302+
deepStrictEqual(HM.every(mapWith3LettersMax, (value) => value.length > 2), false)
303+
deepStrictEqual(pipe(mapWith3LettersMax, HM.every((value) => value.length > 2)), false)
304+
305+
deepStrictEqual(HM.every(mapWith3LettersMax, (value) => value.length >= 1), true)
306+
307+
deepStrictEqual(HM.every(mapWith3LettersMax, (value, key) => value.length >= 1 && key === 0), false)
308+
309+
deepStrictEqual(HM.every(mapWith3LettersMax, (value, key) => value.length >= 1 && key >= 0), true)
310+
})
311+
299312
it("reduce", () => {
300313
const map1 = HM.make([key(0), value("a")], [key(1), value("b")])
301314
const result1 = pipe(map1, HM.reduce("", (acc, { s }) => acc.length > 0 ? `${acc},${s}` : s))

0 commit comments

Comments
 (0)