Skip to content

Commit 9f031bb

Browse files
Merge remote-tracking branch 'origin/master'
2 parents 737d2e1 + 1c1885d commit 9f031bb

10 files changed

Lines changed: 154 additions & 0 deletions
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class AccountHolder {
4+
private String firstName;
5+
private String lastName;
6+
7+
AccountHolder jointAccountHolder = new AccountHolder();
8+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class ClassOne {
4+
private int oneValue;
5+
private ClassTwo clsTwoInstance = null;
6+
7+
public ClassOne() {
8+
oneValue = 0;
9+
clsTwoInstance = new ClassTwo();
10+
}
11+
12+
public ClassOne(int oneValue, ClassTwo clsTwoInstance) {
13+
this.oneValue = oneValue;
14+
this.clsTwoInstance = clsTwoInstance;
15+
}
16+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class ClassTwo {
4+
private int twoValue;
5+
private ClassOne clsOneInstance = null;
6+
7+
public ClassTwo() {
8+
twoValue = 10;
9+
clsOneInstance = new ClassOne();
10+
}
11+
12+
public ClassTwo(int twoValue, ClassOne clsOneInstance) {
13+
this.twoValue = twoValue;
14+
this.clsOneInstance = clsOneInstance;
15+
}
16+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class InfiniteRecursionWithTerminationCondition {
4+
public int calculateFactorial(final int number) {
5+
return number == 1 ? 1 : number * calculateFactorial(number - 1);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class RecursionWithCorrectTerminationCondition {
4+
public static int calculateFactorial(final int number) {
5+
return number <= 1 ? 1 : number * calculateFactorial(number - 1);
6+
}
7+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
public class UnintendedInfiniteRecursion {
4+
public int calculateFactorial(int number) {
5+
return number * calculateFactorial(number - 1);
6+
}
7+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
import org.junit.Test;
4+
5+
public class AccountHolderUnitTest {
6+
@Test(expected = StackOverflowError.class)
7+
public void whenInstanciatingAccountHolder_thenThrowsException() {
8+
AccountHolder holder = new AccountHolder();
9+
}
10+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
import static org.junit.Assert.fail;
4+
5+
import org.junit.Test;
6+
7+
public class CyclicDependancyUnitTest {
8+
@Test
9+
public void whenInstanciatingClassOne_thenThrowsException() {
10+
try {
11+
ClassOne obj = new ClassOne();
12+
fail();
13+
} catch (StackOverflowError soe) {
14+
soe.printStackTrace();
15+
}
16+
}
17+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
import static junit.framework.TestCase.assertEquals;
4+
import static org.junit.Assert.fail;
5+
6+
import org.junit.Test;
7+
8+
public class InfiniteRecursionWithTerminationConditionUnitTest {
9+
@Test
10+
public void givenPositiveIntNoOne_whenCalcFact_thenThrowsException() {
11+
int numToCalcFactorial = 1;
12+
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
13+
14+
assertEquals(1, irtc.calculateFactorial(numToCalcFactorial));
15+
}
16+
17+
@Test
18+
public void givenPositiveIntGtOne_whenCalcFact_thenThrowsException() {
19+
int numToCalcFactorial = 5;
20+
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
21+
22+
assertEquals(120, irtc.calculateFactorial(numToCalcFactorial));
23+
}
24+
25+
@Test
26+
public void givenNegativeInt_whenCalcFact_thenThrowsException() {
27+
try {
28+
int numToCalcFactorial = -1;
29+
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
30+
31+
irtc.calculateFactorial(numToCalcFactorial);
32+
fail();
33+
} catch (StackOverflowError soe) {
34+
soe.printStackTrace();
35+
}
36+
}
37+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.baeldung.stackoverflowerror;
2+
3+
import org.junit.Test;
4+
5+
public class UnintendedInfiniteRecursionUnitTest {
6+
@Test(expected = StackOverflowError.class)
7+
public void givenPositiveIntNoOne_whenCalFact_thenThrowsException() {
8+
int numToCalcFactorial = 1;
9+
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
10+
11+
uir.calculateFactorial(numToCalcFactorial);
12+
}
13+
14+
@Test(expected = StackOverflowError.class)
15+
public void givenPositiveIntGtOne_whenCalcFact_thenThrowsException() {
16+
int numToCalcFactorial = 2;
17+
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
18+
19+
uir.calculateFactorial(numToCalcFactorial);
20+
}
21+
22+
@Test(expected = StackOverflowError.class)
23+
public void givenNegativeInt_whenCalcFact_thenThrowsException() {
24+
int numToCalcFactorial = -1;
25+
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
26+
27+
uir.calculateFactorial(numToCalcFactorial);
28+
}
29+
}

0 commit comments

Comments
 (0)