Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
9f031bb287
|
@ -0,0 +1,8 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class AccountHolder {
|
||||||
|
private String firstName;
|
||||||
|
private String lastName;
|
||||||
|
|
||||||
|
AccountHolder jointAccountHolder = new AccountHolder();
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class ClassOne {
|
||||||
|
private int oneValue;
|
||||||
|
private ClassTwo clsTwoInstance = null;
|
||||||
|
|
||||||
|
public ClassOne() {
|
||||||
|
oneValue = 0;
|
||||||
|
clsTwoInstance = new ClassTwo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassOne(int oneValue, ClassTwo clsTwoInstance) {
|
||||||
|
this.oneValue = oneValue;
|
||||||
|
this.clsTwoInstance = clsTwoInstance;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class ClassTwo {
|
||||||
|
private int twoValue;
|
||||||
|
private ClassOne clsOneInstance = null;
|
||||||
|
|
||||||
|
public ClassTwo() {
|
||||||
|
twoValue = 10;
|
||||||
|
clsOneInstance = new ClassOne();
|
||||||
|
}
|
||||||
|
|
||||||
|
public ClassTwo(int twoValue, ClassOne clsOneInstance) {
|
||||||
|
this.twoValue = twoValue;
|
||||||
|
this.clsOneInstance = clsOneInstance;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class InfiniteRecursionWithTerminationCondition {
|
||||||
|
public int calculateFactorial(final int number) {
|
||||||
|
return number == 1 ? 1 : number * calculateFactorial(number - 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class RecursionWithCorrectTerminationCondition {
|
||||||
|
public static int calculateFactorial(final int number) {
|
||||||
|
return number <= 1 ? 1 : number * calculateFactorial(number - 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
public class UnintendedInfiniteRecursion {
|
||||||
|
public int calculateFactorial(int number) {
|
||||||
|
return number * calculateFactorial(number - 1);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class AccountHolderUnitTest {
|
||||||
|
@Test(expected = StackOverflowError.class)
|
||||||
|
public void whenInstanciatingAccountHolder_thenThrowsException() {
|
||||||
|
AccountHolder holder = new AccountHolder();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class CyclicDependancyUnitTest {
|
||||||
|
@Test
|
||||||
|
public void whenInstanciatingClassOne_thenThrowsException() {
|
||||||
|
try {
|
||||||
|
ClassOne obj = new ClassOne();
|
||||||
|
fail();
|
||||||
|
} catch (StackOverflowError soe) {
|
||||||
|
soe.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,37 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
import static junit.framework.TestCase.assertEquals;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class InfiniteRecursionWithTerminationConditionUnitTest {
|
||||||
|
@Test
|
||||||
|
public void givenPositiveIntNoOne_whenCalcFact_thenThrowsException() {
|
||||||
|
int numToCalcFactorial = 1;
|
||||||
|
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
|
||||||
|
|
||||||
|
assertEquals(1, irtc.calculateFactorial(numToCalcFactorial));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenPositiveIntGtOne_whenCalcFact_thenThrowsException() {
|
||||||
|
int numToCalcFactorial = 5;
|
||||||
|
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
|
||||||
|
|
||||||
|
assertEquals(120, irtc.calculateFactorial(numToCalcFactorial));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenNegativeInt_whenCalcFact_thenThrowsException() {
|
||||||
|
try {
|
||||||
|
int numToCalcFactorial = -1;
|
||||||
|
InfiniteRecursionWithTerminationCondition irtc = new InfiniteRecursionWithTerminationCondition();
|
||||||
|
|
||||||
|
irtc.calculateFactorial(numToCalcFactorial);
|
||||||
|
fail();
|
||||||
|
} catch (StackOverflowError soe) {
|
||||||
|
soe.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
package com.baeldung.stackoverflowerror;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class UnintendedInfiniteRecursionUnitTest {
|
||||||
|
@Test(expected = StackOverflowError.class)
|
||||||
|
public void givenPositiveIntNoOne_whenCalFact_thenThrowsException() {
|
||||||
|
int numToCalcFactorial = 1;
|
||||||
|
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
|
||||||
|
|
||||||
|
uir.calculateFactorial(numToCalcFactorial);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = StackOverflowError.class)
|
||||||
|
public void givenPositiveIntGtOne_whenCalcFact_thenThrowsException() {
|
||||||
|
int numToCalcFactorial = 2;
|
||||||
|
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
|
||||||
|
|
||||||
|
uir.calculateFactorial(numToCalcFactorial);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(expected = StackOverflowError.class)
|
||||||
|
public void givenNegativeInt_whenCalcFact_thenThrowsException() {
|
||||||
|
int numToCalcFactorial = -1;
|
||||||
|
UnintendedInfiniteRecursion uir = new UnintendedInfiniteRecursion();
|
||||||
|
|
||||||
|
uir.calculateFactorial(numToCalcFactorial);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue