blob: 88a43976e968665bb4970ab0cfc229386907d7c5 [file] [log] [blame]
@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);
}