Skip to content

Commit 7e11e9b

Browse files
authored
Add tests for EulerMethod (#5769)
1 parent 9eff71b commit 7e11e9b

File tree

2 files changed

+80
-0
lines changed

2 files changed

+80
-0
lines changed

DIRECTORY.md

+1
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,7 @@
945945
* [DigitalRootTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/DigitalRootTest.java)
946946
* [DistanceFormulaTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/DistanceFormulaTest.java)
947947
* [DudeneyNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/DudeneyNumberTest.java)
948+
* [EulerMethodTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/EulerMethodTest.java)
948949
* [EulersFunctionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/EulersFunctionTest.java)
949950
* [FactorialRecursionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialRecursionTest.java)
950951
* [FactorialTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/maths/FactorialTest.java)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package com.thealgorithms.maths;
2+
3+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
4+
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertThrows;
6+
7+
import java.util.ArrayList;
8+
import java.util.function.BiFunction;
9+
import java.util.stream.Stream;
10+
import org.junit.jupiter.params.ParameterizedTest;
11+
import org.junit.jupiter.params.provider.Arguments;
12+
import org.junit.jupiter.params.provider.MethodSource;
13+
14+
class EulerMethodTest {
15+
16+
private static class EulerFullTestCase {
17+
double[] params;
18+
BiFunction<Double, Double, Double> equation;
19+
int expectedSize;
20+
double[] expectedFirstPoint;
21+
double[] expectedLastPoint;
22+
23+
EulerFullTestCase(double[] params, BiFunction<Double, Double, Double> equation, int expectedSize, double[] expectedFirstPoint, double[] expectedLastPoint) {
24+
this.params = params;
25+
this.equation = equation;
26+
this.expectedSize = expectedSize;
27+
this.expectedFirstPoint = expectedFirstPoint;
28+
this.expectedLastPoint = expectedLastPoint;
29+
}
30+
}
31+
32+
@ParameterizedTest
33+
@MethodSource("eulerStepTestCases")
34+
void testEulerStep(double x, double h, double y, BiFunction<Double, Double, Double> equation, double expected) {
35+
double result = EulerMethod.eulerStep(x, h, y, equation);
36+
assertEquals(expected, result, 1e-9, "Euler step failed for the given equation.");
37+
}
38+
39+
static Stream<Arguments> eulerStepTestCases() {
40+
return Stream.of(Arguments.of(0.0, 0.1, 1.0, (BiFunction<Double, Double, Double>) ((x, y) -> x + y), 1.1));
41+
}
42+
43+
@ParameterizedTest
44+
@MethodSource("eulerStepInvalidCases")
45+
void testEulerStepInvalidInput(double x, double h, double y, BiFunction<Double, Double, Double> equation, Class<? extends Exception> expectedExceptionClass) {
46+
assertThrows(expectedExceptionClass, () -> EulerMethod.eulerStep(x, h, y, equation));
47+
}
48+
49+
static Stream<Arguments> eulerStepInvalidCases() {
50+
BiFunction<Double, Double, Double> dummyEquation = (x, y) -> x + y;
51+
return Stream.of(Arguments.of(0.0, -0.1, 1.0, dummyEquation, IllegalArgumentException.class), Arguments.of(0.0, 0.0, 1.0, dummyEquation, IllegalArgumentException.class));
52+
}
53+
54+
@ParameterizedTest
55+
@MethodSource("eulerFullTestCases")
56+
void testEulerFull(EulerFullTestCase testCase) {
57+
ArrayList<double[]> result = EulerMethod.eulerFull(testCase.params[0], testCase.params[1], testCase.params[2], testCase.params[3], testCase.equation);
58+
assertEquals(testCase.expectedSize, result.size(), "Incorrect number of points in the result.");
59+
assertArrayEquals(testCase.expectedFirstPoint, result.get(0), 1e-9, "Incorrect first point.");
60+
assertArrayEquals(testCase.expectedLastPoint, result.get(result.size() - 1), 1e-9, "Incorrect last point.");
61+
}
62+
63+
static Stream<Arguments> eulerFullTestCases() {
64+
return Stream.of(Arguments.of(new EulerFullTestCase(new double[] {0.0, 1.0, 0.5, 0.0}, (x, y) -> x, 3, new double[] {0.0, 0.0}, new double[] {1.0, 0.25})),
65+
Arguments.of(new EulerFullTestCase(new double[] {0.0, 1.0, 0.1, 1.0}, (x, y) -> y, 12, new double[] {0.0, 1.0}, new double[] {1.0999999999999999, 2.8531167061100002})),
66+
Arguments.of(new EulerFullTestCase(new double[] {0.0, 0.1, 0.1, 1.0}, (x, y) -> x + y, 2, new double[] {0.0, 1.0}, new double[] {0.1, 1.1})));
67+
}
68+
69+
@ParameterizedTest
70+
@MethodSource("eulerFullInvalidCases")
71+
void testEulerFullInvalidInput(double xStart, double xEnd, double stepSize, double yInitial, BiFunction<Double, Double, Double> equation, Class<? extends Exception> expectedExceptionClass) {
72+
assertThrows(expectedExceptionClass, () -> EulerMethod.eulerFull(xStart, xEnd, stepSize, yInitial, equation));
73+
}
74+
75+
static Stream<Arguments> eulerFullInvalidCases() {
76+
BiFunction<Double, Double, Double> dummyEquation = (x, y) -> x + y;
77+
return Stream.of(Arguments.of(1.0, 0.0, 0.1, 1.0, dummyEquation, IllegalArgumentException.class), Arguments.of(0.0, 1.0, 0.0, 1.0, dummyEquation, IllegalArgumentException.class), Arguments.of(0.0, 1.0, -0.1, 1.0, dummyEquation, IllegalArgumentException.class));
78+
}
79+
}

0 commit comments

Comments
 (0)