summaryrefslogtreecommitdiff
path: root/src/pkg/image/gif/writer_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/pkg/image/gif/writer_test.go')
-rw-r--r--src/pkg/image/gif/writer_test.go204
1 files changed, 0 insertions, 204 deletions
diff --git a/src/pkg/image/gif/writer_test.go b/src/pkg/image/gif/writer_test.go
deleted file mode 100644
index c1ada769c..000000000
--- a/src/pkg/image/gif/writer_test.go
+++ /dev/null
@@ -1,204 +0,0 @@
-// Copyright 2013 The Go Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package gif
-
-import (
- "bytes"
- "image"
- "image/color"
- _ "image/png"
- "io/ioutil"
- "math/rand"
- "os"
- "testing"
-)
-
-func readImg(filename string) (image.Image, error) {
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- m, _, err := image.Decode(f)
- return m, err
-}
-
-func readGIF(filename string) (*GIF, error) {
- f, err := os.Open(filename)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- return DecodeAll(f)
-}
-
-func delta(u0, u1 uint32) int64 {
- d := int64(u0) - int64(u1)
- if d < 0 {
- return -d
- }
- return d
-}
-
-// averageDelta returns the average delta in RGB space. The two images must
-// have the same bounds.
-func averageDelta(m0, m1 image.Image) int64 {
- b := m0.Bounds()
- var sum, n int64
- for y := b.Min.Y; y < b.Max.Y; y++ {
- for x := b.Min.X; x < b.Max.X; x++ {
- c0 := m0.At(x, y)
- c1 := m1.At(x, y)
- r0, g0, b0, _ := c0.RGBA()
- r1, g1, b1, _ := c1.RGBA()
- sum += delta(r0, r1)
- sum += delta(g0, g1)
- sum += delta(b0, b1)
- n += 3
- }
- }
- return sum / n
-}
-
-var testCase = []struct {
- filename string
- tolerance int64
-}{
- {"../testdata/video-001.png", 1 << 12},
- {"../testdata/video-001.gif", 0},
- {"../testdata/video-001.interlaced.gif", 0},
-}
-
-func TestWriter(t *testing.T) {
- for _, tc := range testCase {
- m0, err := readImg(tc.filename)
- if err != nil {
- t.Error(tc.filename, err)
- continue
- }
- var buf bytes.Buffer
- err = Encode(&buf, m0, nil)
- if err != nil {
- t.Error(tc.filename, err)
- continue
- }
- m1, err := Decode(&buf)
- if err != nil {
- t.Error(tc.filename, err)
- continue
- }
- if m0.Bounds() != m1.Bounds() {
- t.Errorf("%s, bounds differ: %v and %v", tc.filename, m0.Bounds(), m1.Bounds())
- continue
- }
- // Compare the average delta to the tolerance level.
- avgDelta := averageDelta(m0, m1)
- if avgDelta > tc.tolerance {
- t.Errorf("%s: average delta is too high. expected: %d, got %d", tc.filename, tc.tolerance, avgDelta)
- continue
- }
- }
-}
-
-var frames = []string{
- "../testdata/video-001.gif",
- "../testdata/video-005.gray.gif",
-}
-
-func TestEncodeAll(t *testing.T) {
- g0 := &GIF{
- Image: make([]*image.Paletted, len(frames)),
- Delay: make([]int, len(frames)),
- LoopCount: 5,
- }
- for i, f := range frames {
- m, err := readGIF(f)
- if err != nil {
- t.Error(f, err)
- }
- g0.Image[i] = m.Image[0]
- }
- var buf bytes.Buffer
- if err := EncodeAll(&buf, g0); err != nil {
- t.Fatal("EncodeAll:", err)
- }
- g1, err := DecodeAll(&buf)
- if err != nil {
- t.Fatal("DecodeAll:", err)
- }
- if g0.LoopCount != g1.LoopCount {
- t.Errorf("loop counts differ: %d and %d", g0.LoopCount, g1.LoopCount)
- }
- for i := range g0.Image {
- m0, m1 := g0.Image[i], g1.Image[i]
- if m0.Bounds() != m1.Bounds() {
- t.Errorf("%s, bounds differ: %v and %v", frames[i], m0.Bounds(), m1.Bounds())
- }
- d0, d1 := g0.Delay[i], g1.Delay[i]
- if d0 != d1 {
- t.Errorf("%s: delay values differ: %d and %d", frames[i], d0, d1)
- }
- }
-
- g1.Delay = make([]int, 1)
- if err := EncodeAll(ioutil.Discard, g1); err == nil {
- t.Error("expected error from mismatched delay and image slice lengths")
- }
- if err := EncodeAll(ioutil.Discard, &GIF{}); err == nil {
- t.Error("expected error from providing empty gif")
- }
-}
-
-func BenchmarkEncode(b *testing.B) {
- b.StopTimer()
-
- bo := image.Rect(0, 0, 640, 480)
- rnd := rand.New(rand.NewSource(123))
-
- // Restrict to a 256-color paletted image to avoid quantization path.
- palette := make(color.Palette, 256)
- for i := range palette {
- palette[i] = color.RGBA{
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- 255,
- }
- }
- img := image.NewPaletted(image.Rect(0, 0, 640, 480), palette)
- for y := bo.Min.Y; y < bo.Max.Y; y++ {
- for x := bo.Min.X; x < bo.Max.X; x++ {
- img.Set(x, y, palette[rnd.Intn(256)])
- }
- }
-
- b.SetBytes(640 * 480 * 4)
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- Encode(ioutil.Discard, img, nil)
- }
-}
-
-func BenchmarkQuantizedEncode(b *testing.B) {
- b.StopTimer()
- img := image.NewRGBA(image.Rect(0, 0, 640, 480))
- bo := img.Bounds()
- rnd := rand.New(rand.NewSource(123))
- for y := bo.Min.Y; y < bo.Max.Y; y++ {
- for x := bo.Min.X; x < bo.Max.X; x++ {
- img.SetRGBA(x, y, color.RGBA{
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- uint8(rnd.Intn(256)),
- 255,
- })
- }
- }
- b.SetBytes(640 * 480 * 4)
- b.StartTimer()
- for i := 0; i < b.N; i++ {
- Encode(ioutil.Discard, img, nil)
- }
-}