Skip to content

Commit dec3b98

Browse files
authored
Refactor FibonacciJavaStreams and add unit tests (TheAlgorithms#4260)
1 parent ef4ef42 commit dec3b98

File tree

3 files changed

+75
-70
lines changed

3 files changed

+75
-70
lines changed

DIRECTORY.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,7 @@
608608
* [EggDroppingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/EggDroppingTest.java)
609609
* [KnapsackMemoizationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/KnapsackMemoizationTest.java)
610610
* [LevenshteinDistanceTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/LevenshteinDistanceTests.java)
611+
* [MinimumPathSumTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/MinimumPathSumTest.java)
611612
* [OptimalJobSchedulingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/OptimalJobSchedulingTest.java)
612613
* [PartitionProblemTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/PartitionProblemTest.java)
613614
* [SubsetCountTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/SubsetCountTest.java)
@@ -637,6 +638,7 @@
637638
* [FactorialTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialTest.java)
638639
* [FastInverseSqrtTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FastInverseSqrtTests.java)
639640
* [FFTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FFTTest.java)
641+
* [FibonacciJavaStreamsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FibonacciJavaStreamsTest.java)
640642
* [FibonacciNumberCheckTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FibonacciNumberCheckTest.java)
641643
* [FindMaxTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMaxTest.java)
642644
* [FindMinTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FindMinTest.java)
@@ -673,6 +675,7 @@
673675
* [SquareRootWithNewtonRaphsonTestMethod](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/SquareRootWithNewtonRaphsonTestMethod.java)
674676
* [StandardDeviationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/StandardDeviationTest.java)
675677
* [StandardScoreTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/StandardScoreTest.java)
678+
* [SumOfArithmeticSeriesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/SumOfArithmeticSeriesTest.java)
676679
* [SumOfDigitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/SumOfDigitsTest.java)
677680
* [SumWithoutArithmeticOperatorsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/SumWithoutArithmeticOperatorsTest.java)
678681
* [TestArmstrong](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/TestArmstrong.java)

src/main/java/com/thealgorithms/maths/FibonacciJavaStreams.java

Lines changed: 1 addition & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import java.math.BigDecimal;
44
import java.util.List;
5-
import java.util.Objects;
65
import java.util.Optional;
76
import java.util.stream.Stream;
87

@@ -14,7 +13,7 @@ public class FibonacciJavaStreams {
1413

1514
public static Optional<BigDecimal> calculate(final BigDecimal index) {
1615
if (index == null || index.compareTo(BigDecimal.ZERO) < 0) {
17-
return Optional.empty();
16+
throw new IllegalArgumentException("Input index cannot be null or negative!");
1817
}
1918

2019
if (index.compareTo(BigDecimal.ONE) < 0) {
@@ -30,72 +29,4 @@ public static Optional<BigDecimal> calculate(final BigDecimal index) {
3029

3130
return results.isEmpty() ? Optional.empty() : Optional.of(results.get(results.size() - 1));
3231
}
33-
34-
public static void assertThat(final Object actual, final Object expected) {
35-
if (!Objects.equals(actual, expected)) {
36-
throw new AssertionError(String.format("expected=%s but was actual=%s", expected, actual));
37-
}
38-
}
39-
40-
public static void main(final String[] args) {
41-
{
42-
final Optional<BigDecimal> result = calculate(new BigDecimal(-1));
43-
assertThat(result.isEmpty(), true);
44-
}
45-
{
46-
final Optional<BigDecimal> result = calculate(BigDecimal.ZERO);
47-
assertThat(result.isPresent(), true);
48-
result.ifPresent(value -> assertThat(value, BigDecimal.ZERO));
49-
}
50-
{
51-
final Optional<BigDecimal> result = calculate(BigDecimal.ONE);
52-
assertThat(result.isPresent(), true);
53-
result.ifPresent(value -> assertThat(value, BigDecimal.ONE));
54-
}
55-
{
56-
final Optional<BigDecimal> result = calculate(new BigDecimal(2));
57-
assertThat(result.isPresent(), true);
58-
result.ifPresent(value -> assertThat(value, BigDecimal.ONE));
59-
}
60-
{
61-
final Optional<BigDecimal> result = calculate(new BigDecimal(3));
62-
assertThat(result.isPresent(), true);
63-
result.ifPresent(value -> assertThat(value, new BigDecimal(2)));
64-
}
65-
{
66-
final Optional<BigDecimal> result = calculate(new BigDecimal(10));
67-
assertThat(result.isPresent(), true);
68-
result.ifPresent(value -> assertThat(value, new BigDecimal(55)));
69-
}
70-
{
71-
final Optional<BigDecimal> result = calculate(new BigDecimal(20));
72-
assertThat(result.isPresent(), true);
73-
result.ifPresent(value -> assertThat(value, new BigDecimal(6765)));
74-
}
75-
{
76-
final Optional<BigDecimal> result = calculate(new BigDecimal(30));
77-
assertThat(result.isPresent(), true);
78-
result.ifPresent(value -> assertThat(value, new BigDecimal(832040)));
79-
}
80-
{
81-
final Optional<BigDecimal> result = calculate(new BigDecimal(40));
82-
assertThat(result.isPresent(), true);
83-
result.ifPresent(value -> assertThat(value, new BigDecimal(102334155)));
84-
}
85-
{
86-
final Optional<BigDecimal> result = calculate(new BigDecimal(50));
87-
assertThat(result.isPresent(), true);
88-
result.ifPresent(value -> assertThat(value, new BigDecimal(12586269025L)));
89-
}
90-
{
91-
final Optional<BigDecimal> result = calculate(new BigDecimal(100));
92-
assertThat(result.isPresent(), true);
93-
result.ifPresent(value -> assertThat(value, new BigDecimal("354224848179261915075")));
94-
}
95-
{
96-
final Optional<BigDecimal> result = calculate(new BigDecimal(200));
97-
assertThat(result.isPresent(), true);
98-
result.ifPresent(value -> assertThat(value, new BigDecimal("280571172992510140037611932413038677189525")));
99-
}
100-
}
10132
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package com.thealgorithms.maths;
2+
3+
import java.math.BigDecimal;
4+
import java.util.Optional;
5+
import org.junit.jupiter.api.Assertions;
6+
import org.junit.jupiter.api.Test;
7+
8+
/**
9+
* @author Albina Gimaletdinova on 25/07/2023
10+
*/
11+
public class FibonacciJavaStreamsTest {
12+
private static final String EXCEPTION_MESSAGE = "Input index cannot be null or negative!";
13+
14+
@Test
15+
public void testWithNegativeIndexShouldThrowException() {
16+
Exception exception = Assertions.assertThrows(IllegalArgumentException.class, () -> FibonacciJavaStreams.calculate(new BigDecimal(-1)));
17+
Assertions.assertEquals(EXCEPTION_MESSAGE, exception.getMessage());
18+
}
19+
20+
@Test
21+
public void testCheckTheFirst4SequenceElements() {
22+
checkElement(BigDecimal.ZERO, BigDecimal.ZERO);
23+
checkElement(BigDecimal.ONE, BigDecimal.ONE);
24+
checkElement(new BigDecimal(2), BigDecimal.ONE);
25+
checkElement(new BigDecimal(3), new BigDecimal(2));
26+
}
27+
28+
@Test
29+
public void testCheck10thSequenceElement() {
30+
checkElement(new BigDecimal(10), new BigDecimal(55));
31+
}
32+
33+
@Test
34+
public void testCheck20thSequenceElement() {
35+
checkElement(new BigDecimal(20), new BigDecimal(6765));
36+
}
37+
38+
@Test
39+
public void testCheck30thSequenceElement() {
40+
checkElement(new BigDecimal(30), new BigDecimal(832040));
41+
}
42+
43+
@Test
44+
public void testCheck40thSequenceElement() {
45+
checkElement(new BigDecimal(40), new BigDecimal(102334155));
46+
}
47+
48+
@Test
49+
public void testCheck50thSequenceElement() {
50+
checkElement(new BigDecimal(50), new BigDecimal(12586269025L));
51+
}
52+
53+
@Test
54+
public void testCheck100thSequenceElement() {
55+
checkElement(new BigDecimal(100), new BigDecimal("354224848179261915075"));
56+
}
57+
58+
@Test
59+
public void testCheck200thSequenceElement() {
60+
checkElement(new BigDecimal(200), new BigDecimal("280571172992510140037611932413038677189525"));
61+
}
62+
63+
private static void checkElement(BigDecimal index, BigDecimal expected) {
64+
// when
65+
Optional<BigDecimal> result = FibonacciJavaStreams.calculate(index);
66+
67+
// then
68+
Assertions.assertTrue(result.isPresent());
69+
Assertions.assertEquals(result.get(), expected);
70+
}
71+
}

0 commit comments

Comments
 (0)