diff --git a/Bit-Manipulation/EvenorOdd.js b/Bit-Manipulation/EvenorOdd.js new file mode 100644 index 0000000000..bc6169043d --- /dev/null +++ b/Bit-Manipulation/EvenorOdd.js @@ -0,0 +1,23 @@ +/** + * + * This script will check whether a number is even or odd + * using bit manipulation. + * Idea: + * A number can be determined as even or odd by the lsb(least significant bit) or the + * right most bit in binary representation + * if we simply perform an and operation with 1 and the number we can determine: + * eg: + * number & 1 == 1, the number is odd + * number & 1 == 0, the number is even + * + * More about it : + * https://www.geeksforgeeks.org/check-if-a-number-is-odd-or-even-using-bitwise-operators/ + * + */ + +export const evenOrOdd = (number) => { + if (typeof number !== 'number' || !Number.isInteger(number)) { + throw new Error('Input must be an integer.') + } + return number & 1 ? 'odd' : 'even' +} diff --git a/Bit-Manipulation/test/EvenorOdd.test.js b/Bit-Manipulation/test/EvenorOdd.test.js new file mode 100644 index 0000000000..a15558f761 --- /dev/null +++ b/Bit-Manipulation/test/EvenorOdd.test.js @@ -0,0 +1,39 @@ +import { evenOrOdd } from '../EvenorOdd' + +test('check evenOrOdd of 25 is odd', () => { + const res = evenOrOdd(25) + expect(res).toBe('odd') +}) + +test('check evenOrOdd of 36 is even', () => { + const res = evenOrOdd(36) + expect(res).toBe('even') +}) + +test('check evenOrOdd of 0 is even', () => { + const res = evenOrOdd(0) + expect(res).toBe('even') +}) + +test('check evenOrOdd of -13 is odd', () => { + const res = evenOrOdd(-13) + expect(res).toBe('odd') +}) + +test('check evenOrOdd of 4294967295 is odd', () => { + const res = evenOrOdd(4294967295) + expect(res).toBe('odd') +}) + +test('check evenOrOdd of -36 is even', () => { + const res = evenOrOdd(-36) + expect(res).toBe('even') +}) + +test('check evenOrOdd of 21.1 throws error', () => { + expect(() => evenOrOdd(21.1)).toThrow() +}) + +test('check evenOrOdd of {} throws error', () => { + expect(() => evenOrOdd({})).toThrow() +})