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) }