From 71531802a76296d1532c6a04ffed858c84ef0614 Mon Sep 17 00:00:00 2001 From: kevin9327 <5299031+kevin9327@users.noreply.github.com> Date: Thu, 12 Nov 2026 11:50:57 +0900 Subject: [PATCH] fix: reject non-binary input in BinaryToDecimal Digits other than 0 and 1 were coerced into the place-value sum, so binaryToDecimal('2') returned 2 and binaryToDecimal('102') returned 6. --- Conversions/BinaryToDecimal.js | 8 ++++++++ Conversions/test/BinaryToDecimal.test.js | 11 +++++++++++ 2 files changed, 19 insertions(+) diff --git a/Conversions/BinaryToDecimal.js b/Conversions/BinaryToDecimal.js index d149de0df2..3193783b80 100644 --- a/Conversions/BinaryToDecimal.js +++ b/Conversions/BinaryToDecimal.js @@ -1,4 +1,12 @@ export default function binaryToDecimal(binaryString) { + if (typeof binaryString !== 'string') { + throw new TypeError('Argument is not a string type') + } + + if (!/^[01]+$/.test(binaryString)) { + throw new Error('Argument is not a valid binary string!') + } + let decimalNumber = 0 const binaryDigits = binaryString.split('').reverse() // Splits the binary number into reversed single digits binaryDigits.forEach((binaryDigit, index) => { diff --git a/Conversions/test/BinaryToDecimal.test.js b/Conversions/test/BinaryToDecimal.test.js index 97f23aeb49..43a4a04896 100644 --- a/Conversions/test/BinaryToDecimal.test.js +++ b/Conversions/test/BinaryToDecimal.test.js @@ -12,4 +12,15 @@ describe('BinaryToDecimal', () => { it('expects to return correct hexadecimal value for padding-required binary', () => { expect(binaryToDecimal('1000101')).toBe(69) }) + + it('expects to throw for a non-string argument', () => { + expect(() => binaryToDecimal(1000)).toThrowError() + expect(() => binaryToDecimal(null)).toThrowError() + }) + + it('expects to throw for a non-binary string', () => { + expect(() => binaryToDecimal('2')).toThrowError() + expect(() => binaryToDecimal('102')).toThrowError() + expect(() => binaryToDecimal('')).toThrowError() + }) })