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 }