diff --git a/Bit-Manipulation/NextPowerOfTwo.js b/Bit-Manipulation/NextPowerOfTwo.js new file mode 100644 index 000000000..623469e4d --- /dev/null +++ b/Bit-Manipulation/NextPowerOfTwo.js @@ -0,0 +1,18 @@ +/** + * + * This script will find next power of two + * of given number. + * More about it: + * https://www.techiedelight.com/round-next-highest-power-2/ + * + */ + +export const nextPowerOfTwo = (n) => { + if (n > 0 && (n & (n - 1)) === 0) return n + let result = 1 + while (n > 0) { + result = result << 1 + n = n >> 1 + } + return result +} diff --git a/Bit-Manipulation/test/NextPowerOfTwo.test.js b/Bit-Manipulation/test/NextPowerOfTwo.test.js new file mode 100644 index 000000000..073224046 --- /dev/null +++ b/Bit-Manipulation/test/NextPowerOfTwo.test.js @@ -0,0 +1,18 @@ +import { nextPowerOfTwo } from '../NextPowerOfTwo' + +describe('NextPowerOfTwo', () => { + it.each` + input | result + ${0} | ${1} + ${1} | ${1} + ${2} | ${2} + ${3} | ${4} + ${5} | ${8} + ${125} | ${128} + ${1024} | ${1024} + ${10000} | ${16384} + `('returns $result when is given $input', ({ input, result }) => { + const res = nextPowerOfTwo(input) + expect(res).toBe(result) + }) +})