Skip to content

Commit 41b3d52

Browse files
Merge branch 'master' into fix/binary-search-2d-array-bounds
2 parents ca45522 + 51a0156 commit 41b3d52

6 files changed

Lines changed: 60 additions & 6 deletions

File tree

‎pom.xml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
<plugins>
6262
<plugin>
6363
<artifactId>maven-surefire-plugin</artifactId>
64-
<version>3.6.0</version>
64+
<version>3.6.1</version>
6565
<configuration>
6666
<forkNode implementation="org.apache.maven.plugin.surefire.extensions.SurefireForkNodeFactory"/>
6767
</configuration>
@@ -82,7 +82,7 @@
8282
<plugin>
8383
<groupId>org.jacoco</groupId>
8484
<artifactId>jacoco-maven-plugin</artifactId>
85-
<version>0.8.15</version>
85+
<version>0.8.16</version>
8686
<executions>
8787
<execution>
8888
<goals>

‎src/main/java/com/thealgorithms/maths/BinomialCoefficient.java‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,14 @@ private BinomialCoefficient() {
2121
* @param numberOfObjects Number of objects to be chosen from total_objects
2222
* @return number of ways in which no_of_objects objects can be chosen from total_objects
2323
* objects
24+
* @throws IllegalArgumentException if totalObjects or numberOfObjects is negative
2425
*/
2526

2627
public static int binomialCoefficient(int totalObjects, int numberOfObjects) {
28+
if (totalObjects < 0 || numberOfObjects < 0) {
29+
throw new IllegalArgumentException("Arguments must be non-negative.");
30+
}
31+
2732
// Base Case
2833
if (numberOfObjects > totalObjects) {
2934
return 0;

‎src/main/java/com/thealgorithms/searches/RabinKarpAlgorithm.java‎

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,14 @@ public static int search(String pattern, String text, int primeNumber) {
1313
int index = -1; // -1 here represents not found
1414
int patternLength = pattern.length();
1515
int textLength = text.length();
16-
int hashForPattern = 0;
17-
int hashForText = 0;
18-
int h = 1;
16+
if (patternLength > textLength) {
17+
return index;
18+
}
19+
20+
// long, so hash * ALPHABET_SIZE cannot overflow for large primes such as 1_000_000_007
21+
long hashForPattern = 0;
22+
long hashForText = 0;
23+
long h = 1;
1924

2025
// The value of h would be "pow(d, patternLength-1)%primeNumber"
2126
for (int i = 0; i < patternLength - 1; i++) {

‎src/test/java/com/thealgorithms/maths/BinomialCoefficientTest.java‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.thealgorithms.maths;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
45

56
import org.junit.jupiter.api.Test;
67

@@ -12,5 +13,14 @@ void testBinomialCoefficient() {
1213
assertEquals(792, BinomialCoefficient.binomialCoefficient(12, 5));
1314
assertEquals(84, BinomialCoefficient.binomialCoefficient(9, 3));
1415
assertEquals(1, BinomialCoefficient.binomialCoefficient(17, 17));
16+
assertEquals(0, BinomialCoefficient.binomialCoefficient(5, 6));
17+
assertEquals(1, BinomialCoefficient.binomialCoefficient(0, 0));
18+
}
19+
20+
@Test
21+
void testNegativeInputs() {
22+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(5, -1));
23+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-1, 5));
24+
assertThrows(IllegalArgumentException.class, () -> BinomialCoefficient.binomialCoefficient(-5, -2));
1525
}
1626
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package com.thealgorithms.matrix.matrixexponentiation;
2+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
3+
4+
import java.math.BigDecimal;
5+
import org.junit.jupiter.api.Test;
6+
class FibonacciTest {
7+
private static BigDecimal[][] matrix(String a, String b, String c, String d) {
8+
return new BigDecimal[][] {{new BigDecimal(a), new BigDecimal(b)}, {new BigDecimal(c), new BigDecimal(d)}};
9+
}
10+
@Test
11+
void testFibZeroReturnsIdentityMatrix() {
12+
assertArrayEquals(matrix("1", "0", "0", "1"), Fibonacci.fib(0));
13+
}
14+
@Test
15+
void testFibOne() {
16+
assertArrayEquals(matrix("1", "1", "1", "0"), Fibonacci.fib(1));
17+
}
18+
@Test
19+
void testFibEvenInput() {
20+
assertArrayEquals(matrix("2", "1", "1", "1"), Fibonacci.fib(2));
21+
}
22+
@Test
23+
void testFibOddInput() {
24+
assertArrayEquals(matrix("3", "2", "2", "1"), Fibonacci.fib(3));
25+
}
26+
@Test
27+
void testFibTen() {
28+
assertArrayEquals(matrix("89", "55", "55", "34"), Fibonacci.fib(10));
29+
}
30+
@Test
31+
void testFibLargeInput() {
32+
assertArrayEquals(matrix("20365011074", "12586269025", "12586269025", "7778742049"), Fibonacci.fib(50));
33+
}
34+
}

‎src/test/java/com/thealgorithms/searches/RabinKarpAlgorithmTest.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
class RabinKarpAlgorithmTest {
99

1010
@ParameterizedTest
11-
@CsvSource({"This is an example for rabin karp algorithmn, algorithmn, 101", "AAABBDDG, AAA, 137", "AAABBCCBB, BBCC, 101", "AAABBCCBB, BBCC, 131", "AAAABBBBCCC, CCC, 41", "ABCBCBCAAB, AADB, 293", "Algorithm The Algorithm, Algorithm, 101"})
11+
@CsvSource({"This is an example for rabin karp algorithmn, algorithmn, 101", "AAABBDDG, AAA, 137", "AAABBCCBB, BBCC, 101", "AAABBCCBB, BBCC, 131", "AAAABBBBCCC, CCC, 41", "ABCBCBCAAB, AADB, 293", "Algorithm The Algorithm, Algorithm, 101", "nzdjsjggwx, jggw, 1000000007", "AB, ABC, 101"})
1212
void rabinKarpAlgorithmTestExample(String txt, String pat, int q) {
1313
int indexFromOurAlgorithm = RabinKarpAlgorithm.search(pat, txt, q);
1414
int indexFromLinearSearch = txt.indexOf(pat);

0 commit comments

Comments
 (0)