|
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