Skip to content

Commit e80af94

Browse files
committed
Fix
1 parent 93a26fa commit e80af94

File tree

1 file changed

+37
-54
lines changed

1 file changed

+37
-54
lines changed

src/test/java/com/thealgorithms/maths/EulerMethodTest.java

+37-54
Original file line numberDiff line numberDiff line change
@@ -6,75 +6,58 @@
66

77
import java.util.ArrayList;
88
import java.util.function.BiFunction;
9-
import org.junit.jupiter.api.Test;
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;
1013

11-
public class EulerMethodTest {
14+
class EulerMethodTest {
1215

13-
@Test
14-
public void testEulerStepBasic() {
15-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
16-
double result = EulerMethod.eulerStep(0.0, 0.1, 1.0, equation);
17-
assertEquals(1.1, result, 1e-9, "Euler step failed for basic equation.");
16+
@ParameterizedTest
17+
@MethodSource("eulerStepTestCases")
18+
void testEulerStep(double x, double h, double y, BiFunction<Double, Double, Double> equation, double expected) {
19+
double result = EulerMethod.eulerStep(x, h, y, equation);
20+
assertEquals(expected, result, 1e-9, "Euler step failed for the given equation.");
1821
}
1922

20-
@Test
21-
public void testEulerStepNegativeStepSize() {
22-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
23-
assertThrows(IllegalArgumentException.class, () -> EulerMethod.eulerStep(0.0, -0.1, 1.0, equation), "Expected IllegalArgumentException for negative step size.");
23+
static Stream<Arguments> eulerStepTestCases() {
24+
return Stream.of(Arguments.of(0.0, 0.1, 1.0, (BiFunction<Double, Double, Double>) ((x, y) -> x + y), 1.1));
2425
}
2526

26-
@Test
27-
public void testEulerStepZeroStepSize() {
28-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
29-
assertThrows(IllegalArgumentException.class, () -> EulerMethod.eulerStep(0.0, 0.0, 1.0, equation), "Expected IllegalArgumentException for zero step size.");
27+
@ParameterizedTest
28+
@MethodSource("eulerStepInvalidCases")
29+
void testEulerStepInvalidInput(double x, double h, double y, BiFunction<Double, Double, Double> equation, Class<? extends Exception> expectedExceptionClass) {
30+
assertThrows(expectedExceptionClass, () -> EulerMethod.eulerStep(x, h, y, equation));
3031
}
3132

32-
@Test
33-
public void testEulerFullBasic() {
34-
BiFunction<Double, Double, Double> equation = (x, y) -> x;
35-
ArrayList<double[]> result = EulerMethod.eulerFull(0, 1, 0.5, 0, equation);
36-
37-
assertEquals(3, result.size(), "Incorrect number of points in the result.");
38-
assertArrayEquals(new double[] {0.0, 0.0}, result.get(0), 1e-9, "Incorrect first point.");
39-
assertArrayEquals(new double[] {0.5, 0.0}, result.get(1), 1e-9, "Incorrect second point.");
40-
assertArrayEquals(new double[] {1.0, 0.25}, result.get(2), 1e-9, "Incorrect third point.");
41-
}
42-
43-
@Test
44-
public void testEulerFullWithExponentialEquation() {
45-
BiFunction<Double, Double, Double> equation = (x, y) -> y;
46-
ArrayList<double[]> result = EulerMethod.eulerFull(0, 1, 0.1, 1, equation);
47-
48-
assertEquals(12, result.size(), "Incorrect number of points in the result.");
49-
double[] lastPoint = result.get(result.size() - 1);
50-
assertEquals(1.0999999999999999, lastPoint[0], 1e-9, "Incorrect x-value of the last point.");
51-
assertEquals(2.8531167061100002, lastPoint[1], 1e-9, "Incorrect y-value of the last point.");
33+
static Stream<Arguments> eulerStepInvalidCases() {
34+
BiFunction<Double, Double, Double> dummyEquation = (x, y) -> x + y;
35+
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));
5236
}
5337

54-
@Test
55-
public void testEulerFullInvalidRange() {
56-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
57-
assertThrows(IllegalArgumentException.class, () -> EulerMethod.eulerFull(1, 0, 0.1, 1, equation), "Expected IllegalArgumentException for invalid range (xStart >= xEnd).");
38+
@ParameterizedTest
39+
@MethodSource("eulerFullTestCases")
40+
void testEulerFull(double xStart, double xEnd, double stepSize, double yInitial, BiFunction<Double, Double, Double> equation, int expectedSize, double[] expectedFirstPoint, double[] expectedLastPoint) {
41+
ArrayList<double[]> result = EulerMethod.eulerFull(xStart, xEnd, stepSize, yInitial, equation);
42+
assertEquals(expectedSize, result.size(), "Incorrect number of points in the result.");
43+
assertArrayEquals(expectedFirstPoint, result.get(0), 1e-9, "Incorrect first point.");
44+
assertArrayEquals(expectedLastPoint, result.get(result.size() - 1), 1e-9, "Incorrect last point.");
5845
}
5946

60-
@Test
61-
public void testEulerFullZeroStepSize() {
62-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
63-
assertThrows(IllegalArgumentException.class, () -> EulerMethod.eulerFull(0, 1, 0.0, 1, equation), "Expected IllegalArgumentException for zero step size.");
47+
static Stream<Arguments> eulerFullTestCases() {
48+
return Stream.of(Arguments.of(0.0, 1.0, 0.5, 0.0, (BiFunction<Double, Double, Double>) ((x, y) -> x), 3, new double[] {0.0, 0.0}, new double[] {1.0, 0.25}),
49+
Arguments.of(0.0, 1.0, 0.1, 1.0, (BiFunction<Double, Double, Double>) ((x, y) -> y), 12, new double[] {0.0, 1.0}, new double[] {1.0999999999999999, 2.8531167061100002}),
50+
Arguments.of(0.0, 0.1, 0.1, 1.0, (BiFunction<Double, Double, Double>) ((x, y) -> x + y), 2, new double[] {0.0, 1.0}, new double[] {0.1, 1.1}));
6451
}
6552

66-
@Test
67-
public void testEulerFullNegativeStepSize() {
68-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
69-
assertThrows(IllegalArgumentException.class, () -> EulerMethod.eulerFull(0, 1, -0.1, 1, equation), "Expected IllegalArgumentException for negative step size.");
53+
@ParameterizedTest
54+
@MethodSource("eulerFullInvalidCases")
55+
void testEulerFullInvalidInput(double xStart, double xEnd, double stepSize, double yInitial, BiFunction<Double, Double, Double> equation, Class<? extends Exception> expectedExceptionClass) {
56+
assertThrows(expectedExceptionClass, () -> EulerMethod.eulerFull(xStart, xEnd, stepSize, yInitial, equation));
7057
}
7158

72-
@Test
73-
public void testEulerFullSingleStep() {
74-
BiFunction<Double, Double, Double> equation = (x, y) -> x + y;
75-
ArrayList<double[]> result = EulerMethod.eulerFull(0, 0.1, 0.1, 1, equation);
76-
assertEquals(2, result.size(), "Incorrect number of points for single step.");
77-
assertArrayEquals(new double[] {0.0, 1.0}, result.get(0), 1e-9, "Incorrect first point.");
78-
assertArrayEquals(new double[] {0.1, 1.1}, result.get(1), 1e-9, "Incorrect second point.");
59+
static Stream<Arguments> eulerFullInvalidCases() {
60+
BiFunction<Double, Double, Double> dummyEquation = (x, y) -> x + y;
61+
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));
7962
}
8063
}

0 commit comments

Comments
 (0)