OSDN Git Service

new repo
[bytom/vapor.git] / vendor / gonum.org / v1 / gonum / mat / format_test.go
1 // Copyright ©2013 The Gonum 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 package mat
6
7 import (
8         "fmt"
9         "math"
10         "testing"
11 )
12
13 func TestFormat(t *testing.T) {
14         type rp struct {
15                 format string
16                 output string
17         }
18         sqrt := func(_, _ int, v float64) float64 { return math.Sqrt(v) }
19         for i, test := range []struct {
20                 m   fmt.Formatter
21                 rep []rp
22         }{
23                 // Dense matrix representation
24                 {
25                         Formatted(NewDense(3, 3, []float64{0, 0, 0, 0, 0, 0, 0, 0, 0})),
26                         []rp{
27                                 {"%v", "⎡0  0  0⎤\n⎢0  0  0⎥\n⎣0  0  0⎦"},
28                                 {"% f", "⎡.  .  .⎤\n⎢.  .  .⎥\n⎣.  .  .⎦"},
29                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:3, Stride:3, Data:[]float64{0, 0, 0, 0, 0, 0, 0, 0, 0}}, capRows:3, capCols:3}"},
30                                 {"%s", "%!s(*mat.Dense=Dims(3, 3))"},
31                         },
32                 },
33                 {
34                         Formatted(NewDense(3, 3, []float64{1, 1, 1, 1, 1, 1, 1, 1, 1})),
35                         []rp{
36                                 {"%v", "⎡1  1  1⎤\n⎢1  1  1⎥\n⎣1  1  1⎦"},
37                                 {"% f", "⎡1  1  1⎤\n⎢1  1  1⎥\n⎣1  1  1⎦"},
38                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:3, Stride:3, Data:[]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}}, capRows:3, capCols:3}"},
39                         },
40                 },
41                 {
42                         Formatted(NewDense(3, 3, []float64{1, 1, 1, 1, 1, 1, 1, 1, 1}), Prefix("\t")),
43                         []rp{
44                                 {"%v", "⎡1  1  1⎤\n\t⎢1  1  1⎥\n\t⎣1  1  1⎦"},
45                                 {"% f", "⎡1  1  1⎤\n\t⎢1  1  1⎥\n\t⎣1  1  1⎦"},
46                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:3, Stride:3, Data:[]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}}, capRows:3, capCols:3}"},
47                         },
48                 },
49                 {
50                         Formatted(NewDense(3, 3, []float64{1, 0, 0, 0, 1, 0, 0, 0, 1})),
51                         []rp{
52                                 {"%v", "⎡1  0  0⎤\n⎢0  1  0⎥\n⎣0  0  1⎦"},
53                                 {"% f", "⎡1  .  .⎤\n⎢.  1  .⎥\n⎣.  .  1⎦"},
54                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:3, Stride:3, Data:[]float64{1, 0, 0, 0, 1, 0, 0, 0, 1}}, capRows:3, capCols:3}"},
55                         },
56                 },
57                 {
58                         Formatted(NewDense(2, 3, []float64{1, 2, 3, 4, 5, 6})),
59                         []rp{
60                                 {"%v", "⎡1  2  3⎤\n⎣4  5  6⎦"},
61                                 {"% f", "⎡1  2  3⎤\n⎣4  5  6⎦"},
62                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:2, Cols:3, Stride:3, Data:[]float64{1, 2, 3, 4, 5, 6}}, capRows:2, capCols:3}"},
63                         },
64                 },
65                 {
66                         Formatted(NewDense(3, 2, []float64{1, 2, 3, 4, 5, 6})),
67                         []rp{
68                                 {"%v", "⎡1  2⎤\n⎢3  4⎥\n⎣5  6⎦"},
69                                 {"% f", "⎡1  2⎤\n⎢3  4⎥\n⎣5  6⎦"},
70                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:2, Stride:2, Data:[]float64{1, 2, 3, 4, 5, 6}}, capRows:3, capCols:2}"},
71                         },
72                 },
73                 {
74                         func() fmt.Formatter {
75                                 m := NewDense(2, 3, []float64{0, 1, 2, 3, 4, 5})
76                                 m.Apply(sqrt, m)
77                                 return Formatted(m)
78                         }(),
79                         []rp{
80                                 {"%v", "⎡                 0                   1  1.4142135623730951⎤\n⎣1.7320508075688772                   2    2.23606797749979⎦"},
81                                 {"%.2f", "⎡0.00  1.00  1.41⎤\n⎣1.73  2.00  2.24⎦"},
82                                 {"% f", "⎡                 .                   1  1.4142135623730951⎤\n⎣1.7320508075688772                   2    2.23606797749979⎦"},
83                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:2, Cols:3, Stride:3, Data:[]float64{0, 1, 1.4142135623730951, 1.7320508075688772, 2, 2.23606797749979}}, capRows:2, capCols:3}"},
84                         },
85                 },
86                 {
87                         func() fmt.Formatter {
88                                 m := NewDense(3, 2, []float64{0, 1, 2, 3, 4, 5})
89                                 m.Apply(sqrt, m)
90                                 return Formatted(m)
91                         }(),
92                         []rp{
93                                 {"%v", "⎡                 0                   1⎤\n⎢1.4142135623730951  1.7320508075688772⎥\n⎣                 2    2.23606797749979⎦"},
94                                 {"%.2f", "⎡0.00  1.00⎤\n⎢1.41  1.73⎥\n⎣2.00  2.24⎦"},
95                                 {"% f", "⎡                 .                   1⎤\n⎢1.4142135623730951  1.7320508075688772⎥\n⎣                 2    2.23606797749979⎦"},
96                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:3, Cols:2, Stride:2, Data:[]float64{0, 1, 1.4142135623730951, 1.7320508075688772, 2, 2.23606797749979}}, capRows:3, capCols:2}"},
97                         },
98                 },
99                 {
100                         func() fmt.Formatter {
101                                 m := NewDense(2, 3, []float64{0, 1, 2, 3, 4, 5})
102                                 m.Apply(sqrt, m)
103                                 return Formatted(m, Squeeze())
104                         }(),
105                         []rp{
106                                 {"%v", "⎡                 0  1  1.4142135623730951⎤\n⎣1.7320508075688772  2    2.23606797749979⎦"},
107                                 {"%.2f", "⎡0.00  1.00  1.41⎤\n⎣1.73  2.00  2.24⎦"},
108                                 {"% f", "⎡                 .  1  1.4142135623730951⎤\n⎣1.7320508075688772  2    2.23606797749979⎦"},
109                                 {"%#v", "&mat.Dense{mat:blas64.General{Rows:2, Cols:3, Stride:3, Data:[]float64{0, 1, 1.4142135623730951, 1.7320508075688772, 2, 2.23606797749979}}, capRows:2, capCols:3}"},
110                         },
111                 },
112                 {
113                         func() fmt.Formatter {
114                                 m := NewDense(1, 10, []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
115                                 return Formatted(m, Excerpt(3))
116                         }(),
117                         []rp{
118                                 {"%v", "Dims(1, 10)\n[ 1   2   3  ...  ...   8   9  10]"},
119                         },
120                 },
121                 {
122                         func() fmt.Formatter {
123                                 m := NewDense(10, 1, []float64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10})
124                                 return Formatted(m, Excerpt(3))
125                         }(),
126                         []rp{
127                                 {"%v", "Dims(10, 1)\n⎡ 1⎤\n⎢ 2⎥\n⎢ 3⎥\n .\n .\n .\n⎢ 8⎥\n⎢ 9⎥\n⎣10⎦"},
128                         },
129                 },
130                 {
131                         func() fmt.Formatter {
132                                 m := NewDense(10, 10, nil)
133                                 for i := 0; i < 10; i++ {
134                                         m.Set(i, i, 1)
135                                 }
136                                 return Formatted(m, Excerpt(3))
137                         }(),
138                         []rp{
139                                 {"%v", "Dims(10, 10)\n⎡1  0  0  ...  ...  0  0  0⎤\n⎢0  1  0            0  0  0⎥\n⎢0  0  1            0  0  0⎥\n .\n .\n .\n⎢0  0  0            1  0  0⎥\n⎢0  0  0            0  1  0⎥\n⎣0  0  0  ...  ...  0  0  1⎦"},
140                         },
141                 },
142         } {
143                 for j, rp := range test.rep {
144                         got := fmt.Sprintf(rp.format, test.m)
145                         if got != rp.output {
146                                 t.Errorf("unexpected format result test %d part %d:\ngot:\n%s\nwant:\n%s", i, j, got, rp.output)
147                         }
148                 }
149         }
150 }