github.com/cellofellow/gopkg@v0.0.0-20140722061823-eec0544a62ad/image/jxr/reader_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 jxr 6 7 import ( 8 "image" 9 _ "image/png" 10 "os" 11 "testing" 12 ) 13 14 const testdataDir = "../testdata/" 15 16 func compare(t *testing.T, img0, img1 image.Image) { 17 b := img1.Bounds() 18 if !b.Eq(img0.Bounds()) { 19 t.Fatalf("wrong image size: want %s, got %s", img0.Bounds(), b) 20 } 21 for y := b.Min.Y; y < b.Max.Y; y++ { 22 for x := b.Min.X; x < b.Max.X; x++ { 23 c0 := img0.At(x, y) 24 c1 := img1.At(x, y) 25 r0, g0, b0, a0 := c0.RGBA() 26 r1, g1, b1, a1 := c1.RGBA() 27 if r0 != r1 || g0 != g1 || b0 != b1 || a0 != a1 { 28 t.Fatalf("pixel at (%d, %d) has wrong color: want %v, got %v", x, y, c0, c1) 29 } 30 } 31 } 32 } 33 34 // TestDecode tests that decoding a PNG image and a BMP image result in the 35 // same pixel data. 36 func TestDecode(t *testing.T) { 37 f0, err := os.Open(testdataDir + "video-001.png") 38 if err != nil { 39 t.Fatal(err) 40 } 41 defer f0.Close() 42 img0, _, err := image.Decode(f0) 43 if err != nil { 44 t.Fatal(err) 45 } 46 47 f1, err := os.Open(testdataDir + "video-001.wdp") 48 if err != nil { 49 t.Fatal(err) 50 } 51 defer f1.Close() 52 img1, _, err := image.Decode(f1) 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 // Compare the average delta to the tolerance level. 58 want := int64(2 << 8) 59 if got := averageDelta(img0, img1); got > want { 60 t.Fatalf("average delta too high; got %d, want <= %d", got, want) 61 } 62 } 63 64 // averageDelta returns the average delta in RGB space. The two images must 65 // have the same bounds. 66 func averageDelta(m0, m1 image.Image) int64 { 67 b := m0.Bounds() 68 var sum, n int64 69 for y := b.Min.Y; y < b.Max.Y; y++ { 70 for x := b.Min.X; x < b.Max.X; x++ { 71 c0 := m0.At(x, y) 72 c1 := m1.At(x, y) 73 r0, g0, b0, _ := c0.RGBA() 74 r1, g1, b1, _ := c1.RGBA() 75 sum += delta(r0, r1) 76 sum += delta(g0, g1) 77 sum += delta(b0, b1) 78 n += 3 79 } 80 } 81 return sum / n 82 } 83 84 func delta(u0, u1 uint32) int64 { 85 d := int64(u0) - int64(u1) 86 if d < 0 { 87 return -d 88 } 89 return d 90 }