package testblas import ( "testing" "gonum.org/v1/gonum/blas" ) type Dsyrer interface { Dsyr(ul blas.Uplo, n int, alpha float64, x []float64, incX int, a []float64, lda int) } func DsyrTest(t *testing.T, blasser Dsyrer) { for i, test := range []struct { ul blas.Uplo n int a [][]float64 x []float64 alpha float64 ans [][]float64 }{ { ul: blas.Upper, n: 4, a: [][]float64{ {10, 2, 0, 1}, {0, 1, 2, 3}, {0, 0, 9, 15}, {0, 0, 0, -6}, }, x: []float64{1, 2, 0, 5}, alpha: 8, ans: [][]float64{ {18, 18, 0, 41}, {0, 33, 2, 83}, {0, 0, 9, 15}, {0, 0, 0, 194}, }, }, { ul: blas.Lower, n: 3, a: [][]float64{ {10, 2, 0}, {4, 1, 2}, {2, 7, 9}, }, x: []float64{3, 0, 5}, alpha: 8, ans: [][]float64{ {82, 2, 0}, {4, 1, 2}, {122, 7, 209}, }, }, } { incTest := func(incX, extra int) { xnew := makeIncremented(test.x, incX, extra) aFlat := flatten(test.a) ans := flatten(test.ans) lda := test.n blasser.Dsyr(test.ul, test.n, test.alpha, xnew, incX, aFlat, lda) if !dSliceTolEqual(aFlat, ans) { t.Errorf("Case %v, idx %v: Want %v, got %v.", i, incX, ans, aFlat) } } incTest(1, 3) incTest(1, 0) incTest(3, 2) incTest(-2, 2) } }