6 "gonum.org/v1/gonum/blas"
7 "gonum.org/v1/gonum/floats"
10 type Dtrsmer interface {
11 Dtrsm(s blas.Side, ul blas.Uplo, tA blas.Transpose, d blas.Diag, m, n int,
12 alpha float64, a []float64, lda int, b []float64, ldb int)
15 func DtrsmTest(t *testing.T, blasser Dtrsmer) {
16 for i, test := range []struct {
96 {-0.5, -0.5, -4, -3.5},
120 {-42, -66, -88, -94},
192 {-0.375, -1.5, -1.5, -63.0 / 8},
193 {-0.75, -12.0 / 7, 3, 39.0 / 28},
216 {-15, -33, -15, -72},
241 {-6.0 / 35, -24.0 / 35},
288 {-0.3, -1.2, -0.6, -0.9},
289 {-6.0 / 35, -24.0 / 35, -12.0 / 35, -18.0 / 35},
312 {-15, -33, -30, -36},
383 {-0.46875, 0.375, -2.0625, -1.78125},
384 {0.1875, 0.75, -0.375, -0.1875},
385 {1.875, 3, 2.25, 2.625},
407 {168, 267, 204, 237},
408 {-78, -123, -96, -111},
432 {15, -2.4, -48.0 / 35},
433 {19.5, -3.3, -66.0 / 35},
435 {28.5, -5.1, -102.0 / 35},
482 {15, -2.4, -48.0 / 35},
483 {19.5, -3.3, -66.0 / 35},
529 {5.775, 1.65, 5.625},
531 {8.925, 2.55, 7.875},
579 {5.775, 1.65, 5.625},
625 {5.775, 1.65, 5.625},
627 {8.925, 2.55, 7.875},
675 {5.775, 1.65, 5.625},
797 aFlat := flatten(test.a)
798 bFlat := flatten(test.b)
799 ansFlat := flatten(test.ans)
801 if test.s == blas.Left {
806 blasser.Dtrsm(test.s, test.ul, test.tA, test.d, test.m, test.n, test.alpha, aFlat, lda, bFlat, test.n)
807 if !floats.EqualApprox(ansFlat, bFlat, 1e-13) {
808 t.Errorf("Case %v: Want %v, got %v.", i, ansFlat, bFlat)