github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/image/bmp/writer_test.go (about)

     1  // Copyright 2013 The Go 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 bmp
     6  
     7  import (
     8  	"bytes"
     9  	"fmt"
    10  	"image"
    11  	"io/ioutil"
    12  	"os"
    13  	"testing"
    14  	"time"
    15  )
    16  
    17  func openImage(filename string) (image.Image, error) {
    18  	f, err := os.Open(testdataDir + filename)
    19  	if err != nil {
    20  		return nil, err
    21  	}
    22  	defer f.Close()
    23  	return Decode(f)
    24  }
    25  
    26  func TestEncode(t *testing.T) {
    27  	img0, err := openImage("video-001.bmp")
    28  	if err != nil {
    29  		t.Fatal(err)
    30  	}
    31  
    32  	buf := new(bytes.Buffer)
    33  	err = Encode(buf, img0)
    34  	if err != nil {
    35  		t.Fatal(err)
    36  	}
    37  
    38  	img1, err := Decode(buf)
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  
    43  	compare(t, img0, img1)
    44  }
    45  
    46  // TestZeroWidthVeryLargeHeight tests that encoding and decoding a degenerate
    47  // image with zero width but over one billion pixels in height is faster than
    48  // naively calling an io.Reader or io.Writer method once per row.
    49  func TestZeroWidthVeryLargeHeight(t *testing.T) {
    50  	c := make(chan error, 1)
    51  	go func() {
    52  		b := image.Rect(0, 0, 0, 0x3fffffff)
    53  		var buf bytes.Buffer
    54  		if err := Encode(&buf, image.NewRGBA(b)); err != nil {
    55  			c <- err
    56  			return
    57  		}
    58  		m, err := Decode(&buf)
    59  		if err != nil {
    60  			c <- err
    61  			return
    62  		}
    63  		if got := m.Bounds(); got != b {
    64  			c <- fmt.Errorf("bounds: got %v, want %v", got, b)
    65  			return
    66  		}
    67  		c <- nil
    68  	}()
    69  	select {
    70  	case err := <-c:
    71  		if err != nil {
    72  			t.Fatal(err)
    73  		}
    74  	case <-time.After(3 * time.Second):
    75  		t.Fatalf("timed out")
    76  	}
    77  }
    78  
    79  // BenchmarkEncode benchmarks the encoding of an image.
    80  func BenchmarkEncode(b *testing.B) {
    81  	img, err := openImage("video-001.bmp")
    82  	if err != nil {
    83  		b.Fatal(err)
    84  	}
    85  	s := img.Bounds().Size()
    86  	b.SetBytes(int64(s.X * s.Y * 4))
    87  	b.ResetTimer()
    88  	for i := 0; i < b.N; i++ {
    89  		Encode(ioutil.Discard, img)
    90  	}
    91  }