1
2
3
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
46 out := new(bytes.Buffer)
47 err = Encode(out, img, rt.opts)
48 if err != nil {
49 t.Fatal(err)
50 }
51
52 img2, err := Decode(&buffer{buf: out.Bytes()})
53 if err != nil {
54 t.Fatal(err)
55 }
56 compare(t, img, img2)
57 }
58 }
59
60
61
62 func TestRoundtrip2(t *testing.T) {
63 m0 := image.NewRGBA(image.Rect(3, 4, 9, 8))
64 for i := range m0.Pix {
65 m0.Pix[i] = byte(i)
66 }
67 out := new(bytes.Buffer)
68 if err := Encode(out, m0, nil); err != nil {
69 t.Fatal(err)
70 }
71 m1, err := Decode(&buffer{buf: out.Bytes()})
72 if err != nil {
73 t.Fatal(err)
74 }
75 compare(t, m0, m1)
76 }
77
78 func TestUnsupported(t *testing.T) {
79 img := image.NewGray(image.Rect(0, 0, 1, 1))
80 out := new(bytes.Buffer)
81 err := Encode(out, img, &Options{Compression: LZW})
82 if err == nil {
83 t.Error("tiff.Encode(LZW): no error returned, expected an error")
84 }
85 }
86
87 func benchmarkEncode(b *testing.B, name string, pixelSize int) {
88 b.Helper()
89 img, err := openImage(name)
90 if err != nil {
91 b.Fatal(err)
92 }
93 s := img.Bounds().Size()
94 b.SetBytes(int64(s.X * s.Y * pixelSize))
95 b.ResetTimer()
96 for i := 0; i < b.N; i++ {
97 Encode(ioutil.Discard, img, nil)
98 }
99 }
100
101 func BenchmarkEncode(b *testing.B) { benchmarkEncode(b, "video-001.tiff", 4) }
102 func BenchmarkEncodePaletted(b *testing.B) { benchmarkEncode(b, "video-001-paletted.tiff", 1) }
103 func BenchmarkEncodeGray(b *testing.B) { benchmarkEncode(b, "video-001-gray.tiff", 1) }
104 func BenchmarkEncodeGray16(b *testing.B) { benchmarkEncode(b, "video-001-gray-16bit.tiff", 2) }
105 func BenchmarkEncodeRGBA(b *testing.B) { benchmarkEncode(b, "video-001.tiff", 4) }
106 func BenchmarkEncodeRGBA64(b *testing.B) { benchmarkEncode(b, "video-001-16bit.tiff", 8) }
107
View as plain text