X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=vendor%2Fgonum.org%2Fv1%2Fgonum%2Fblas%2Ftestblas%2Fdgemv.go;fp=vendor%2Fgonum.org%2Fv1%2Fgonum%2Fblas%2Ftestblas%2Fdgemv.go;h=0000000000000000000000000000000000000000;hp=d18dde2fa32f0760f942c52be6fea0cac01967eb;hb=2cf5801b2e693a45de9b51ec9aa9c1f787d57105;hpb=0dff3fcf4fbd306176d561d721c1c31e58d90742 diff --git a/vendor/gonum.org/v1/gonum/blas/testblas/dgemv.go b/vendor/gonum.org/v1/gonum/blas/testblas/dgemv.go deleted file mode 100644 index d18dde2f..00000000 --- a/vendor/gonum.org/v1/gonum/blas/testblas/dgemv.go +++ /dev/null @@ -1,678 +0,0 @@ -package testblas - -import ( - "testing" - - "gonum.org/v1/gonum/blas" -) - -type DgemvCase struct { - Name string - m int - n int - A [][]float64 - tA blas.Transpose - x []float64 - incX int - y []float64 - incY int - - Subcases []DgemvSubcase -} - -type DgemvSubcase struct { - mulXNeg1 bool - mulYNeg1 bool - alpha float64 - beta float64 - ans []float64 -} - -var DgemvCases = []DgemvCase{ - { - Name: "M_gt_N_Inc1_NoTrans", - tA: blas.NoTrans, - m: 5, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3}, - y: []float64{7, 8, 9, 10, 11}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 0, 0, 0, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 8, 9, 10, 11}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{40.8, 43.9, 33, 9, 28}, - }, - { - alpha: 8, - beta: -6, - ans: []float64{284.4, 303.2, 210, 12, 158}, - }, - }, - }, - { - Name: "M_gt_N_Inc1_Trans", - tA: blas.Trans, - m: 5, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3, -4, 5}, - y: []float64{7, 8, 9}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 0, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 8, 9}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{94.3, 40.2, 52.3}, - }, - { - alpha: 8, - beta: -6, - ans: []float64{712.4, 273.6, 364.4}, - }, - }, - }, - { - Name: "M_eq_N_Inc1_NoTrans", - tA: blas.NoTrans, - m: 3, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3}, - y: []float64{7, 2, 2}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 0, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 2, 2}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{40.8, 43.9, 33}, - }, - { - alpha: 8, - beta: -6, - ans: []float64{40.8*8 - 6*7, 43.9*8 - 6*2, 33*8 - 6*2}, - }, - }, - }, - { - Name: "M_eq_N_Inc1_Trans", - tA: blas.Trans, - m: 3, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3}, - y: []float64{7, 2, 2}, - - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{384.4, 261.6, 270.4}, - }, - }, - }, - { - Name: "M_lt_N_Inc1_NoTrans", - tA: blas.NoTrans, - m: 3, - n: 5, - A: [][]float64{ - {4.1, 6.2, 8.1, 10, 7}, - {9.6, 3.5, 9.1, -2, 9}, - {10, 7, 3, 1, -5}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3, -7.6, 8.1}, - y: []float64{7, 2, 2}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 0, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 2, 2}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{21.5, 132, -15.1}, - }, - - { - alpha: 8, - beta: -6, - ans: []float64{21.5*8 - 6*7, 132*8 - 6*2, -15.1*8 - 6*2}, - }, - }, - }, - { - Name: "M_lt_N_Inc1_Trans", - tA: blas.Trans, - m: 3, - n: 5, - A: [][]float64{ - {4.1, 6.2, 8.1, 10, 7}, - {9.6, 3.5, 9.1, -2, 9}, - {10, 7, 3, 1, -5}, - }, - incX: 1, - incY: 1, - x: []float64{1, 2, 3}, - y: []float64{7, 2, 2, -3, 5}, - - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{384.4, 261.6, 270.4, 90, 50}, - }, - }, - }, - { - Name: "M_gt_N_Part1_NoTrans", - tA: blas.NoTrans, - m: 5, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 1, - incY: 2, - x: []float64{1, 2, 3}, - y: []float64{7, 100, 8, 101, 9, 102, 10, 103, 11}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 100, 0, 101, 0, 102, 0, 103, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 100, 8, 101, 9, 102, 10, 103, 11}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{40.8, 100, 43.9, 101, 33, 102, 9, 103, 28}, - }, - { - alpha: 8, - beta: -6, - ans: []float64{284.4, 100, 303.2, 101, 210, 102, 12, 103, 158}, - }, - }, - }, - { - Name: "M_gt_N_Part1_Trans", - tA: blas.Trans, - m: 5, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 1, - incY: 2, - x: []float64{1, 2, 3, -4, 5}, - y: []float64{7, 100, 8, 101, 9}, - - Subcases: []DgemvSubcase{ - { - alpha: 0, - beta: 0, - ans: []float64{0, 100, 0, 101, 0}, - }, - { - alpha: 0, - beta: 1, - ans: []float64{7, 100, 8, 101, 9}, - }, - { - alpha: 1, - beta: 0, - ans: []float64{94.3, 100, 40.2, 101, 52.3}, - }, - { - alpha: 8, - beta: -6, - ans: []float64{712.4, 100, 273.6, 101, 364.4}, - }, - }, - }, - { - Name: "M_gt_N_IncNot1_NoTrans", - tA: blas.NoTrans, - m: 5, - n: 3, - - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3}, - y: []float64{7, 2, 6, 8, -4, -5, 9, 1, 1, 10, 19, 22, 11}, - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{284.4, 2, 6, 303.2, -4, -5, 210, 1, 1, 12, 19, 22, 158}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{220.4, 2, 6, 311.2, -4, -5, 322, 1, 1, -4, 19, 22, 222}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{182, 2, 6, 24, -4, -5, 210, 1, 1, 291.2, 19, 22, 260.4}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{246, 2, 6, 8, -4, -5, 322, 1, 1, 299.2, 19, 22, 196.4}, - }, - }, - }, - { - Name: "M_gt_N_IncNot1_Trans", - tA: blas.Trans, - m: 5, - n: 3, - - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - {1, 1, 2}, - {9, 2, 5}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3, 8, -3, 6, 5}, - y: []float64{7, 2, 6, 8, -4, -5, 9}, - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{720.4, 2, 6, 281.6, -4, -5, 380.4}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{219.6, 2, 6, 316, -4, -5, 195.6}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{392.4, 2, 6, 281.6, -4, -5, 708.4}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{207.6, 2, 6, 316, -4, -5, 207.6}, - }, - }, - }, - { - Name: "M_eq_N_IncNot1_NoTrans", - tA: blas.NoTrans, - m: 3, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3}, - y: []float64{7, 2, 6, 8, -4, -5, 9}, - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{284.4, 2, 6, 303.2, -4, -5, 210}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{220.4, 2, 6, 311.2, -4, -5, 322}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{222, 2, 6, 303.2, -4, -5, 272.4}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{334, 2, 6, 311.2, -4, -5, 208.4}, - }, - }, - }, - { - Name: "M_eq_N_IncNot1_Trans", - tA: blas.Trans, - m: 3, - n: 3, - A: [][]float64{ - {4.1, 6.2, 8.1}, - {9.6, 3.5, 9.1}, - {10, 7, 3}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3}, - y: []float64{7, 2, 6, 8, -4, -5, 9}, - - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{384.4, 2, 6, 225.6, -4, -5, 228.4}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{290, 2, 6, 212.8, -4, -5, 310}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{240.4, 2, 6, 225.6, -4, -5, 372.4}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{322, 2, 6, 212.8, -4, -5, 278}, - }, - }, - }, - { - Name: "M_lt_N_IncNot1_NoTrans", - tA: blas.NoTrans, - m: 3, - n: 5, - A: [][]float64{ - {4.1, 6.2, 8.1, 10, 11}, - {9.6, 3.5, 9.1, -3, -2}, - {10, 7, 3, -7, -4}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3, -2, -4, 8, -9}, - y: []float64{7, 2, 6, 8, -4, -5, 9}, - - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{-827.6, 2, 6, 543.2, -4, -5, 722}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{-93.2, 2, 6, -696.8, -4, -5, -1070}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{734, 2, 6, 543.2, -4, -5, -839.6}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{-1058, 2, 6, -696.8, -4, -5, -105.2}, - }, - }, - }, - { - Name: "M_lt_N_IncNot1_Trans", - tA: blas.Trans, - m: 3, - n: 5, - A: [][]float64{ - {4.1, 6.2, 8.1, 10, 11}, - {9.6, 3.5, 9.1, -3, -2}, - {10, 7, 3, -7, -4}, - }, - incX: 2, - incY: 3, - x: []float64{1, 15, 2, 150, 3}, - y: []float64{7, 2, 6, 8, -4, -5, 9, -4, -1, -9, 1, 1, 2}, - - Subcases: []DgemvSubcase{ - { - alpha: 8, - beta: -6, - ans: []float64{384.4, 2, 6, 225.6, -4, -5, 228.4, -4, -1, -82, 1, 1, -52}, - }, - { - mulXNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{290, 2, 6, 212.8, -4, -5, 310, -4, -1, 190, 1, 1, 188}, - }, - { - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{-82, 2, 6, -184, -4, -5, 228.4, -4, -1, 327.6, 1, 1, 414.4}, - }, - { - mulXNeg1: true, - mulYNeg1: true, - alpha: 8, - beta: -6, - ans: []float64{158, 2, 6, 88, -4, -5, 310, -4, -1, 314.8, 1, 1, 320}, - }, - }, - }, - - // TODO: A can be longer than mxn. Add cases where it is longer - // TODO: x and y can also be longer. Add tests for these - // TODO: Add tests for dimension mismatch - // TODO: Add places with a "submatrix view", where lda != m -} - -type Dgemver interface { - Dgemv(tA blas.Transpose, m, n int, alpha float64, a []float64, lda int, x []float64, incX int, beta float64, y []float64, incY int) -} - -func DgemvTest(t *testing.T, blasser Dgemver) { - for _, test := range DgemvCases { - for i, cas := range test.Subcases { - // Test that it passes with row-major - dgemvcomp(t, test, cas, i, blasser) - - // Test the bad inputs - dgemvbad(t, test, cas, i, blasser) - } - } -} - -func dgemvcomp(t *testing.T, test DgemvCase, cas DgemvSubcase, i int, blasser Dgemver) { - x := sliceCopy(test.x) - y := sliceCopy(test.y) - a := sliceOfSliceCopy(test.A) - aFlat := flatten(a) - - lda := test.n - - incX := test.incX - if cas.mulXNeg1 { - incX *= -1 - } - incY := test.incY - if cas.mulYNeg1 { - incY *= -1 - } - - f := func() { - blasser.Dgemv(test.tA, test.m, test.n, cas.alpha, aFlat, lda, x, incX, cas.beta, y, incY) - } - if panics(f) { - t.Errorf("Test %v case %v: unexpected panic", test.Name, i) - if throwPanic { - blasser.Dgemv(test.tA, test.m, test.n, cas.alpha, aFlat, lda, x, incX, cas.beta, y, incY) - } - return - } - // Check that x and a are unchanged - if !dSliceEqual(x, test.x) { - t.Errorf("Test %v, case %v: x modified during call", test.Name, i) - } - aFlat2 := flatten(sliceOfSliceCopy(test.A)) - if !dSliceEqual(aFlat2, aFlat) { - t.Errorf("Test %v, case %v: a modified during call", test.Name, i) - } - - // Check that the answer matches - if !dSliceTolEqual(cas.ans, y) { - t.Errorf("Test %v, case %v: answer mismatch: Expected %v, Found %v", test.Name, i, cas.ans, y) - } -} - -func dgemvbad(t *testing.T, test DgemvCase, cas DgemvSubcase, i int, blasser Dgemver) { - x := sliceCopy(test.x) - y := sliceCopy(test.y) - a := sliceOfSliceCopy(test.A) - aFlatRow := flatten(a) - ldaRow := test.n - - f := func() { - blasser.Dgemv(312, test.m, test.n, cas.alpha, aFlatRow, ldaRow, x, test.incX, cas.beta, y, test.incY) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for bad transpose", test.Name, i) - } - f = func() { - blasser.Dgemv(test.tA, -2, test.n, cas.alpha, aFlatRow, ldaRow, x, test.incX, cas.beta, y, test.incY) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for m negative", test.Name, i) - } - f = func() { - blasser.Dgemv(test.tA, test.m, -4, cas.alpha, aFlatRow, ldaRow, x, test.incX, cas.beta, y, test.incY) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for n negative", test.Name, i) - } - f = func() { - blasser.Dgemv(test.tA, test.m, test.n, cas.alpha, aFlatRow, ldaRow, x, 0, cas.beta, y, test.incY) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for incX zero", test.Name, i) - } - f = func() { - blasser.Dgemv(test.tA, test.m, test.n, cas.alpha, aFlatRow, ldaRow, x, test.incX, cas.beta, y, 0) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for incY zero", test.Name, i) - } - f = func() { - blasser.Dgemv(test.tA, test.m, test.n, cas.alpha, aFlatRow, ldaRow-1, x, test.incX, cas.beta, y, test.incY) - } - if !panics(f) { - t.Errorf("Test %v case %v: no panic for lda too small row major", test.Name, i) - } -}