Source file src/math/arith_s390x_test.go

     1  // Copyright 2016 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // Tests whether the non vector routines are working, even when the tests are run on a
     6  // vector-capable machine.
     7  package math_test
     8  
     9  import (
    10  	. "math"
    11  	"testing"
    12  )
    13  
    14  func TestCosNovec(t *testing.T) {
    15  	if !HasVX {
    16  		t.Skipf("no vector support")
    17  	}
    18  	for i := 0; i < len(vf); i++ {
    19  		if f := CosNoVec(vf[i]); !veryclose(cos[i], f) {
    20  			t.Errorf("Cos(%g) = %g, want %g", vf[i], f, cos[i])
    21  		}
    22  	}
    23  	for i := 0; i < len(vfcosSC); i++ {
    24  		if f := CosNoVec(vfcosSC[i]); !alike(cosSC[i], f) {
    25  			t.Errorf("Cos(%g) = %g, want %g", vfcosSC[i], f, cosSC[i])
    26  		}
    27  	}
    28  }
    29  
    30  func TestCoshNovec(t *testing.T) {
    31  	if !HasVX {
    32  		t.Skipf("no vector support")
    33  	}
    34  	for i := 0; i < len(vf); i++ {
    35  		if f := CoshNoVec(vf[i]); !close(cosh[i], f) {
    36  			t.Errorf("Cosh(%g) = %g, want %g", vf[i], f, cosh[i])
    37  		}
    38  	}
    39  	for i := 0; i < len(vfcoshSC); i++ {
    40  		if f := CoshNoVec(vfcoshSC[i]); !alike(coshSC[i], f) {
    41  			t.Errorf("Cosh(%g) = %g, want %g", vfcoshSC[i], f, coshSC[i])
    42  		}
    43  	}
    44  }
    45  func TestSinNovec(t *testing.T) {
    46  	if !HasVX {
    47  		t.Skipf("no vector support")
    48  	}
    49  	for i := 0; i < len(vf); i++ {
    50  		if f := SinNoVec(vf[i]); !veryclose(sin[i], f) {
    51  			t.Errorf("Sin(%g) = %g, want %g", vf[i], f, sin[i])
    52  		}
    53  	}
    54  	for i := 0; i < len(vfsinSC); i++ {
    55  		if f := SinNoVec(vfsinSC[i]); !alike(sinSC[i], f) {
    56  			t.Errorf("Sin(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
    57  		}
    58  	}
    59  }
    60  
    61  func TestSinhNovec(t *testing.T) {
    62  	if !HasVX {
    63  		t.Skipf("no vector support")
    64  	}
    65  	for i := 0; i < len(vf); i++ {
    66  		if f := SinhNoVec(vf[i]); !close(sinh[i], f) {
    67  			t.Errorf("Sinh(%g) = %g, want %g", vf[i], f, sinh[i])
    68  		}
    69  	}
    70  	for i := 0; i < len(vfsinhSC); i++ {
    71  		if f := SinhNoVec(vfsinhSC[i]); !alike(sinhSC[i], f) {
    72  			t.Errorf("Sinh(%g) = %g, want %g", vfsinhSC[i], f, sinhSC[i])
    73  		}
    74  	}
    75  }
    76  
    77  // Check that math functions of high angle values
    78  // return accurate results. [Since (vf[i] + large) - large != vf[i],
    79  // testing for Trig(vf[i] + large) == Trig(vf[i]), where large is
    80  // a multiple of 2*Pi, is misleading.]
    81  func TestLargeCosNovec(t *testing.T) {
    82  	if !HasVX {
    83  		t.Skipf("no vector support")
    84  	}
    85  	large := float64(100000 * Pi)
    86  	for i := 0; i < len(vf); i++ {
    87  		f1 := cosLarge[i]
    88  		f2 := CosNoVec(vf[i] + large)
    89  		if !close(f1, f2) {
    90  			t.Errorf("Cos(%g) = %g, want %g", vf[i]+large, f2, f1)
    91  		}
    92  	}
    93  }
    94  
    95  func TestLargeSinNovec(t *testing.T) {
    96  	if !HasVX {
    97  		t.Skipf("no vector support")
    98  	}
    99  	large := float64(100000 * Pi)
   100  	for i := 0; i < len(vf); i++ {
   101  		f1 := sinLarge[i]
   102  		f2 := SinNoVec(vf[i] + large)
   103  		if !close(f1, f2) {
   104  			t.Errorf("Sin(%g) = %g, want %g", vf[i]+large, f2, f1)
   105  		}
   106  	}
   107  }
   108  
   109  func TestLargeTanNovec(t *testing.T) {
   110  	if !HasVX {
   111  		t.Skipf("no vector support")
   112  	}
   113  	large := float64(100000 * Pi)
   114  	for i := 0; i < len(vf); i++ {
   115  		f1 := tanLarge[i]
   116  		f2 := TanNovec(vf[i] + large)
   117  		if !close(f1, f2) {
   118  			t.Errorf("Tan(%g) = %g, want %g", vf[i]+large, f2, f1)
   119  		}
   120  	}
   121  }
   122  
   123  func TestTanNovec(t *testing.T) {
   124  	if !HasVX {
   125  		t.Skipf("no vector support")
   126  	}
   127  	for i := 0; i < len(vf); i++ {
   128  		if f := TanNovec(vf[i]); !veryclose(tan[i], f) {
   129  			t.Errorf("Tan(%g) = %g, want %g", vf[i], f, tan[i])
   130  		}
   131  	}
   132  	// same special cases as Sin
   133  	for i := 0; i < len(vfsinSC); i++ {
   134  		if f := TanNovec(vfsinSC[i]); !alike(sinSC[i], f) {
   135  			t.Errorf("Tan(%g) = %g, want %g", vfsinSC[i], f, sinSC[i])
   136  		}
   137  	}
   138  }
   139  
   140  func TestTanhNovec(t *testing.T) {
   141  	if !HasVX {
   142  		t.Skipf("no vector support")
   143  	}
   144  	for i := 0; i < len(vf); i++ {
   145  		if f := TanhNoVec(vf[i]); !veryclose(tanh[i], f) {
   146  			t.Errorf("Tanh(%g) = %g, want %g", vf[i], f, tanh[i])
   147  		}
   148  	}
   149  	for i := 0; i < len(vftanhSC); i++ {
   150  		if f := TanhNoVec(vftanhSC[i]); !alike(tanhSC[i], f) {
   151  			t.Errorf("Tanh(%g) = %g, want %g", vftanhSC[i], f, tanhSC[i])
   152  		}
   153  	}
   154  
   155  }
   156  
   157  func TestLog10Novec(t *testing.T) {
   158  	if !HasVX {
   159  		t.Skipf("no vector support")
   160  	}
   161  	for i := 0; i < len(vf); i++ {
   162  		a := Abs(vf[i])
   163  		if f := Log10NoVec(a); !veryclose(log10[i], f) {
   164  			t.Errorf("Log10(%g) = %g, want %g", a, f, log10[i])
   165  		}
   166  	}
   167  	if f := Log10NoVec(E); f != Log10E {
   168  		t.Errorf("Log10(%g) = %g, want %g", E, f, Log10E)
   169  	}
   170  	for i := 0; i < len(vflogSC); i++ {
   171  		if f := Log10NoVec(vflogSC[i]); !alike(logSC[i], f) {
   172  			t.Errorf("Log10(%g) = %g, want %g", vflogSC[i], f, logSC[i])
   173  		}
   174  	}
   175  }
   176  
   177  func TestLog1pNovec(t *testing.T) {
   178  	if !HasVX {
   179  		t.Skipf("no vector support")
   180  	}
   181  	for i := 0; i < len(vf); i++ {
   182  		a := vf[i] / 100
   183  		if f := Log1pNovec(a); !veryclose(log1p[i], f) {
   184  			t.Errorf("Log1p(%g) = %g, want %g", a, f, log1p[i])
   185  		}
   186  	}
   187  	a := 9.0
   188  	if f := Log1pNovec(a); f != Ln10 {
   189  		t.Errorf("Log1p(%g) = %g, want %g", a, f, Ln10)
   190  	}
   191  	for i := 0; i < len(vflogSC); i++ {
   192  		if f := Log1pNovec(vflog1pSC[i]); !alike(log1pSC[i], f) {
   193  			t.Errorf("Log1p(%g) = %g, want %g", vflog1pSC[i], f, log1pSC[i])
   194  		}
   195  	}
   196  }
   197  
   198  func TestAtanhNovec(t *testing.T) {
   199  	if !HasVX {
   200  		t.Skipf("no vector support")
   201  	}
   202  	for i := 0; i < len(vf); i++ {
   203  		a := vf[i] / 10
   204  		if f := AtanhNovec(a); !veryclose(atanh[i], f) {
   205  			t.Errorf("Atanh(%g) = %g, want %g", a, f, atanh[i])
   206  		}
   207  	}
   208  	for i := 0; i < len(vfatanhSC); i++ {
   209  		if f := AtanhNovec(vfatanhSC[i]); !alike(atanhSC[i], f) {
   210  			t.Errorf("Atanh(%g) = %g, want %g", vfatanhSC[i], f, atanhSC[i])
   211  		}
   212  	}
   213  }
   214  
   215  func TestAcosNovec(t *testing.T) {
   216  	if !HasVX {
   217  		t.Skipf("no vector support")
   218  	}
   219  	for i := 0; i < len(vf); i++ {
   220  		a := vf[i] / 10
   221  		if f := AcosNovec(a); !close(acos[i], f) {
   222  			t.Errorf("Acos(%g) = %g, want %g", a, f, acos[i])
   223  		}
   224  	}
   225  	for i := 0; i < len(vfacosSC); i++ {
   226  		if f := AcosNovec(vfacosSC[i]); !alike(acosSC[i], f) {
   227  			t.Errorf("Acos(%g) = %g, want %g", vfacosSC[i], f, acosSC[i])
   228  		}
   229  	}
   230  }
   231  
   232  func TestAsinNovec(t *testing.T) {
   233  	if !HasVX {
   234  		t.Skipf("no vector support")
   235  	}
   236  	for i := 0; i < len(vf); i++ {
   237  		a := vf[i] / 10
   238  		if f := AsinNovec(a); !veryclose(asin[i], f) {
   239  			t.Errorf("Asin(%g) = %g, want %g", a, f, asin[i])
   240  		}
   241  	}
   242  	for i := 0; i < len(vfasinSC); i++ {
   243  		if f := AsinNovec(vfasinSC[i]); !alike(asinSC[i], f) {
   244  			t.Errorf("Asin(%g) = %g, want %g", vfasinSC[i], f, asinSC[i])
   245  		}
   246  	}
   247  }
   248  
   249  func TestAcoshNovec(t *testing.T) {
   250  	if !HasVX {
   251  		t.Skipf("no vector support")
   252  	}
   253  	for i := 0; i < len(vf); i++ {
   254  		a := 1 + Abs(vf[i])
   255  		if f := AcoshNovec(a); !veryclose(acosh[i], f) {
   256  			t.Errorf("Acosh(%g) = %g, want %g", a, f, acosh[i])
   257  		}
   258  	}
   259  	for i := 0; i < len(vfacoshSC); i++ {
   260  		if f := AcoshNovec(vfacoshSC[i]); !alike(acoshSC[i], f) {
   261  			t.Errorf("Acosh(%g) = %g, want %g", vfacoshSC[i], f, acoshSC[i])
   262  		}
   263  	}
   264  }
   265  
   266  func TestAsinhNovec(t *testing.T) {
   267  	if !HasVX {
   268  		t.Skipf("no vector support")
   269  	}
   270  	for i := 0; i < len(vf); i++ {
   271  		if f := AsinhNovec(vf[i]); !veryclose(asinh[i], f) {
   272  			t.Errorf("Asinh(%g) = %g, want %g", vf[i], f, asinh[i])
   273  		}
   274  	}
   275  	for i := 0; i < len(vfasinhSC); i++ {
   276  		if f := AsinhNovec(vfasinhSC[i]); !alike(asinhSC[i], f) {
   277  			t.Errorf("Asinh(%g) = %g, want %g", vfasinhSC[i], f, asinhSC[i])
   278  		}
   279  	}
   280  }
   281  
   282  func TestErfNovec(t *testing.T) {
   283  	if !HasVX {
   284  		t.Skipf("no vector support")
   285  	}
   286  	for i := 0; i < len(vf); i++ {
   287  		a := vf[i] / 10
   288  		if f := ErfNovec(a); !veryclose(erf[i], f) {
   289  			t.Errorf("Erf(%g) = %g, want %g", a, f, erf[i])
   290  		}
   291  	}
   292  	for i := 0; i < len(vferfSC); i++ {
   293  		if f := ErfNovec(vferfSC[i]); !alike(erfSC[i], f) {
   294  			t.Errorf("Erf(%g) = %g, want %g", vferfSC[i], f, erfSC[i])
   295  		}
   296  	}
   297  }
   298  
   299  func TestErfcNovec(t *testing.T) {
   300  	if !HasVX {
   301  		t.Skipf("no vector support")
   302  	}
   303  	for i := 0; i < len(vf); i++ {
   304  		a := vf[i] / 10
   305  		if f := ErfcNovec(a); !veryclose(erfc[i], f) {
   306  			t.Errorf("Erfc(%g) = %g, want %g", a, f, erfc[i])
   307  		}
   308  	}
   309  	for i := 0; i < len(vferfcSC); i++ {
   310  		if f := ErfcNovec(vferfcSC[i]); !alike(erfcSC[i], f) {
   311  			t.Errorf("Erfc(%g) = %g, want %g", vferfcSC[i], f, erfcSC[i])
   312  		}
   313  	}
   314  }
   315  
   316  func TestAtanNovec(t *testing.T) {
   317  	if !HasVX {
   318  		t.Skipf("no vector support")
   319  	}
   320  	for i := 0; i < len(vf); i++ {
   321  		if f := AtanNovec(vf[i]); !veryclose(atan[i], f) {
   322  			t.Errorf("Atan(%g) = %g, want %g", vf[i], f, atan[i])
   323  		}
   324  	}
   325  	for i := 0; i < len(vfatanSC); i++ {
   326  		if f := AtanNovec(vfatanSC[i]); !alike(atanSC[i], f) {
   327  			t.Errorf("Atan(%g) = %g, want %g", vfatanSC[i], f, atanSC[i])
   328  		}
   329  	}
   330  }
   331  
   332  func TestAtan2Novec(t *testing.T) {
   333  	if !HasVX {
   334  		t.Skipf("no vector support")
   335  	}
   336  	for i := 0; i < len(vf); i++ {
   337  		if f := Atan2Novec(10, vf[i]); !veryclose(atan2[i], f) {
   338  			t.Errorf("Atan2(10, %g) = %g, want %g", vf[i], f, atan2[i])
   339  		}
   340  	}
   341  	for i := 0; i < len(vfatan2SC); i++ {
   342  		if f := Atan2Novec(vfatan2SC[i][0], vfatan2SC[i][1]); !alike(atan2SC[i], f) {
   343  			t.Errorf("Atan2(%g, %g) = %g, want %g", vfatan2SC[i][0], vfatan2SC[i][1], f, atan2SC[i])
   344  		}
   345  	}
   346  }
   347  
   348  func TestCbrtNovec(t *testing.T) {
   349  	if !HasVX {
   350  		t.Skipf("no vector support")
   351  	}
   352  	for i := 0; i < len(vf); i++ {
   353  		if f := CbrtNovec(vf[i]); !veryclose(cbrt[i], f) {
   354  			t.Errorf("Cbrt(%g) = %g, want %g", vf[i], f, cbrt[i])
   355  		}
   356  	}
   357  	for i := 0; i < len(vfcbrtSC); i++ {
   358  		if f := CbrtNovec(vfcbrtSC[i]); !alike(cbrtSC[i], f) {
   359  			t.Errorf("Cbrt(%g) = %g, want %g", vfcbrtSC[i], f, cbrtSC[i])
   360  		}
   361  	}
   362  }
   363  
   364  func TestLogNovec(t *testing.T) {
   365  	if !HasVX {
   366  		t.Skipf("no vector support")
   367  	}
   368  	for i := 0; i < len(vf); i++ {
   369  		a := Abs(vf[i])
   370  		if f := LogNovec(a); log[i] != f {
   371  			t.Errorf("Log(%g) = %g, want %g", a, f, log[i])
   372  		}
   373  	}
   374  	if f := LogNovec(10); f != Ln10 {
   375  		t.Errorf("Log(%g) = %g, want %g", 10.0, f, Ln10)
   376  	}
   377  	for i := 0; i < len(vflogSC); i++ {
   378  		if f := LogNovec(vflogSC[i]); !alike(logSC[i], f) {
   379  			t.Errorf("Log(%g) = %g, want %g", vflogSC[i], f, logSC[i])
   380  		}
   381  	}
   382  }
   383  
   384  func TestExpNovec(t *testing.T) {
   385  	if !HasVX {
   386  		t.Skipf("no vector support")
   387  	}
   388  	testExpNovec(t, Exp, "Exp")
   389  	testExpNovec(t, ExpGo, "ExpGo")
   390  }
   391  
   392  func testExpNovec(t *testing.T, Exp func(float64) float64, name string) {
   393  	for i := 0; i < len(vf); i++ {
   394  		if f := ExpNovec(vf[i]); !veryclose(exp[i], f) {
   395  			t.Errorf("%s(%g) = %g, want %g", name, vf[i], f, exp[i])
   396  		}
   397  	}
   398  	for i := 0; i < len(vfexpSC); i++ {
   399  		if f := ExpNovec(vfexpSC[i]); !alike(expSC[i], f) {
   400  			t.Errorf("%s(%g) = %g, want %g", name, vfexpSC[i], f, expSC[i])
   401  		}
   402  	}
   403  }
   404  
   405  func TestExpm1Novec(t *testing.T) {
   406  	if !HasVX {
   407  		t.Skipf("no vector support")
   408  	}
   409  	for i := 0; i < len(vf); i++ {
   410  		a := vf[i] / 100
   411  		if f := Expm1Novec(a); !veryclose(expm1[i], f) {
   412  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1[i])
   413  		}
   414  	}
   415  	for i := 0; i < len(vf); i++ {
   416  		a := vf[i] * 10
   417  		if f := Expm1Novec(a); !close(expm1Large[i], f) {
   418  			t.Errorf("Expm1(%g) = %g, want %g", a, f, expm1Large[i])
   419  		}
   420  	}
   421  	for i := 0; i < len(vfexpm1SC); i++ {
   422  		if f := Expm1Novec(vfexpm1SC[i]); !alike(expm1SC[i], f) {
   423  			t.Errorf("Expm1(%g) = %g, want %g", vfexpm1SC[i], f, expm1SC[i])
   424  		}
   425  	}
   426  }
   427  
   428  func TestPowNovec(t *testing.T) {
   429  	if !HasVX {
   430  		t.Skipf("no vector support")
   431  	}
   432  	for i := 0; i < len(vf); i++ {
   433  		if f := PowNovec(10, vf[i]); !close(pow[i], f) {
   434  			t.Errorf("Pow(10, %g) = %g, want %g", vf[i], f, pow[i])
   435  		}
   436  	}
   437  	for i := 0; i < len(vfpowSC); i++ {
   438  		if f := PowNovec(vfpowSC[i][0], vfpowSC[i][1]); !alike(powSC[i], f) {
   439  			t.Errorf("Pow(%g, %g) = %g, want %g", vfpowSC[i][0], vfpowSC[i][1], f, powSC[i])
   440  		}
   441  	}
   442  }
   443  

View as plain text