summaryrefslogtreecommitdiffstats
path: root/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go')
-rw-r--r--Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go156
1 files changed, 156 insertions, 0 deletions
diff --git a/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go b/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go
new file mode 100644
index 000000000..0bc321a4d
--- /dev/null
+++ b/Godeps/_workspace/src/code.google.com/p/graphics-go/graphics/detect/integral_test.go
@@ -0,0 +1,156 @@
+// 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 detect
+
+import (
+ "bytes"
+ "fmt"
+ "image"
+ "testing"
+)
+
+type integralTest struct {
+ x int
+ y int
+ src []uint8
+ res []uint8
+}
+
+var integralTests = []integralTest{
+ {
+ 1, 1,
+ []uint8{0x01},
+ []uint8{0x01},
+ },
+ {
+ 2, 2,
+ []uint8{
+ 0x01, 0x02,
+ 0x03, 0x04,
+ },
+ []uint8{
+ 0x01, 0x03,
+ 0x04, 0x0a,
+ },
+ },
+ {
+ 4, 4,
+ []uint8{
+ 0x02, 0x03, 0x00, 0x01,
+ 0x01, 0x02, 0x01, 0x05,
+ 0x01, 0x01, 0x01, 0x01,
+ 0x01, 0x01, 0x01, 0x01,
+ },
+ []uint8{
+ 0x02, 0x05, 0x05, 0x06,
+ 0x03, 0x08, 0x09, 0x0f,
+ 0x04, 0x0a, 0x0c, 0x13,
+ 0x05, 0x0c, 0x0f, 0x17,
+ },
+ },
+}
+
+func sprintBox(box []byte, width, height int) string {
+ buf := bytes.NewBuffer(nil)
+ i := 0
+ for y := 0; y < height; y++ {
+ for x := 0; x < width; x++ {
+ fmt.Fprintf(buf, " 0x%02x,", box[i])
+ i++
+ }
+ buf.WriteByte('\n')
+ }
+ return buf.String()
+}
+
+func TestIntegral(t *testing.T) {
+ for i, oc := range integralTests {
+ src := &image.Gray{
+ Pix: oc.src,
+ Stride: oc.x,
+ Rect: image.Rect(0, 0, oc.x, oc.y),
+ }
+ dst, _ := newIntegrals(src)
+ res := make([]byte, len(dst.pix))
+ for i, p := range dst.pix {
+ res[i] = byte(p)
+ }
+
+ if !bytes.Equal(res, oc.res) {
+ got := sprintBox(res, oc.x, oc.y)
+ want := sprintBox(oc.res, oc.x, oc.y)
+ t.Errorf("%d: got\n%s\n want\n%s", i, got, want)
+ }
+ }
+}
+
+func TestIntegralSum(t *testing.T) {
+ src := &image.Gray{
+ Pix: []uint8{
+ 0x02, 0x03, 0x00, 0x01, 0x03,
+ 0x01, 0x02, 0x01, 0x05, 0x05,
+ 0x01, 0x01, 0x01, 0x01, 0x02,
+ 0x01, 0x01, 0x01, 0x01, 0x07,
+ 0x02, 0x01, 0x00, 0x03, 0x01,
+ },
+ Stride: 5,
+ Rect: image.Rect(0, 0, 5, 5),
+ }
+ img, _ := newIntegrals(src)
+
+ type sumTest struct {
+ rect image.Rectangle
+ sum uint64
+ }
+
+ var sumTests = []sumTest{
+ {image.Rect(0, 0, 1, 1), 2},
+ {image.Rect(0, 0, 2, 1), 5},
+ {image.Rect(0, 0, 1, 3), 4},
+ {image.Rect(1, 1, 3, 3), 5},
+ {image.Rect(2, 2, 4, 4), 4},
+ {image.Rect(4, 3, 5, 5), 8},
+ {image.Rect(2, 4, 3, 5), 0},
+ }
+
+ for _, st := range sumTests {
+ s := img.sum(st.rect)
+ if s != st.sum {
+ t.Errorf("%v: got %d want %d", st.rect, s, st.sum)
+ return
+ }
+ }
+}
+
+func TestIntegralSubImage(t *testing.T) {
+ m0 := &image.Gray{
+ Pix: []uint8{
+ 0x02, 0x03, 0x00, 0x01, 0x03,
+ 0x01, 0x02, 0x01, 0x05, 0x05,
+ 0x01, 0x04, 0x01, 0x01, 0x02,
+ 0x01, 0x02, 0x01, 0x01, 0x07,
+ 0x02, 0x01, 0x09, 0x03, 0x01,
+ },
+ Stride: 5,
+ Rect: image.Rect(0, 0, 5, 5),
+ }
+ b := image.Rect(1, 1, 4, 4)
+ m1 := m0.SubImage(b)
+ mi0, _ := newIntegrals(m0)
+ mi1, _ := newIntegrals(m1)
+
+ sum0 := mi0.sum(b)
+ sum1 := mi1.sum(b)
+ if sum0 != sum1 {
+ t.Errorf("b got %d want %d", sum0, sum1)
+ }
+
+ r0 := image.Rect(2, 2, 4, 4)
+ sum0 = mi0.sum(r0)
+ sum1 = mi1.sum(r0)
+ if sum0 != sum1 {
+ t.Errorf("r0 got %d want %d", sum1, sum0)
+ }
+}