writer_test.go 2.4 KB

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