
R := RealField(Ceiling(400*Log(2, 10)));

assert elt<R | 4, 3> eq 4*2^3;
assert R!CyclotomicField(2).1 eq -1;
assert R!QuadraticField(2).1 eq Sqrt(2);

time for i in [1 .. 100] do

    r := R!Root(Random([1 .. 500]), Random([1 .. 10]));
    s := R!Root(Random([1 .. 500]), Random([1 .. 10]));

    assert r + s eq s + r;
    assert r*s eq s*r;
    assert (r/s)*s - r lt 2^Floor(-Precision(R)*3/4);
    assert (r/s)*(s/r) - 1 lt 2^Floor(-Precision(R)*3/4);

    assert r - s eq -(s - r);

    assert Sin(Arcsin(Sin(r))) - Sin(r) lt 2^Floor(-Precision(R)*3/4);
    assert Cos(Arccos(Cos(r))) - Cos(r) lt 2^Floor(-Precision(R)*3/4);
    assert Tan(Arctan(Tan(r))) - Tan(r) lt 2^Floor(-Precision(R)*3/4);
    assert Sec(Arcsec(Sec(r))) - Sec(r) lt 2^Floor(-Precision(R)*3/4);
    assert Cosec(Arccosec(Cosec(r))) - Cosec(r) lt 2^Floor(-Precision(R)*3/4);
    assert Cot(Arccot(Cot(r))) - Cot(r) lt 2^Floor(-Precision(R)*3/4);

    assert Sinh(Argsinh(Sinh(s))) - Sinh(s) lt 2^Floor(-Precision(R)*3/4);
    assert Cosh(Argcosh(Cosh(s))) - Cosh(s) lt 2^Floor(-Precision(R)*3/4);
    assert Tanh(Argtanh(Tanh(s))) - Tanh(s) lt 2^Floor(-Precision(R)*3/4);
    assert Sech(Argsech(Sech(s))) - Sech(s) lt 2^Floor(-Precision(R)*3/4);
    assert Cosech(Argcosech(Cosech(s))) - Cosech(s) lt 2^Floor(-Precision(R)*3/4);
    assert Coth(Argcoth(Coth(s))) - Coth(s) lt 2^Floor(-Precision(R)*3/4);

end for;
