diff --git a/src/core/lib/Arithmetic.mjs b/src/core/lib/Arithmetic.mjs index 7c10855fa..5fbc5771b 100644 --- a/src/core/lib/Arithmetic.mjs +++ b/src/core/lib/Arithmetic.mjs @@ -108,14 +108,17 @@ export function mean(data) { * @returns {BigNumber} */ export function median(data) { - if ((data.length % 2) === 0 && data.length > 0) { + if (data.length > 0) { data.sort(function(a, b) { return a.minus(b); }); - const first = data[Math.floor(data.length / 2)]; - const second = data[Math.floor(data.length / 2) - 1]; - return mean([first, second]); - } else { + + if ((data.length % 2) === 0) { + const first = data[Math.floor(data.length / 2)]; + const second = data[Math.floor(data.length / 2) - 1]; + return mean([first, second]); + } + return data[Math.floor(data.length / 2)]; } } diff --git a/tests/node/index.mjs b/tests/node/index.mjs index f872f8f48..c5baeedd7 100644 --- a/tests/node/index.mjs +++ b/tests/node/index.mjs @@ -22,6 +22,7 @@ import "./tests/File.mjs"; import "./tests/Dish.mjs"; import "./tests/NodeDish.mjs"; import "./tests/Utils.mjs"; +import "./tests/Arithmetic.mjs"; import "./tests/Categories.mjs"; import "./tests/lib/BigIntUtils.mjs"; diff --git a/tests/node/tests/Arithmetic.mjs b/tests/node/tests/Arithmetic.mjs new file mode 100644 index 000000000..eb72a8386 --- /dev/null +++ b/tests/node/tests/Arithmetic.mjs @@ -0,0 +1,17 @@ +import assert from "assert"; +import BigNumber from "bignumber.js"; +import it from "../assertionHandler.mjs"; +import TestRegister from "../../lib/TestRegister.mjs"; +import { median } from "../../../src/core/lib/Arithmetic.mjs"; + +TestRegister.addApiTests([ + it("Arithmetic: median sorts odd-length input", () => { + const result = median([new BigNumber(10), new BigNumber(1), new BigNumber(2)]); + assert.strictEqual(result.toString(), "2"); + }), + + it("Arithmetic: median keeps even-length behavior", () => { + const result = median([new BigNumber(10), new BigNumber(1), new BigNumber(2), new BigNumber(5)]); + assert.strictEqual(result.toString(), "3.5"); + }), +]);