Enhance docs, add more tests in ArrayCombination (#5842)

This commit is contained in:
Hardik Pawar
2024-10-26 14:20:22 +05:30
committed by GitHub
parent 788f4d8b28
commit 009c2b38af
2 changed files with 51 additions and 21 deletions

View File

@ -1,13 +1,27 @@
package com.thealgorithms.bitmanipulation; package com.thealgorithms.bitmanipulation;
/** /**
* Is number power of 2 * Utility class for checking if a number is a power of two.
* A power of two is a number that can be expressed as 2^n where n is a non-negative integer.
* This class provides a method to determine if a given integer is a power of two using bit manipulation.
*
* @author Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi) * @author Bama Charan Chhandogi (https://github.com/BamaCharanChhandogi)
*/ */
public final class IsPowerTwo { public final class IsPowerTwo {
private IsPowerTwo() { private IsPowerTwo() {
} }
/**
* Checks if the given integer is a power of two.
*
* A number is considered a power of two if it is greater than zero and
* has exactly one '1' bit in its binary representation. This method
* uses the property that for any power of two (n), the expression
* (n & (n - 1)) will be zero.
*
* @param number the integer to check
* @return true if the number is a power of two, false otherwise
*/
public static boolean isPowerTwo(int number) { public static boolean isPowerTwo(int number) {
if (number <= 0) { if (number <= 0) {
return false; return false;

View File

@ -3,7 +3,10 @@ package com.thealgorithms.bitmanipulation;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test; import java.util.stream.Stream;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
/** /**
* Test case for IsPowerTwo class * Test case for IsPowerTwo class
@ -11,25 +14,38 @@ import org.junit.jupiter.api.Test;
*/ */
public class IsPowerTwoTest { public class IsPowerTwoTest {
@Test
public void testIsPowerTwo() {
// test some positive powers of 2
assertTrue(IsPowerTwo.isPowerTwo(1));
assertTrue(IsPowerTwo.isPowerTwo(2));
assertTrue(IsPowerTwo.isPowerTwo(4));
assertTrue(IsPowerTwo.isPowerTwo(16));
assertTrue(IsPowerTwo.isPowerTwo(1024));
// test some negative numbers @ParameterizedTest
assertFalse(IsPowerTwo.isPowerTwo(-1)); @MethodSource("provideNumbersForPowerTwo")
assertFalse(IsPowerTwo.isPowerTwo(-2)); public void testIsPowerTwo(int number, boolean expected) {
assertFalse(IsPowerTwo.isPowerTwo(-4)); if (expected) {
assertTrue(IsPowerTwo.isPowerTwo(number));
// test some numbers that are not powers of 2 } else {
assertFalse(IsPowerTwo.isPowerTwo(0)); assertFalse(IsPowerTwo.isPowerTwo(number));
assertFalse(IsPowerTwo.isPowerTwo(3)); }
assertFalse(IsPowerTwo.isPowerTwo(5)); }
assertFalse(IsPowerTwo.isPowerTwo(15));
assertFalse(IsPowerTwo.isPowerTwo(1000)); private static Stream<Arguments> provideNumbersForPowerTwo() {
return Stream.of(Arguments.of(1, Boolean.TRUE), // 2^0
Arguments.of(2, Boolean.TRUE), // 2^1
Arguments.of(4, Boolean.TRUE), // 2^2
Arguments.of(8, Boolean.TRUE), // 2^3
Arguments.of(16, Boolean.TRUE), // 2^4
Arguments.of(32, Boolean.TRUE), // 2^5
Arguments.of(64, Boolean.TRUE), // 2^6
Arguments.of(128, Boolean.TRUE), // 2^7
Arguments.of(256, Boolean.TRUE), // 2^8
Arguments.of(1024, Boolean.TRUE), // 2^10
Arguments.of(0, Boolean.FALSE), // 0 is not a power of two
Arguments.of(-1, Boolean.FALSE), // Negative number
Arguments.of(-2, Boolean.FALSE), // Negative number
Arguments.of(-4, Boolean.FALSE), // Negative number
Arguments.of(3, Boolean.FALSE), // 3 is not a power of two
Arguments.of(5, Boolean.FALSE), // 5 is not a power of two
Arguments.of(6, Boolean.FALSE), // 6 is not a power of two
Arguments.of(15, Boolean.FALSE), // 15 is not a power of two
Arguments.of(1000, Boolean.FALSE), // 1000 is not a power of two
Arguments.of(1023, Boolean.FALSE) // 1023 is not a power of two
);
} }
} }