summaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go')
-rw-r--r--Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go207
1 files changed, 207 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go b/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go
new file mode 100644
index 000000000..1d84fa604
--- /dev/null
+++ b/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/blur_test.go
@@ -0,0 +1,207 @@
+// Copyright 2011 The Graphics-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 graphics
+
+import (
+ "code.google.com/p/graphics-go/graphics/graphicstest"
+ "image"
+ "image/color"
+ "testing"
+
+ _ "image/png"
+)
+
+var blurOneColorTests = []transformOneColorTest{
+ {
+ "1x1-blank", 1, 1, 1, 1,
+ &BlurOptions{0.83, 1},
+ []uint8{0xff},
+ []uint8{0xff},
+ },
+ {
+ "1x1-spreadblank", 1, 1, 1, 1,
+ &BlurOptions{0.83, 2},
+ []uint8{0xff},
+ []uint8{0xff},
+ },
+ {
+ "3x3-blank", 3, 3, 3, 3,
+ &BlurOptions{0.83, 2},
+ []uint8{
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ },
+ []uint8{
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff,
+ },
+ },
+ {
+ "3x3-dot", 3, 3, 3, 3,
+ &BlurOptions{0.34, 1},
+ []uint8{
+ 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0x00,
+ 0x00, 0x00, 0x00,
+ },
+ []uint8{
+ 0x00, 0x03, 0x00,
+ 0x03, 0xf2, 0x03,
+ 0x00, 0x03, 0x00,
+ },
+ },
+ {
+ "5x5-dot", 5, 5, 5, 5,
+ &BlurOptions{0.34, 1},
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x03, 0xf2, 0x03, 0x00,
+ 0x00, 0x00, 0x03, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ },
+ {
+ "5x5-dot-spread", 5, 5, 5, 5,
+ &BlurOptions{0.85, 1},
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xff, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x20, 0x10, 0x00,
+ 0x00, 0x20, 0x40, 0x20, 0x00,
+ 0x00, 0x10, 0x20, 0x10, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ },
+ {
+ "4x4-box", 4, 4, 4, 4,
+ &BlurOptions{0.34, 1},
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0xff, 0xff, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ },
+ []uint8{
+ 0x00, 0x03, 0x03, 0x00,
+ 0x03, 0xf8, 0xf8, 0x03,
+ 0x03, 0xf8, 0xf8, 0x03,
+ 0x00, 0x03, 0x03, 0x00,
+ },
+ },
+ {
+ "5x5-twodots", 5, 5, 5, 5,
+ &BlurOptions{0.34, 1},
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x96, 0x00, 0x96, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ []uint8{
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x02, 0x8e, 0x04, 0x8e, 0x02,
+ 0x00, 0x02, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ },
+ },
+}
+
+func TestBlurOneColor(t *testing.T) {
+ for _, oc := range blurOneColorTests {
+ dst := oc.newDst()
+ src := oc.newSrc()
+ opt := oc.opt.(*BlurOptions)
+ if err := Blur(dst, src, opt); err != nil {
+ t.Fatal(err)
+ }
+
+ if !checkTransformTest(t, &oc, dst) {
+ continue
+ }
+ }
+}
+
+func TestBlurEmpty(t *testing.T) {
+ empty := image.NewRGBA(image.Rect(0, 0, 0, 0))
+ if err := Blur(empty, empty, nil); err != nil {
+ t.Fatal(err)
+ }
+}
+
+func TestBlurGopher(t *testing.T) {
+ src, err := graphicstest.LoadImage("../testdata/gopher.png")
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ dst := image.NewRGBA(src.Bounds())
+ if err = Blur(dst, src, &BlurOptions{StdDev: 1.1}); err != nil {
+ t.Fatal(err)
+ }
+
+ cmp, err := graphicstest.LoadImage("../testdata/gopher-blur.png")
+ if err != nil {
+ t.Fatal(err)
+ }
+ err = graphicstest.ImageWithinTolerance(dst, cmp, 0x101)
+ if err != nil {
+ t.Fatal(err)
+ }
+}
+
+func benchBlur(b *testing.B, bounds image.Rectangle) {
+ b.StopTimer()
+
+ // Construct a fuzzy image.
+ src := image.NewRGBA(bounds)
+ for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
+ for x := bounds.Min.X; x < bounds.Max.X; x++ {
+ src.SetRGBA(x, y, color.RGBA{
+ uint8(5 * x % 0x100),
+ uint8(7 * y % 0x100),
+ uint8((7*x + 5*y) % 0x100),
+ 0xff,
+ })
+ }
+ }
+ dst := image.NewRGBA(bounds)
+
+ b.StartTimer()
+ for i := 0; i < b.N; i++ {
+ Blur(dst, src, &BlurOptions{0.84, 3})
+ }
+}
+
+func BenchmarkBlur400x400x3(b *testing.B) {
+ benchBlur(b, image.Rect(0, 0, 400, 400))
+}
+
+// Exactly twice the pixel count of 400x400.
+func BenchmarkBlur400x800x3(b *testing.B) {
+ benchBlur(b, image.Rect(0, 0, 400, 800))
+}
+
+// Exactly twice the pixel count of 400x800
+func BenchmarkBlur400x1600x3(b *testing.B) {
+ benchBlur(b, image.Rect(0, 0, 400, 1600))
+}