| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| |
| assert(cos(0.0) == 1.0); |
| assert(cos(1.0).isClose(0.5403023059)); |
| assert(cos(3.0).isClose(-0.9899924966)); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.constants : PI; |
| import std.stdio : writefln; |
| |
| void someFunc() |
| { |
| real x = 30.0; |
| auto result = sin(x * (PI / 180)); // convert degrees to radians |
| writefln("The sine of %s degrees is %s", x, result); |
| } |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.traits : isIdentical; |
| import std.math.constants : PI; |
| import std.math.algebraic : sqrt; |
| |
| assert(isIdentical(tan(0.0), 0.0)); |
| assert(tan(PI).isClose(0, 0.0, 1e-10)); |
| assert(tan(PI / 3).isClose(sqrt(3.0))); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.traits : isNaN; |
| import std.math.constants : PI; |
| |
| assert(acos(0.0).isClose(1.570796327)); |
| assert(acos(0.5).isClose(PI / 3)); |
| assert(acos(PI).isNaN); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.traits : isIdentical, isNaN; |
| import std.math.constants : PI; |
| |
| assert(isIdentical(asin(0.0), 0.0)); |
| assert(asin(0.5).isClose(PI / 6)); |
| assert(asin(PI).isNaN); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.traits : isIdentical; |
| import std.math.constants : PI; |
| import std.math.algebraic : sqrt; |
| |
| assert(isIdentical(atan(0.0), 0.0)); |
| assert(atan(sqrt(3.0)).isClose(PI / 3)); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.constants : PI; |
| import std.math.algebraic : sqrt; |
| |
| assert(atan2(1.0, sqrt(3.0)).isClose(PI / 6)); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.constants : E; |
| import std.math.operations : isClose; |
| |
| assert(cosh(0.0) == 1.0); |
| assert(cosh(1.0).isClose((E + 1.0 / E) / 2)); |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.constants : E; |
| import std.math.operations : isClose; |
| import std.math.traits : isIdentical; |
| |
| enum sinh1 = (E - 1.0 / E) / 2; |
| import std.meta : AliasSeq; |
| static foreach (F; AliasSeq!(float, double, real)) |
| { |
| assert(isIdentical(sinh(F(0.0)), F(0.0))); |
| assert(sinh(F(1.0)).isClose(F(sinh1))); |
| } |
| } |
| |
| @safe unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.operations : isClose; |
| import std.math.traits : isIdentical; |
| |
| assert(isIdentical(tanh(0.0), 0.0)); |
| assert(tanh(1.0).isClose(sinh(1.0) / cosh(1.0))); |
| } |
| |
| @safe @nogc nothrow unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.traits : isIdentical, isNaN; |
| |
| assert(isNaN(acosh(0.9))); |
| assert(isNaN(acosh(real.nan))); |
| assert(isIdentical(acosh(1.0), 0.0)); |
| assert(acosh(real.infinity) == real.infinity); |
| assert(isNaN(acosh(0.5))); |
| } |
| |
| @safe @nogc nothrow unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.traits : isIdentical, isNaN; |
| |
| assert(isIdentical(asinh(0.0), 0.0)); |
| assert(isIdentical(asinh(-0.0), -0.0)); |
| assert(asinh(real.infinity) == real.infinity); |
| assert(asinh(-real.infinity) == -real.infinity); |
| assert(isNaN(asinh(real.nan))); |
| } |
| |
| @safe @nogc nothrow unittest |
| { |
| import std.math.trigonometry; |
| |
| import std.math.traits : isIdentical, isNaN; |
| |
| assert(isIdentical(atanh(0.0), 0.0)); |
| assert(isIdentical(atanh(-0.0),-0.0)); |
| assert(isNaN(atanh(real.nan))); |
| assert(isNaN(atanh(-real.infinity))); |
| assert(atanh(0.0) == 0); |
| } |
| |