/
BisectionTests.cs
47 lines (43 loc) · 1.78 KB
/
BisectionTests.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using AssertExtensions;
using MechJebLib.Core;
using Xunit;
namespace MechJebLibTest.Maths
{
public class BisectionTests
{
[Fact]
private void SingularityTest()
{
double x, fx;
(x, fx) = Bisection.Solve((t, o) => 1.0 / t, -1.0, 1.0, null);
x.ShouldEqual(-4.9406564584124654E-324, 0);
fx.ShouldEqual(double.NegativeInfinity);
(x, fx) = Bisection.Solve((t, o) => 1.0 / t, 1.0, -1.0, null, 0, false);
x.ShouldEqual(-4.9406564584124654E-324, 0);
fx.ShouldEqual(double.NegativeInfinity);
(x, fx) = Bisection.Solve((t, o) => 1.0 / t, -1.0, 1.0, null, 0, false);
x.ShouldEqual(0, 0);
fx.ShouldEqual(double.PositiveInfinity);
(x, fx) = Bisection.Solve((t, o) => 1.0 / t, 1.0, -1.0, null);
x.ShouldEqual(0, 0);
fx.ShouldEqual(double.PositiveInfinity);
}
[Fact]
private void IrrationalTest()
{
double x, fx;
(x, fx) = Bisection.Solve((t, o) => 0.5 * t * t - 3.0, 2.0, 3.0, null);
x.ShouldEqual(2.4494897427831779, 0);
fx.ShouldEqual(-4.4408920985006262E-16);
(x, fx) = Bisection.Solve((t, o) => 0.5 * t * t - 3.0, 2.0, 3.0, null, 0, false);
x.ShouldEqual(2.4494897427831783, 0);
fx.ShouldEqual(4.4408920985006262E-16);
(x, fx) = Bisection.Solve((t, o) => 0.5 * t * t - 3.0, 3.0, 2.0, null);
x.ShouldEqual(2.4494897427831783, 0);
fx.ShouldEqual(4.4408920985006262E-16);
(x, fx) = Bisection.Solve((t, o) => 0.5 * t * t - 3.0, 3.0, 2.0, null, 0, false);
x.ShouldEqual(2.4494897427831779, 0);
fx.ShouldEqual(-4.4408920985006262E-16);
}
}
}