...

Source file src/gonum.org/v1/plot/vg/draw/draw_test.go

Documentation: gonum.org/v1/plot/vg/draw

     1  // Copyright ©2015 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 draw_test
     6  
     7  import (
     8  	"fmt"
     9  	"image/color"
    10  	"reflect"
    11  	"testing"
    12  
    13  	"gonum.org/v1/plot/vg"
    14  	"gonum.org/v1/plot/vg/draw"
    15  	"gonum.org/v1/plot/vg/recorder"
    16  
    17  	_ "gonum.org/v1/plot/vg/vgeps"
    18  	_ "gonum.org/v1/plot/vg/vgimg"
    19  	_ "gonum.org/v1/plot/vg/vgpdf"
    20  	_ "gonum.org/v1/plot/vg/vgsvg"
    21  	_ "gonum.org/v1/plot/vg/vgtex"
    22  )
    23  
    24  func TestCrop(t *testing.T) {
    25  	ls := draw.LineStyle{
    26  		Color: color.NRGBA{0, 20, 0, 123},
    27  		Width: 0.1 * vg.Inch,
    28  	}
    29  	var r1 recorder.Canvas
    30  	c1 := draw.NewCanvas(&r1, 6, 3)
    31  	c11 := draw.Crop(c1, 0, -3, 0, 0)
    32  	c12 := draw.Crop(c1, 3, 0, 0, 0)
    33  
    34  	var r2 recorder.Canvas
    35  	c2 := draw.NewCanvas(&r2, 6, 3)
    36  	c21 := draw.Canvas{
    37  		Canvas: c2.Canvas,
    38  		Rectangle: vg.Rectangle{
    39  			Min: vg.Point{X: 0, Y: 0},
    40  			Max: vg.Point{X: 3, Y: 3},
    41  		},
    42  	}
    43  	c22 := draw.Canvas{
    44  		Canvas: c2.Canvas,
    45  		Rectangle: vg.Rectangle{
    46  			Min: vg.Point{X: 3, Y: 0},
    47  			Max: vg.Point{X: 6, Y: 3},
    48  		},
    49  	}
    50  	str := "unexpected result: %+v != %+v"
    51  	if c11.Rectangle != c21.Rectangle {
    52  		t.Errorf(str, c11.Rectangle, c21.Rectangle)
    53  	}
    54  	if c12.Rectangle != c22.Rectangle {
    55  		t.Errorf(str, c11.Rectangle, c21.Rectangle)
    56  	}
    57  
    58  	c11.StrokeLine2(ls, c11.Min.X, c11.Min.Y,
    59  		c11.Min.X+3*vg.Inch, c11.Min.Y+3*vg.Inch)
    60  	c12.StrokeLine2(ls, c12.Min.X, c12.Min.Y,
    61  		c12.Min.X+3*vg.Inch, c12.Min.Y+3*vg.Inch)
    62  	c21.StrokeLine2(ls, c21.Min.X, c21.Min.Y,
    63  		c21.Min.X+3*vg.Inch, c21.Min.Y+3*vg.Inch)
    64  	c22.StrokeLine2(ls, c22.Min.X, c22.Min.Y,
    65  		c22.Min.X+3*vg.Inch, c22.Min.Y+3*vg.Inch)
    66  
    67  	if !reflect.DeepEqual(r1.Actions, r2.Actions) {
    68  		t.Errorf(str, r1.Actions, r2.Actions)
    69  	}
    70  }
    71  
    72  func TestTile(t *testing.T) {
    73  	var r recorder.Canvas
    74  	c := draw.NewCanvas(&r, 13, 7)
    75  	const (
    76  		rows = 2
    77  		cols = 3
    78  		pad  = 1
    79  	)
    80  	tiles := draw.Tiles{
    81  		Rows: rows, Cols: cols,
    82  		PadTop: pad, PadBottom: pad,
    83  		PadRight: pad, PadLeft: pad,
    84  		PadX: pad, PadY: pad,
    85  	}
    86  	rectangles := [][]vg.Rectangle{
    87  		{
    88  			vg.Rectangle{
    89  				Min: vg.Point{X: 1, Y: 4},
    90  				Max: vg.Point{X: 4, Y: 6},
    91  			},
    92  			vg.Rectangle{
    93  				Min: vg.Point{X: 5, Y: 4},
    94  				Max: vg.Point{X: 8, Y: 6},
    95  			},
    96  			vg.Rectangle{
    97  				Min: vg.Point{X: 9, Y: 4},
    98  				Max: vg.Point{X: 12, Y: 6},
    99  			},
   100  		},
   101  		{
   102  			vg.Rectangle{
   103  				Min: vg.Point{X: 1, Y: 1},
   104  				Max: vg.Point{X: 4, Y: 3},
   105  			},
   106  			vg.Rectangle{
   107  				Min: vg.Point{X: 5, Y: 1},
   108  				Max: vg.Point{X: 8, Y: 3},
   109  			},
   110  			vg.Rectangle{
   111  				Min: vg.Point{X: 9, Y: 1},
   112  				Max: vg.Point{X: 12, Y: 3},
   113  			},
   114  		},
   115  	}
   116  	for j := 0; j < rows; j++ {
   117  		for i := 0; i < cols; i++ {
   118  			str := "row %d col %d unexpected result: %+v != %+v"
   119  			tile := tiles.At(c, i, j)
   120  			if tile.Rectangle != rectangles[j][i] {
   121  				t.Errorf(str, j, i, tile.Rectangle, rectangles[j][i])
   122  			}
   123  		}
   124  	}
   125  }
   126  
   127  func TestFormattedCanvas(t *testing.T) {
   128  	for _, test := range []struct {
   129  		format string
   130  		err    error
   131  	}{
   132  		{format: "eps"},
   133  		{format: "jpg"},
   134  		{format: "jpeg"},
   135  		{format: "pdf"},
   136  		{format: "png"},
   137  		{format: "svg"},
   138  		{format: "tex"},
   139  		{format: "tiff"},
   140  		{format: "tif"},
   141  		{
   142  			format: "",
   143  			err:    fmt.Errorf("unsupported format: \"\""),
   144  		},
   145  		{
   146  			format: "abc",
   147  			err:    fmt.Errorf("unsupported format: \"abc\""),
   148  		},
   149  	} {
   150  		t.Run(test.format, func(t *testing.T) {
   151  			_, err := draw.NewFormattedCanvas(10, 10, test.format)
   152  			switch {
   153  			case err != nil && test.err != nil:
   154  				if got, want := err.Error(), test.err.Error(); got != want {
   155  					t.Fatalf("invalid error.\ngot= %v\nwant=%v", got, want)
   156  				}
   157  			case err != nil && test.err == nil:
   158  				t.Fatalf("unexpected error: %+v", err)
   159  			case err == nil && test.err != nil:
   160  				t.Fatalf("expected an error (got=%v)", err)
   161  			}
   162  		})
   163  	}
   164  }
   165  

View as plain text