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

     1  // Copyright 2012 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 tiff
     6  
     7  import (
     8  	"bytes"
     9  	"image"
    10  	"io/ioutil"
    11  	"os"
    12  	"testing"
    13  )
    14  
    15  var roundtripTests = []struct {
    16  	filename string
    17  	opts     *Options
    18  }{
    19  	{"video-001.tiff", nil},
    20  	{"video-001-16bit.tiff", nil},
    21  	{"video-001-gray.tiff", nil},
    22  	{"video-001-gray-16bit.tiff", nil},
    23  	{"video-001-paletted.tiff", nil},
    24  	{"bw-packbits.tiff", nil},
    25  	{"video-001.tiff", &Options{Predictor: true}},
    26  	{"video-001.tiff", &Options{Compression: Deflate}},
    27  	{"video-001.tiff", &Options{Predictor: true, Compression: Deflate}},
    28  }
    29  
    30  func openImage(filename string) (image.Image, error) {
    31  	f, err := os.Open(testdataDir + filename)
    32  	if err != nil {
    33  		return nil, err
    34  	}
    35  	defer f.Close()
    36  	return Decode(f)
    37  }
    38  
    39  func TestRoundtrip(t *testing.T) {
    40  	for _, rt := range roundtripTests {
    41  		img, err := openImage(rt.filename)
    42  		if err != nil {
    43  			t.Fatal(err)
    44  		}
    45  		out := new(bytes.Buffer)
    46  		err = Encode(out, img, rt.opts)
    47  		if err != nil {
    48  			t.Fatal(err)
    49  		}
    50  
    51  		img2, err := Decode(&buffer{buf: out.Bytes()})
    52  		if err != nil {
    53  			t.Fatal(err)
    54  		}
    55  		compare(t, img, img2)
    56  	}
    57  }
    58  
    59  // TestRoundtrip2 tests that encoding and decoding an image whose
    60  // origin is not (0, 0) gives the same thing.
    61  func TestRoundtrip2(t *testing.T) {
    62  	m0 := image.NewRGBA(image.Rect(3, 4, 9, 8))
    63  	for i := range m0.Pix {
    64  		m0.Pix[i] = byte(i)
    65  	}
    66  	out := new(bytes.Buffer)
    67  	if err := Encode(out, m0, nil); err != nil {
    68  		t.Fatal(err)
    69  	}
    70  	m1, err := Decode(&buffer{buf: out.Bytes()})
    71  	if err != nil {
    72  		t.Fatal(err)
    73  	}
    74  	compare(t, m0, m1)
    75  }
    76  
    77  func benchmarkEncode(b *testing.B, name string, pixelSize int) {
    78  	img, err := openImage(name)
    79  	if err != nil {
    80  		b.Fatal(err)
    81  	}
    82  	s := img.Bounds().Size()
    83  	b.SetBytes(int64(s.X * s.Y * pixelSize))
    84  	b.ResetTimer()
    85  	for i := 0; i < b.N; i++ {
    86  		Encode(ioutil.Discard, img, nil)
    87  	}
    88  }
    89  
    90  func BenchmarkEncode(b *testing.B)         { benchmarkEncode(b, "video-001.tiff", 4) }
    91  func BenchmarkEncodePaletted(b *testing.B) { benchmarkEncode(b, "video-001-paletted.tiff", 1) }
    92  func BenchmarkEncodeGray(b *testing.B)     { benchmarkEncode(b, "video-001-gray.tiff", 1) }
    93  func BenchmarkEncodeGray16(b *testing.B)   { benchmarkEncode(b, "video-001-gray-16bit.tiff", 2) }
    94  func BenchmarkEncodeRGBA(b *testing.B)     { benchmarkEncode(b, "video-001.tiff", 4) }
    95  func BenchmarkEncodeRGBA64(b *testing.B)   { benchmarkEncode(b, "video-001-16bit.tiff", 8) }