From 8dd3143fef89a19f17736fcec86c9ce86cedc727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Zalewski?= Date: Fri, 28 Feb 2020 19:16:40 +0100 Subject: [PATCH 1/2] Add object/{some,every} implementation --- object/every.test.ts | 27 +++++++++++++++++++++++++++ object/every.ts | 5 +++++ object/some.test.ts | 27 +++++++++++++++++++++++++++ object/some.ts | 5 +++++ 4 files changed, 64 insertions(+) create mode 100644 object/every.test.ts create mode 100644 object/every.ts create mode 100644 object/some.test.ts create mode 100644 object/some.ts diff --git a/object/every.test.ts b/object/every.test.ts new file mode 100644 index 00000000..f3ab400f --- /dev/null +++ b/object/every.test.ts @@ -0,0 +1,27 @@ +/* eslint-env jest */ +// @ts-ignore ambiguous import +import every from "./every.ts"; + +describe("every", () => { + it("test if every element passes the given predicate", () => { + const adult = ({ age }: { age: number }) => age >= 18; + + expect( + every(adult)({ + tom: { age: 25 }, + john: { age: 16 }, + alice: { age: 18 } + }) + ).toBe(false); + }); + + it("test if every element passes the given predicate", () => { + expect( + every((x: number) => x >= 0)({ + x: 5, + y: 3, + z: 0 + }) + ).toBe(true); + }); +}); diff --git a/object/every.ts b/object/every.ts new file mode 100644 index 00000000..c5392c27 --- /dev/null +++ b/object/every.ts @@ -0,0 +1,5 @@ +import entries from "./entries"; + +export default (f: (value: any, key: string, context: object) => boolean) => ( + xs: object +): boolean => entries(xs).every(([key, value]) => f(value, key, xs)); diff --git a/object/some.test.ts b/object/some.test.ts new file mode 100644 index 00000000..c602a28c --- /dev/null +++ b/object/some.test.ts @@ -0,0 +1,27 @@ +/* eslint-env jest */ +// @ts-ignore ambiguous import +import some from "./some.ts"; + +describe("some", () => { + it("test if any element passes the given predicate", () => { + const adult = ({ age }: { age: number }) => age >= 18; + + expect( + some(adult)({ + tom: { age: 25 }, + john: { age: 16 }, + alice: { age: 18 } + }) + ).toBe(true); + }); + + it("test if any element passes the given predicate", () => { + expect( + some((x: number) => x < 0)({ + x: 5, + y: 3, + z: 0 + }) + ).toBe(false); + }); +}); diff --git a/object/some.ts b/object/some.ts new file mode 100644 index 00000000..0fd2694a --- /dev/null +++ b/object/some.ts @@ -0,0 +1,5 @@ +import entries from "./entries"; + +export default (f: (value: any, key: string, context: object) => boolean) => ( + xs: object +): boolean => entries(xs).some(([key, value]) => f(value, key, xs)); From 77b3ff913d28b08bb1191181d7f877acde084fc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Przemys=C5=82aw=20Zalewski?= Date: Fri, 28 Feb 2020 19:17:20 +0100 Subject: [PATCH 2/2] Add object/{some,every} docs and regenerate code --- README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++ object/README.md | 52 +++++++++++++++++++++++++++++++++++++++++++++++ object/every.js | 4 ++++ object/every.json | 16 +++++++++++++++ object/every.md | 25 +++++++++++++++++++++++ object/index.js | 6 ++++++ object/index.ts | 6 ++++++ object/some.js | 3 +++ object/some.json | 16 +++++++++++++++ object/some.md | 25 +++++++++++++++++++++++ 10 files changed, 205 insertions(+) create mode 100644 object/every.js create mode 100644 object/every.json create mode 100644 object/every.md create mode 100644 object/some.js create mode 100644 object/some.json create mode 100644 object/some.md diff --git a/README.md b/README.md index 3da35b7a..8484e4d6 100644 --- a/README.md +++ b/README.md @@ -2026,6 +2026,32 @@ Checks if two objects are deeply equal. ``` +#### some + +Test if every element passes the given predicate. + +##### Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +##### Examples + + +```javascript +every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` + + #### filter Filters the given object with the given predicate. @@ -2271,6 +2297,32 @@ Checks if the given object is empty. ``` +#### some + +Test if any element passes the given predicate. + +##### Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +##### Examples + + +```javascript +some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` + + #### sort Sorts the given object by a comparator. diff --git a/object/README.md b/object/README.md index 3960c7c7..9706423d 100644 --- a/object/README.md +++ b/object/README.md @@ -98,6 +98,32 @@ Checks if two objects are deeply equal. ``` +# some + +Test if every element passes the given predicate. + +## Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +## Examples + + +```javascript +every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` + + # filter Filters the given object with the given predicate. @@ -343,6 +369,32 @@ Checks if the given object is empty. ``` +# some + +Test if any element passes the given predicate. + +## Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +## Examples + + +```javascript +some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` + + # sort Sorts the given object by a comparator. diff --git a/object/every.js b/object/every.js new file mode 100644 index 00000000..5f430f70 --- /dev/null +++ b/object/every.js @@ -0,0 +1,4 @@ +import entries from "./entries.js"; + +export default f => xs => + entries(xs).every(([key, value]) => f(value, key, xs)); diff --git a/object/every.json b/object/every.json new file mode 100644 index 00000000..58cd5bbd --- /dev/null +++ b/object/every.json @@ -0,0 +1,16 @@ +{ + "name": "some", + "description": "Test if every element passes the given predicate.", + "signature": "(\n f: (value: any, key: string, context: object) => boolean\n) => (xs: object) => boolean", + "examples": [ + { + "language": "javascript", + "content": "every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true" + }, + { + "language": "javascript", + "content": "every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false" + } + ], + "questions": ["TODO: List questions that may this function answers."] +} diff --git a/object/every.md b/object/every.md new file mode 100644 index 00000000..39520f99 --- /dev/null +++ b/object/every.md @@ -0,0 +1,25 @@ +# some + +Test if every element passes the given predicate. + +## Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +## Examples + + +```javascript +every(x => x >= 0)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +every(x => x > 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` + diff --git a/object/index.js b/object/index.js index 8155f772..9c72d664 100644 --- a/object/index.js +++ b/object/index.js @@ -4,6 +4,7 @@ import empty from "./empty.js"; import entries from "./entries.js"; import enumerable from "./enumerable.js"; import equals from "./equals.js"; +import every from "./every.js"; import filter from "./filter.js"; import find from "./find.js"; import findEntry from "./findEntry.js"; @@ -20,6 +21,7 @@ import mapKeys from "./mapKeys.js"; import mapValues from "./mapValues.js"; import merge from "./merge.js"; import none from "./none.js"; +import some from "./some.js"; import sort from "./sort.js"; export { @@ -29,6 +31,7 @@ export { entries, enumerable, equals, + every, filter, find, findEntry, @@ -45,6 +48,7 @@ export { mapValues, merge, none, + some, sort }; @@ -55,6 +59,7 @@ export default { entries, enumerable, equals, + every, filter, find, findEntry, @@ -71,5 +76,6 @@ export default { mapValues, merge, none, + some, sort }; diff --git a/object/index.ts b/object/index.ts index aee065b8..80544d55 100644 --- a/object/index.ts +++ b/object/index.ts @@ -4,6 +4,7 @@ import empty from "./empty"; import entries from "./entries"; import enumerable from "./enumerable"; import equals from "./equals"; +import every from "./every"; import filter from "./filter"; import find from "./find"; import findEntry from "./findEntry"; @@ -20,6 +21,7 @@ import mapKeys from "./mapKeys"; import mapValues from "./mapValues"; import merge from "./merge"; import none from "./none"; +import some from "./some"; import sort from "./sort"; export { @@ -29,6 +31,7 @@ export { entries, enumerable, equals, + every, filter, find, findEntry, @@ -45,6 +48,7 @@ export { mapValues, merge, none, + some, sort }; @@ -55,6 +59,7 @@ export default { entries, enumerable, equals, + every, filter, find, findEntry, @@ -71,5 +76,6 @@ export default { mapValues, merge, none, + some, sort }; diff --git a/object/some.js b/object/some.js new file mode 100644 index 00000000..793304ed --- /dev/null +++ b/object/some.js @@ -0,0 +1,3 @@ +import entries from "./entries.js"; + +export default f => xs => entries(xs).some(([key, value]) => f(value, key, xs)); diff --git a/object/some.json b/object/some.json new file mode 100644 index 00000000..da63a62d --- /dev/null +++ b/object/some.json @@ -0,0 +1,16 @@ +{ + "name": "some", + "description": "Test if any element passes the given predicate.", + "signature": "(\n f: (value: any, key: string, context: object) => boolean\n) => (xs: object) => boolean", + "examples": [ + { + "language": "javascript", + "content": "some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true" + }, + { + "language": "javascript", + "content": "some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false" + } + ], + "questions": ["TODO: List questions that may this function answers."] +} diff --git a/object/some.md b/object/some.md new file mode 100644 index 00000000..f20f536f --- /dev/null +++ b/object/some.md @@ -0,0 +1,25 @@ +# some + +Test if any element passes the given predicate. + +## Type signature + + +```typescript +( + f: (value: any, key: string, context: object) => boolean +) => (xs: object) => boolean +``` + + +## Examples + + +```javascript +some(x => x >= 4)({ x: 5, y: 3, z: 0 }); // ⇒ true +``` + +```javascript +some(x => x < 0)({ x: 5, y: 3, z: 0 }); // ⇒ false +``` +