OSDN Git Service

test (#52)
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / blas / testblas / dspr2.go
1 package testblas
2
3 import (
4         "testing"
5
6         "gonum.org/v1/gonum/blas"
7         "gonum.org/v1/gonum/floats"
8 )
9
10 type Dspr2er interface {
11         Dspr2(ul blas.Uplo, n int, alpha float64, x []float64, incX int, y []float64, incY int, a []float64)
12 }
13
14 func Dspr2Test(t *testing.T, blasser Dspr2er) {
15         for i, test := range []struct {
16                 n     int
17                 a     [][]float64
18                 ul    blas.Uplo
19                 x     []float64
20                 y     []float64
21                 alpha float64
22                 ans   [][]float64
23         }{
24                 {
25                         n: 3,
26                         a: [][]float64{
27                                 {7, 2, 4},
28                                 {0, 3, 5},
29                                 {0, 0, 6},
30                         },
31                         x:     []float64{2, 3, 4},
32                         y:     []float64{5, 6, 7},
33                         alpha: 2,
34                         ul:    blas.Upper,
35                         ans: [][]float64{
36                                 {47, 56, 72},
37                                 {0, 75, 95},
38                                 {0, 0, 118},
39                         },
40                 },
41                 {
42                         n: 3,
43                         a: [][]float64{
44                                 {7, 0, 0},
45                                 {2, 3, 0},
46                                 {4, 5, 6},
47                         },
48                         x:     []float64{2, 3, 4},
49                         y:     []float64{5, 6, 7},
50                         alpha: 2,
51                         ul:    blas.Lower,
52                         ans: [][]float64{
53                                 {47, 0, 0},
54                                 {56, 75, 0},
55                                 {72, 95, 118},
56                         },
57                 },
58         } {
59                 incTest := func(incX, incY, extra int) {
60                         aFlat := flattenTriangular(test.a, test.ul)
61                         x := makeIncremented(test.x, incX, extra)
62                         y := makeIncremented(test.y, incY, extra)
63                         blasser.Dspr2(test.ul, test.n, test.alpha, x, incX, y, incY, aFlat)
64                         ansFlat := flattenTriangular(test.ans, test.ul)
65                         if !floats.EqualApprox(aFlat, ansFlat, 1e-14) {
66                                 t.Errorf("Case %v, incX = %v, incY = %v. Want %v, got %v.", i, incX, incY, ansFlat, aFlat)
67                         }
68                 }
69                 incTest(1, 1, 0)
70                 incTest(-2, 1, 0)
71                 incTest(-2, 3, 0)
72                 incTest(2, -3, 0)
73                 incTest(3, -2, 0)
74                 incTest(-3, -4, 0)
75         }
76 }