diff --git a/packages/utilities/components/min.ts b/packages/utilities/components/min.ts new file mode 100644 index 000000000..1c9bf8e8b --- /dev/null +++ b/packages/utilities/components/min.ts @@ -0,0 +1,17 @@ +function calculate(a, b) { + return b < a ? b : a; +} + +function min(a?: number | Date | string, b?: number | Date | string) { + if (arguments.length === 0) { + return min; + } + if (arguments.length === 1) { + return b => { + return calculate(a, b); + }; + } + return calculate(a, b); +} + +export default min; diff --git a/packages/utilities/index.ts b/packages/utilities/index.ts new file mode 100644 index 000000000..cbb4abbf3 --- /dev/null +++ b/packages/utilities/index.ts @@ -0,0 +1 @@ +export { default as min } from "./components/min"; diff --git a/packages/utilities/tests/min.test.ts b/packages/utilities/tests/min.test.ts new file mode 100644 index 000000000..1d101ab5d --- /dev/null +++ b/packages/utilities/tests/min.test.ts @@ -0,0 +1,33 @@ +import { default as min } from "../components/min"; + +describe("min", () => { + it("returns the smaller of its two arguments", () => { + expect(min(-7, 7)).toEqual(-7); + expect(min(7, -7)).toEqual(-7); + }); + + it("works for any orderable type", () => { + var d1 = new Date("2001-01-01"); + var d2 = new Date("2002-02-02"); + + expect(min(d1, d2)).toEqual(d1); + expect(min(d2, d1)).toEqual(d1); + expect(min("a", "b")).toEqual("a"); + expect(min("b", "a")).toEqual("a"); + }); + it("returns is a function", () => { + expect(typeof min).toBe("function"); + }); + + it("returns a function after adding the min value", () => { + expect(typeof min(1)).toBe("function"); + }); + + it("is returning the min value", () => { + expect(min(1)(10)).toBe(1); + }); + + it("is returning the lower value value", () => { + expect(min(12)(10)).toBe(10); + }); +});