LEFT | RIGHT |
1 // Copyright 2012 The Go Authors. All rights reserved. | 1 // Copyright 2012 The Go Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style | 2 // Use of this source code is governed by a BSD-style |
3 // license that can be found in the LICENSE file. | 3 // license that can be found in the LICENSE file. |
4 | 4 |
5 package tiff | 5 package tiff |
6 | 6 |
7 import ( | 7 import ( |
8 "bytes" | 8 "bytes" |
9 "image" | 9 "image" |
| 10 "io/ioutil" |
10 "os" | 11 "os" |
11 "testing" | 12 "testing" |
12 ) | 13 ) |
13 | 14 |
14 var roundtripTests = []string{ | 15 var roundtripTests = []string{ |
15 "video-001.tiff", | 16 "video-001.tiff", |
16 "bw-packbits.tiff", | 17 "bw-packbits.tiff", |
17 } | 18 } |
18 | 19 |
19 func openImage(filename string) (image.Image, error) { | 20 func openImage(filename string) (image.Image, error) { |
20 f, err := os.Open(testdataDir + filename) | 21 f, err := os.Open(testdataDir + filename) |
21 if err != nil { | 22 if err != nil { |
22 return nil, err | 23 return nil, err |
23 } | 24 } |
24 defer f.Close() | 25 defer f.Close() |
25 return Decode(f) | 26 return Decode(f) |
26 } | 27 } |
27 | 28 |
28 func TestRoundtrip(t *testing.T) { | 29 func TestRoundtrip(t *testing.T) { |
29 for _, filename := range roundtripTests { | 30 for _, filename := range roundtripTests { |
30 » » img, err := openImage(testdataDir + filename) | 31 » » img, err := openImage(filename) |
31 if err != nil { | 32 if err != nil { |
32 t.Fatal(err) | 33 t.Fatal(err) |
33 } | 34 } |
34 out := new(bytes.Buffer) | 35 out := new(bytes.Buffer) |
35 err = Encode(out, img) | 36 err = Encode(out, img) |
36 if err != nil { | 37 if err != nil { |
37 t.Fatal(err) | 38 t.Fatal(err) |
38 } | 39 } |
39 | 40 |
40 img2, err := Decode(&buffer{buf: out.Bytes()}) | 41 img2, err := Decode(&buffer{buf: out.Bytes()}) |
41 if err != nil { | 42 if err != nil { |
42 t.Fatal(err) | 43 t.Fatal(err) |
43 } | 44 } |
44 compare(t, img, img2) | 45 compare(t, img, img2) |
45 } | 46 } |
46 } | 47 } |
47 | 48 |
48 // BenchmarkEncode benchmarks the encoding of an image. | 49 // BenchmarkEncode benchmarks the encoding of an image. |
49 func BenchmarkEncode(b *testing.B) { | 50 func BenchmarkEncode(b *testing.B) { |
50 » b.StopTimer() | 51 » img, err := openImage("video-001.tiff") |
51 » img, err := openImage(testdataDir + "video-001.tiff") | |
52 if err != nil { | 52 if err != nil { |
53 b.Fatal(err) | 53 b.Fatal(err) |
54 } | 54 } |
55 » out := new(bytes.Buffer) | 55 » s := img.Bounds().Size() |
56 » b.StartTimer() | 56 » b.SetBytes(int64(s.X * s.Y * 4)) |
| 57 » b.ResetTimer() |
57 for i := 0; i < b.N; i++ { | 58 for i := 0; i < b.N; i++ { |
58 » » out.Truncate(0) | 59 » » Encode(ioutil.Discard, img) |
59 » » err = Encode(out, img) | |
60 » » if err != nil { | |
61 » » » b.Fatal(err) | |
62 » » } | |
63 } | 60 } |
64 b.SetBytes(int64(out.Len())) | |
65 } | 61 } |
LEFT | RIGHT |