diff --git a/src/simple.ts b/src/simple.ts index 5d526a3..34d0aa9 100644 --- a/src/simple.ts +++ b/src/simple.ts @@ -21,6 +21,7 @@ export class LazyCalc { : precision >= 0 ? Math.min(precision, 292) : Math.max(precision, -292); + if (precision) { // Shift with exponential notation to avoid floating-point issues. // See [MDN](https://mdn.io/round#Examples) for more details. diff --git a/tests/unit/main.spec.ts b/tests/unit/main.spec.ts index a2d2c35..a44c4d7 100644 --- a/tests/unit/main.spec.ts +++ b/tests/unit/main.spec.ts @@ -5,55 +5,10 @@ describe("base class", () => { const base = LazyBase.lazy(1); expect(base.value()).toBe(1); }); - it("add", () => { - const base = LazyBase.lazy(1).add(4); - expect(base.value()).toBe(5); - }); - - it("subtract", () => { - const base = LazyBase.lazy(1).subtract(4); - expect(base.value()).toBe(-3); - }); - - it("multiply", () => { - const base = LazyBase.lazy(1).multiply(4); - expect(base.value()).toBe(4); - }); - it("multiply - float", () => { - const base = LazyBase.lazy(1.5).multiply(4); - expect(base.value()).toBe(6); - }); - - it("divide - round", () => { - const base = LazyBase.lazy(1.5) - .divide(2) - .round(2); - expect(base.value()).toBe(0.75); - }); - - it("divide - floor", () => { - const base = LazyBase.lazy(1.5) - .divide(2) - .floor(1); - expect(base.value()).toBe(0.7); - }); - it("divide - ceil", () => { - const base = LazyBase.lazy(1.5) - .divide(2) - .ceil(1); - expect(base.value()).toBe(0.8); - }); - it("default", () => { - const base = LazyBase.lazy(1.5) - .divide(0) - .default(99); - expect(base.value()).toBe(99); - }); - - it("do", () => { - const base = LazyBase.lazy({ num: 1.5 }) - .do((x: { num: number }) => x.num) - .multiply(2); - expect(base.value()).toBe(3); + it("stream with init value", () => { + const base1 = LazyBase.lazy(1); + const base2 = LazyBase.lazy(4); + const stream1 = LazyBase.stream(base1).add(base2); + expect(stream1.value()).toBe(5); }); }); diff --git a/tests/unit/simple.spec.ts b/tests/unit/simple.spec.ts new file mode 100644 index 0000000..24a3e7d --- /dev/null +++ b/tests/unit/simple.spec.ts @@ -0,0 +1,78 @@ +import { LazyBase } from "../../src/main"; + +describe("simple class", () => { + it("add", () => { + const base = LazyBase.lazy(1).add(4); + expect(base.value()).toBe(5); + }); + + it("subtract", () => { + const base = LazyBase.lazy(1).subtract(4); + expect(base.value()).toBe(-3); + }); + + it("multiply", () => { + const base = LazyBase.lazy(1).multiply(4); + expect(base.value()).toBe(4); + }); + it("multiply - float", () => { + const base = LazyBase.lazy(1.5).multiply(4); + expect(base.value()).toBe(6); + }); + + it("divide - round", () => { + const base = LazyBase.lazy(1.5) + .divide(2) + .round(2); + expect(base.value()).toBe(0.75); + }); + + it("divide - floor", () => { + const base = LazyBase.lazy(1.5) + .divide(2) + .floor(1); + expect(base.value()).toBe(0.7); + }); + it("divide - ceil", () => { + const base = LazyBase.lazy(1.5) + .divide(2) + .ceil(1); + expect(base.value()).toBe(0.8); + }); + + it("precision - invalid", () => { + const base = LazyBase.lazy(1.5) + .divide(0) + .ceil(1) + .default("m"); + expect(base.value()).toBe("m"); + }); + + it("precision - minus", () => { + const base = LazyBase.lazy(1.5) + .divide(1) + .ceil(-2) + .default("m"); + expect(base.value()).toBe(100); + }); + it("precision - null", () => { + const base = LazyBase.lazy(1.5) + .divide(1) + .ceil() + .default("m"); + expect(base.value()).toBe(2); + }); + it("default", () => { + const base = LazyBase.lazy(1.5) + .divide(0) + .default(99); + expect(base.value()).toBe(99); + }); + + it("do", () => { + const base = LazyBase.lazy({ num: 1.5 }) + .do((x: { num: number }) => x.num) + .multiply(2); + expect(base.value()).toBe(3); + }); +});