// Tags: JDK1.0
/* Copyright (C) 1999 Cygnus Solutions
Copyright (C) 2012 Pavel Tisnovsky <ptisnovs@redhat.com>
This file is part of Mauve.
Mauve is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
Mauve is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Mauve; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
package gnu.testlet.java.lang.Math;
import gnu.testlet.Testlet;
import gnu.testlet.TestHarness;
public class cos implements Testlet
{
public int getExpectedPass() { return 26; }
public int getExpectedFail() { return 0; }
public int getExpectedKnownFail() { return 0; }
/**
* Function (=static method) checked by this test.
*/
private static double testedFunction(double input)
{
return Math.cos(input);
}
/**
* These values are used as arguments to compute cos using Math.
*/
private static double[] inputValues =
{
Double.NaN,
Double.POSITIVE_INFINITY,
Double.NEGATIVE_INFINITY,
Double.MAX_VALUE,
Double.MIN_VALUE,
0.0,
Math.PI/4,
Math.PI/2,
Math.PI,
2*Math.PI,
4*Math.PI,
100*Math.PI,
1e10,
1e-10,
-0.0,
-Math.PI/4,
-Math.PI/2,
-Math.PI,
-2*Math.PI,
-4*Math.PI,
-100*Math.PI,
-1e10,
-1e-10,
};
/**
* These values are the expected results, obtained from the RI.
*/
private static double[] outputValues =
{
// output value input value
Double.NaN, // NaN
Double.NaN, // Infinity
Double.NaN, // -Infinity
-0.9999876894265599, // Double.MAX_VALUE
1.0, // Double.MIN_VALUE
1.0, // 0.0
0.7071067811865476, // Math.PI/4
6.123233995736766E-17, // Math.PI/2
-1.0, // Math.PI
1.0, // 2*Math.PI
1.0, // 4*Math.PI
1.0, // 100*Math.PI
0.873119622676856, // 1.0E10
1.0, // 1.0E-10
1.0, // -0.0
0.7071067811865476, // -Math.PI/4
6.123233995736766E-17, // -Math.PI/2
-1.0, // -Math.PI
1.0, // -2*Math.PI
1.0, // -4*Math.PI
1.0, // -100*Math.PI
0.873119622676856, // -1.0E10
1.0, // -1.0E-10
};
/**
* These values represent various NaN
*/
private static long[] NaNValues =
{
0x7fff800000000000L,
0xffff800000000000L,
0x7fff812345abcdefL,
0xffff812345abcdefL,
0x7fff000000000001L,
0xffff000000000001L,
0x7fff7654321fedcbL,
0xffff7654321fedcbL
};
/**
* Test not NaN values.
*/
private void testInputValues(TestHarness harness)
{
double res;
for (int i = 0; i < inputValues.length; ++i)
{
res = testedFunction(inputValues[i]);
// exact equality
if (Double.doubleToLongBits(res) != Double.doubleToLongBits(outputValues[i])) {
harness.todo(Double.doubleToLongBits(res), Double.doubleToLongBits(outputValues[i]));
} else {
harness.check(Double.doubleToLongBits(res), Double.doubleToLongBits(outputValues[i]));
}
}
}
public void test (TestHarness harness)
{
harness.check (new Double (Math.cos (0)).toString (), "1.0");
harness.check (new Double (Math.cos (Math.PI)).toString (), "-1.0");
harness.check (Math.abs (Math.cos (Math.PI/2))
<= 1.1102230246251565E-16);
// It's unreasonable to expect the result of this to be eactly
// zero, but 2^-53, the value of the constant used here, is 1ulp
// in the range of cos.
testInputValues(harness);
}
}