From ab81a1672b05c05bb4e6b8d15bf4fe8859266f8f Mon Sep 17 00:00:00 2001 From: "mathias.chouet" <mathias.chouet@irstea.fr> Date: Thu, 16 May 2019 12:25:43 +0200 Subject: [PATCH] Update floatAndDivMod function, update jasmine tests for real numbers comparison --- spec/real.spec.ts | 39 +++++++++++++++++++++++++++++++++++++++ src/base.ts | 4 ++++ 2 files changed, 43 insertions(+) create mode 100644 spec/real.spec.ts diff --git a/spec/real.spec.ts b/spec/real.spec.ts new file mode 100644 index 00000000..ab261187 --- /dev/null +++ b/spec/real.spec.ts @@ -0,0 +1,39 @@ +import { floatDivAndMod, isEqual } from "../src/base"; + +/** + * Tests d'égalité, de divisions entières et de modulo, à la tolérance près + */ + +const divAndModCases = [ + { D: 3, d: 0.2, q: 15, r: 0 }, + { D: 3, d: 0.1, q: 30, r: 0 }, + { D: 3, d: 0.3, q: 10, r: 0 }, + { D: 3, d: 3, q: 1, r: 0 }, + { D: 3, d: 3.00000000001, q: 1, r: 0 } +]; + +for (const c of divAndModCases) { + describe("real numbers division and modulo - ", () => { + it(`(${c.D} / ${c.d}) should be ${c.q}, (${c.D} % ${c.d}) should be ${c.r}`, () => { + const divAndMod = floatDivAndMod(c.D, c.d); + expect(divAndMod.q).toBe(c.q); + expect(divAndMod.r).toBe(c.r); + }); + }); +} + +const eqCases = [ + { a: 0, b: 0, eq: true }, + { a: 0, b: 0.0000000000001, eq: true }, + { a: 0.0000000000001, b: 0, eq: true }, + { a: 0.0000000000001, b: 0.0000000000001, eq: true }, + { a: 0, b: 0.1, eq: false } +]; + +for (const c of eqCases) { + describe("real numbers equality - ", () => { + it(c.a + " should " + (c.eq ? "" : "not ") + " be equal to " + c.b, () => { + expect(isEqual(c.a, c.b)).toBe(c.eq); + }); + }); +} diff --git a/src/base.ts b/src/base.ts index 40c54156..9b0c9494 100644 --- a/src/base.ts +++ b/src/base.ts @@ -96,5 +96,9 @@ export function floatDivAndMod(a: number, b: number, e: number = 1E-7): { q: num q++; } } + // si le modulo est nul à un pouïème, il est nul + if (isEqual(r, 0)) { + r = 0; + } return { q, r }; } -- GitLab