[Header] let test_approx y e = let y' = calculate e in Float.abs (y' -. y) < 0.01 [Test] (* test 1 - simple arithmetic *) S(A(I(3),M(R(4.),I(5))),R(6.7)) |> test_approx 16.3 [Value] true [Test] (* test 2 - division *) D(I(32), I(7)) |> test_approx 4.57142857142857 [Value] true [Test] (* test 3 - simple sigma *) C(I(1),I(10),D(M(X,X),R(2.))) |> test_approx 192.5 [Value] true [Test] (* test 4 - simple integral *) L(I(0),R(17.18),D(I(1),A(X,I(10)))) |> test_approx 1. [Value] true [Test] (* test 5 - sigma index *) A(M(I(100), C(I(5),I(2),X)), C(I(3),A(I(1),I(2)),X)) |> test_approx 3. [Value] true [Test] (* test 6 - reversed integral *) L(R(17.18),I(0),D(I(1),A(X,I(10)))) |> test_approx (-1.) [Value] true [Test] (* test 7 - nested sigma *) C(I(1),I(5),M(X,C(S(M(X,X),X),M(X,X),M(X,I(2))))) |> test_approx 2128. [Value] true [Test] (* test 8 - nested integral *) C(I(3),I(5),M(L(M(X,I(2)),M(X,R(3.001)),S(M(X,I(2)),I(1))),X)) |> test_approx 1053.8 [Value] true [Test] (* test 9 - error 1 *) A(X,I(3)) |> calculate [Exception] Unbound [Test] (* test 10 - error 2 *) M(C(I(1),I(5),X),X) |> calculate [Exception] Unbound