Skip to content

Commit b0cef5b

Browse files
authored
Enhance docs, add more tests in NumbersDifferentSigns (#5858)
1 parent 2ec4a1f commit b0cef5b

File tree

2 files changed

+47
-18
lines changed

2 files changed

+47
-18
lines changed

src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,29 @@
11
package com.thealgorithms.bitmanipulation;
22

33
/**
4-
* Numbers Different Signs
4+
* This class provides a method to determine whether two integers have
5+
* different signs. It utilizes the XOR operation on the two numbers:
6+
*
7+
* - If two numbers have different signs, their most significant bits
8+
* (sign bits) will differ, resulting in a negative XOR result.
9+
* - If two numbers have the same sign, the XOR result will be non-negative.
10+
*
11+
* Time Complexity: O(1) - Constant time operation.
12+
* Space Complexity: O(1) - No extra space used.
13+
*
514
* @author Bama Charan Chhandogi
615
*/
7-
816
public final class NumbersDifferentSigns {
917
private NumbersDifferentSigns() {
1018
}
1119

20+
/**
21+
* Determines if two integers have different signs using bitwise XOR.
22+
*
23+
* @param num1 the first integer
24+
* @param num2 the second integer
25+
* @return true if the two numbers have different signs, false otherwise
26+
*/
1227
public static boolean differentSigns(int num1, int num2) {
1328
return (num1 ^ num2) < 0;
1429
}

src/test/java/com/thealgorithms/bitmanipulation/NumbersDifferentSignsTest.java

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,30 +3,44 @@
33
import static org.junit.jupiter.api.Assertions.assertFalse;
44
import static org.junit.jupiter.api.Assertions.assertTrue;
55

6-
import org.junit.jupiter.api.Test;
6+
import java.util.stream.Stream;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.Arguments;
9+
import org.junit.jupiter.params.provider.MethodSource;
10+
711
/**
8-
* test Cases of Numbers Different Signs
12+
* Parameterized tests for NumbersDifferentSigns class, which checks
13+
* if two integers have different signs using bitwise XOR.
14+
*
915
* @author Bama Charan Chhandogi
1016
*/
1117
class NumbersDifferentSignsTest {
1218

13-
@Test
14-
void testDifferentSignsPositiveNegative() {
15-
assertTrue(NumbersDifferentSigns.differentSigns(2, -1));
19+
@ParameterizedTest
20+
@MethodSource("provideTestCases")
21+
void testDifferentSigns(int num1, int num2, boolean expected) {
22+
if (expected) {
23+
assertTrue(NumbersDifferentSigns.differentSigns(num1, num2));
24+
} else {
25+
assertFalse(NumbersDifferentSigns.differentSigns(num1, num2));
26+
}
1627
}
1728

18-
@Test
19-
void testDifferentSignsNegativePositive() {
20-
assertTrue(NumbersDifferentSigns.differentSigns(-3, 7));
21-
}
29+
private static Stream<Arguments> provideTestCases() {
30+
return Stream.of(
31+
// Different signs (positive and negative)
32+
Arguments.of(2, -1, Boolean.TRUE), Arguments.of(-3, 7, Boolean.TRUE),
2233

23-
@Test
24-
void testSameSignsPositive() {
25-
assertFalse(NumbersDifferentSigns.differentSigns(10, 20));
26-
}
34+
// Same signs (both positive)
35+
Arguments.of(10, 20, Boolean.FALSE), Arguments.of(0, 5, Boolean.FALSE), // 0 is considered non-negative
36+
37+
// Same signs (both negative)
38+
Arguments.of(-5, -8, Boolean.FALSE),
39+
40+
// Edge case: Large positive and negative values
41+
Arguments.of(Integer.MAX_VALUE, Integer.MIN_VALUE, Boolean.TRUE),
2742

28-
@Test
29-
void testSameSignsNegative() {
30-
assertFalse(NumbersDifferentSigns.differentSigns(-5, -8));
43+
// Edge case: Same number (positive and negative)
44+
Arguments.of(-42, -42, Boolean.FALSE), Arguments.of(42, 42, Boolean.FALSE));
3145
}
3246
}

0 commit comments

Comments
 (0)