aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNigel Tao <nigeltao@golang.org>2010-02-11 13:38:16 +1100
committerNigel Tao <nigeltao@golang.org>2010-02-11 13:38:16 +1100
commitfc8e3d4004a1d583d329aa5055407c83e52bd581 (patch)
tree1733ffd7824a073635d2bbba35e1e8251eb4a3c9
parentc27c3aa6d800c5e9c8f2027b43eadb0f7a51eac3 (diff)
downloadgo-fc8e3d4004a1d583d329aa5055407c83e52bd581.tar.gz
go-fc8e3d4004a1d583d329aa5055407c83e52bd581.zip
exp/draw test.
R=rsc CC=golang-dev https://golang.org/cl/203062
-rw-r--r--src/pkg/Makefile1
-rw-r--r--src/pkg/exp/draw/draw_test.go89
2 files changed, 89 insertions, 1 deletions
diff --git a/src/pkg/Makefile b/src/pkg/Makefile
index 68e4a16d3a..2a65d37698 100644
--- a/src/pkg/Makefile
+++ b/src/pkg/Makefile
@@ -121,7 +121,6 @@ DIRS=\
NOTEST=\
debug/proc\
- exp/draw\
go/ast\
go/doc\
go/token\
diff --git a/src/pkg/exp/draw/draw_test.go b/src/pkg/exp/draw/draw_test.go
new file mode 100644
index 0000000000..61794dab88
--- /dev/null
+++ b/src/pkg/exp/draw/draw_test.go
@@ -0,0 +1,89 @@
+// Copyright 2010 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 draw
+
+import (
+ "image"
+ "testing"
+)
+
+func eq(c0, c1 image.Color) bool {
+ r0, g0, b0, a0 := c0.RGBA()
+ r1, g1, b1, a1 := c1.RGBA()
+ return r0 == r1 && g0 == g1 && b0 == b1 && a0 == a1
+}
+
+func fillBlue(alpha int) image.Image {
+ return image.ColorImage{image.RGBAColor{0, 0, uint8(alpha), uint8(alpha)}}
+}
+
+func fillAlpha(alpha int) image.Image {
+ return image.ColorImage{image.AlphaColor{uint8(alpha)}}
+}
+
+func vgradGreen(alpha int) image.Image {
+ m := image.NewRGBA(16, 16)
+ for y := 0; y < 16; y++ {
+ for x := 0; x < 16; x++ {
+ m.Set(x, y, image.RGBAColor{0, uint8(y * alpha / 15), 0, uint8(alpha)})
+ }
+ }
+ return m
+}
+
+func vgradAlpha(alpha int) image.Image {
+ m := image.NewAlpha(16, 16)
+ for y := 0; y < 16; y++ {
+ for x := 0; x < 16; x++ {
+ m.Set(x, y, image.AlphaColor{uint8(y * alpha / 15)})
+ }
+ }
+ return m
+}
+
+func hgradRed(alpha int) Image {
+ m := image.NewRGBA(16, 16)
+ for y := 0; y < 16; y++ {
+ for x := 0; x < 16; x++ {
+ m.Set(x, y, image.RGBAColor{uint8(x * alpha / 15), 0, 0, uint8(alpha)})
+ }
+ }
+ return m
+}
+
+type drawTest struct {
+ desc string
+ src image.Image
+ mask image.Image
+ expected image.Color
+}
+
+var drawTests = []drawTest{
+ // Uniform mask (0% opaque) mask.
+ drawTest{"nop", vgradGreen(255), fillAlpha(0), image.RGBAColor{136, 0, 0, 255}},
+ // Uniform mask (100%, 75%, nil) and vertical-gradient source.
+ drawTest{"copy", vgradGreen(90), fillAlpha(255), image.RGBAColor{0, 48, 0, 90}},
+ drawTest{"copyAlpha", vgradGreen(90), fillAlpha(192), image.RGBAColor{100, 36, 0, 255}},
+ drawTest{"copyNil", vgradGreen(90), nil, image.RGBAColor{0, 48, 0, 90}},
+ // Uniform mask (100%, 75%, nil) and uniform source.
+ drawTest{"fill", fillBlue(90), fillAlpha(255), image.RGBAColor{0, 0, 90, 90}},
+ drawTest{"fillAlpha", fillBlue(90), fillAlpha(192), image.RGBAColor{100, 0, 68, 255}},
+ drawTest{"fillNil", fillBlue(90), nil, image.RGBAColor{0, 0, 90, 90}},
+ // Variable mask. In detail, at (x, y) == (8, 8):
+ // The destination pixel is {136, 0, 0, 255}.
+ // The source pixel is {0, 0, 255, 255}.
+ // The mask pixel's alpha is 102, or 40%.
+ drawTest{"generic", fillBlue(255), vgradAlpha(192), image.RGBAColor{81, 0, 102, 255}},
+}
+
+func TestDraw(t *testing.T) {
+ for _, test := range drawTests {
+ dst := hgradRed(255)
+ DrawMask(dst, Rect(0, 0, 16, 16), test.src, ZP, test.mask, ZP, SoverD)
+ if !eq(dst.At(8, 8), test.expected) {
+ t.Errorf("draw %s: %v versus %v", test.desc, dst.At(8, 8), test.expected)
+ }
+ }
+}