|
6 | 6 |
|
7 | 7 | import java.util.ArrayList;
|
8 | 8 | 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; |
10 | 13 |
|
11 |
| -public class EulerMethodTest { |
| 14 | +class EulerMethodTest { |
12 | 15 |
|
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."); |
18 | 21 | }
|
19 | 22 |
|
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)); |
24 | 25 | }
|
25 | 26 |
|
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)); |
30 | 31 | }
|
31 | 32 |
|
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)); |
52 | 36 | }
|
53 | 37 |
|
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."); |
58 | 45 | }
|
59 | 46 |
|
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})); |
64 | 51 | }
|
65 | 52 |
|
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)); |
70 | 57 | }
|
71 | 58 |
|
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)); |
79 | 62 | }
|
80 | 63 | }
|
0 commit comments