Commit bd80b5a8 authored by Ken Thompson's avatar Ken Thompson

test case for large angles in trig functions

R=rsc
https://golang.org/cl/157160
parent b2bc1db9
...@@ -169,6 +169,7 @@ func tolerance(a, b, e float64) bool { ...@@ -169,6 +169,7 @@ func tolerance(a, b, e float64) bool {
} }
return d < e; return d < e;
} }
func kindaclose(a, b float64) bool { return tolerance(a, b, 1e-8) }
func close(a, b float64) bool { return tolerance(a, b, 1e-14) } func close(a, b float64) bool { return tolerance(a, b, 1e-14) }
func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) } func veryclose(a, b float64) bool { return tolerance(a, b, 4e-16) }
...@@ -274,6 +275,42 @@ func TestHypot(t *testing.T) { ...@@ -274,6 +275,42 @@ func TestHypot(t *testing.T) {
} }
} }
// Check that math functions of high angle values
// return similar results to low angle values
func TestLargeSin(t *testing.T) {
large := float64(100000 * Pi);
for i := 0; i < len(vf); i++ {
f1 := Sin(vf[i]);
f2 := Sin(vf[i] + large);
if !kindaclose(f1, f2) {
t.Errorf("Sin(%g) = %g, want %g\n", vf[i]+large, f1, f2)
}
}
}
func TestLargeCos(t *testing.T) {
large := float64(100000 * Pi);
for i := 0; i < len(vf); i++ {
f1 := Cos(vf[i]);
f2 := Cos(vf[i] + large);
if !kindaclose(f1, f2) {
t.Errorf("Cos(%g) = %g, want %g\n", vf[i]+large, f1, f2)
}
}
}
func TestLargeTan(t *testing.T) {
large := float64(100000 * Pi);
for i := 0; i < len(vf); i++ {
f1 := Tan(vf[i]);
f2 := Tan(vf[i] + large);
if !kindaclose(f1, f2) {
t.Errorf("Tan(%g) = %g, want %g\n", vf[i]+large, f1, f2)
}
}
}
// Check that math constants are accepted by compiler // Check that math constants are accepted by compiler
// and have right value (assumes strconv.Atof works). // and have right value (assumes strconv.Atof works).
// http://code.google.com/p/go/issues/detail?id=201 // http://code.google.com/p/go/issues/detail?id=201
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment