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  }