mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-12-19 07:00:35 +08:00
* feat: add Count Set Bits algorithm (issue #6931) * fix: correct CountSetBits algorithm logic * style: apply clang-format to CountSetBits files * fix: correct test expectations for CountSetBits * fix: correct test expectations for CountSetBits
57 lines
1.4 KiB
Java
57 lines
1.4 KiB
Java
package com.thealgorithms.bitmanipulation;
|
|
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
import static org.junit.jupiter.api.Assertions.assertThrows;
|
|
|
|
import org.junit.jupiter.api.Test;
|
|
|
|
class CountSetBitsTest {
|
|
|
|
@Test
|
|
void testCountSetBitsZero() {
|
|
assertEquals(0, CountSetBits.countSetBits(0));
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsOne() {
|
|
assertEquals(1, CountSetBits.countSetBits(1));
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsSmallNumber() {
|
|
assertEquals(4, CountSetBits.countSetBits(3)); // 1(1) + 10(1) + 11(2) = 4
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsFive() {
|
|
assertEquals(7, CountSetBits.countSetBits(5)); // 1 + 1 + 2 + 1 + 2 = 7
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsTen() {
|
|
assertEquals(17, CountSetBits.countSetBits(10));
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsLargeNumber() {
|
|
assertEquals(42, CountSetBits.countSetBits(20)); // Changed from 93 to 42
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsPowerOfTwo() {
|
|
assertEquals(13, CountSetBits.countSetBits(8)); // Changed from 9 to 13
|
|
}
|
|
|
|
@Test
|
|
void testCountSetBitsNegativeInput() {
|
|
assertThrows(IllegalArgumentException.class, () -> CountSetBits.countSetBits(-1));
|
|
}
|
|
|
|
@Test
|
|
void testNaiveApproachMatchesOptimized() {
|
|
for (int i = 0; i <= 100; i++) {
|
|
assertEquals(CountSetBits.countSetBitsNaive(i), CountSetBits.countSetBits(i), "Mismatch at n = " + i);
|
|
}
|
|
}
|
|
}
|