github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/webp/writer_test.go (about)

     1  // Copyright 2014 <chaishushan{AT}gmail.com>. 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 webp
     6  
     7  import (
     8  	"bytes"
     9  	"io/ioutil"
    10  	"testing"
    11  
    12  	image_ext "github.com/chai2010/gopkg/image"
    13  	_ "github.com/chai2010/gopkg/image/png"
    14  )
    15  
    16  type tTester struct {
    17  	Filename string
    18  	Lossless bool
    19  	Quality  float32 // 0 ~ 100
    20  	MaxDelta int64
    21  }
    22  
    23  var tTesterList = []tTester{
    24  	tTester{
    25  		Filename: "video-001.png",
    26  		Lossless: false,
    27  		Quality:  90,
    28  		MaxDelta: 5,
    29  	},
    30  	tTester{
    31  		Filename: "video-001.png",
    32  		Lossless: true,
    33  		Quality:  90,
    34  		MaxDelta: 0,
    35  	},
    36  	tTester{
    37  		Filename: "video-005.gray.png",
    38  		Lossless: false,
    39  		Quality:  90,
    40  		MaxDelta: 5,
    41  	},
    42  	tTester{
    43  		Filename: "video-005.gray.png",
    44  		Lossless: true,
    45  		Quality:  90,
    46  		MaxDelta: 0,
    47  	},
    48  }
    49  
    50  func TestEncode(t *testing.T) {
    51  	for i, v := range tTesterList {
    52  		img0, _, err := image_ext.Load(testdataDir+v.Filename, nil)
    53  		if err != nil {
    54  			t.Fatalf("%d: %v", i, err)
    55  		}
    56  
    57  		buf := new(bytes.Buffer)
    58  		err = Encode(buf, img0, &Options{
    59  			Lossless: v.Lossless,
    60  			Quality:  v.Quality,
    61  		})
    62  		if err != nil {
    63  			t.Fatalf("%d: %v", i, err)
    64  		}
    65  
    66  		img1, err := Decode(buf, nil)
    67  		if err != nil {
    68  			t.Fatalf("%d: %v", i, err)
    69  		}
    70  
    71  		// Compare the average delta to the tolerance level.
    72  		want := int64(v.MaxDelta << 8)
    73  		if got := averageDelta(img0, img1); got > want {
    74  			t.Fatalf("%d: average delta too high; got %d, want <= %d", i, got, want)
    75  		}
    76  	}
    77  }
    78  
    79  // BenchmarkEncode benchmarks the encoding of an image.
    80  func BenchmarkEncode(b *testing.B) {
    81  	img, _, err := image_ext.Load(testdataDir+"video-001.png", nil)
    82  	if err != nil {
    83  		b.Fatal(err)
    84  	}
    85  	s := img.Bounds().Size()
    86  	b.SetBytes(int64(s.X * s.Y * 4))
    87  	b.ResetTimer()
    88  	for i := 0; i < b.N; i++ {
    89  		Encode(ioutil.Discard, img, nil)
    90  	}
    91  }