github.com/gonum/matrix@v0.0.0-20181209220409-c518dec07be9/mat64/format_test.go (about) 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 mat64 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", "&mat64.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(*mat64.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", "&mat64.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", "&mat64.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", "&mat64.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", "&mat64.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", "&mat64.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", "&mat64.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", "&mat64.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", "&mat64.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 }