Jump to content

Test integerness: Difference between revisions

Added D
No edit summary
(Added D)
Line 481:
000000000.000000000 IS AN INTEGER.
000000000.000000000+ 000000001.000000000i IS NOT AN INTEGER.</pre>
 
=={{header|D}}==
<lang D>import std.complex;
import std.math;
import std.meta;
import std.stdio;
import std.traits;
 
void main() {
print(25.000000);
print(24.999999);
print(24.999999, 0.00001);
print(25.000100);
print(-2.1e120);
print(-5e-2);
print(real.nan);
print(real.infinity);
print(5.0+0.0i);
print(5-5i);
}
 
void print(T)(T v, real tol = 0.0) {
writefln("Is %0.10s an integer? %s", v, isInteger(v, tol));
}
 
/// Test for plain integers
bool isInteger(T)(T v)
if (isIntegral!T) {
return true;
}
 
unittest {
assert(isInteger(5));
assert(isInteger(-5));
 
assert(isInteger(2L));
assert(isInteger(-2L));
}
 
/// Test for floating point
bool isInteger(T)(T v, real tol = 0.0)
if (isFloatingPoint!T) {
return (v - floor(v)) <= tol || (ceil(v) - v) <= tol;
}
 
unittest {
assert(isInteger(25.000000));
 
assert(!isInteger(24.999999));
assert(isInteger(24.999999, 0.00001));
}
 
/// Test for complex numbers
bool isInteger(T)(Complex!T v, real tol = 0.0) {
return isInteger(v.re, tol) && abs(v.im) <= tol;
}
 
unittest {
assert(isInteger(complex(1.0)));
assert(!isInteger(complex(1.0, 0.0001)));
 
assert(isInteger(complex(1.0, 0.00009), 0.0001));
}
 
/// Test for built-in complex types
bool isInteger(T)(T v, real tol = 0.0)
if (staticIndexOf!(Unqual!T, AliasSeq!(cfloat, cdouble, creal)) >= 0) {
return isInteger(v.re, tol) && abs(v.im) <= tol;
}
 
unittest {
assert(isInteger(1.0 + 0.0i));
assert(!isInteger(1.0 + 0.0001i));
 
assert(isInteger(1.0 + 0.00009i, 0.0001));
}
 
/// Test for built-in imaginary types
bool isInteger(T)(T v, real tol = 0.0)
if (staticIndexOf!(Unqual!T, AliasSeq!(ifloat, idouble, ireal)) >= 0) {
return abs(v) <= tol;
}
 
unittest {
assert(isInteger(0.0i));
assert(!isInteger(0.0001i));
 
assert(isInteger(0.00009i, 0.0001));
}</lang>
 
{{out}}
<pre>Is 25 an integer? true
Is 24.999999 an integer? false
Is 24.999999 an integer? true
Is 25.0001 an integer? false
Is -2.1e+120 an integer? true
Is -0.05 an integer? false
Is nan an integer? false
Is inf an integer? false
Is 5+0i an integer? true
Is 5-5i an integer? false</pre>
 
=={{header|Elixir}}==
1,452

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.