[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/gonum/plot/master/plot_test.go [Back]  [Original]

// Copyright 2015 The Gonum Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package plot_test

import (
	"bytes"
	"fmt"
	"image/color"
	"math"
	"os"
	"runtime"
	"testing"
	"time"

	"gonum.org/v1/plot"
	"gonum.org/v1/plot/cmpimg"
	"gonum.org/v1/plot/font"
	"gonum.org/v1/plot/plotter"
	"gonum.org/v1/plot/text"
	"gonum.org/v1/plot/vg"
	"gonum.org/v1/plot/vg/draw"
	"gonum.org/v1/plot/vg/recorder"
	"gonum.org/v1/plot/vg/vgimg"
)

func TestLegendAlignment(t *testing.T) {
	l := plot.Legend{
		ThumbnailWidth: vg.Points(20),
		TextStyle: text.Style{
			Font:    font.From(plot.DefaultFont, 10),
			Handler: plot.DefaultTextHandler,
		},
	}
	for i, n := range []string{"A", "B", "C", "D"} {
		b, err := plotter.NewBarChart(plotter.Values{0}, 1)
		if err != nil {
			t.Fatalf("failed to create bar chart %q: %v", n, err)
		}
		b.Color = color.Gray{byte(i+1)*64 - 1}
		l.Add(n, b)
	}

	c := vgimg.PngCanvas{Canvas: vgimg.New(5*vg.Centimeter, 5*vg.Centimeter)}
	l.Draw(draw.New(c))
	var buf bytes.Buffer
	if _, err := c.WriteTo(&buf); err != nil {
		t.Fatal(err)
	}

	if *cmpimg.GenerateTestData {
		// Recreate Golden images and exit.
		err := os.WriteFile("testdata/legendAlignment_golden.png", buf.Bytes(), 0o644)
		if err != nil {
			t.Fatal(err)
		}
		return
	}

	err := os.WriteFile("testdata/legendAlignment.png", buf.Bytes(), 0o644)
	if err != nil {
		t.Fatal(err)
	}

	want, err := os.ReadFile("testdata/legendAlignment_golden.png")
	if err != nil {
		t.Fatal(err)
	}

	ok, err := cmpimg.Equal("png", buf.Bytes(), want)
	if err != nil {
		t.Fatal(err)
	}
	if !ok {
		t.Fatalf("images differ")
	}

}

func TestIssue514(t *testing.T) {
	for _, ulp := range []int{
		0,
		+1, +2, +3, +4, +5, +6, +7, +8, +9, +10, +11, +12, +13, +14, +15, +16, +17, +18, +19, +20, +21, +22,
		-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21, -22,
	} {
		t.Run(fmt.Sprintf("ulps%+02d", ulp), func(t *testing.T) {
			done := make(chan int)
			go func() {
				defer close(done)

				p := plot.New()

				var (
					y1 = 100.0
					y2 = y1
				)

				switch {
				case ulp < 0:
					y2 = math.Float64frombits(math.Float64bits(y1) - uint64(-ulp))
				case ulp > 0:
					y2 = math.Float64frombits(math.Float64bits(y1) + uint64(ulp))
				}

				pts, err := plotter.NewScatter(plotter.XYs{
					{X: 1, Y: y1},
					{X: 1, Y: y2},
				})
				if err != nil {
					t.Errorf("could not create scatter: %v", err)
					return
				}

				p.Add(pts)

				c := draw.NewCanvas(&recorder.Canvas{}, 100, 100)
				p.Draw(c)
			}()

			timeout := time.NewTimer(100 * time.Millisecond)
			defer timeout.Stop()

			select {
			case 

Web Proxy Viewer  |  New URL  |  Original Page