diff options
author | Nick White <git@njw.name> | 2020-08-03 15:49:55 +0100 |
---|---|---|
committer | Nick White <git@njw.name> | 2020-08-03 15:49:55 +0100 |
commit | 1fe7dcdd23691212e8393559fc9d7d5100981386 (patch) | |
tree | 64d5b548c7ac9342e57f99315ba30224e8de2d9e /integralimg.go | |
parent | d0b28b984bcd1c73dc5782c8d4df2bdc4ab0b310 (diff) |
Add more Sum() tests, and further correct bugs found from it
The implementation should be bug-free now. Of course, I thought
that previously, then found more, so we shall see. There are
more tests, though, and they definitely pass, so that's a good
start.
Diffstat (limited to 'integralimg.go')
-rw-r--r-- | integralimg.go | 33 |
1 files changed, 19 insertions, 14 deletions
diff --git a/integralimg.go b/integralimg.go index 922b1ce..a197920 100644 --- a/integralimg.go +++ b/integralimg.go @@ -140,38 +140,43 @@ func highest(a, b int) int { } func (i Image) topLeft(r image.Rectangle) uint64 { - x := highest(r.Min.X, 0) - y := highest(r.Min.Y, 0) - if x == 0 || y == 0 { + b := i.Bounds() + x := r.Min.X - 1 + y := r.Min.Y - 1 + x = lowest(x, b.Max.X - 1) + y = lowest(y, b.Max.Y - 1) + if x < 0 || y < 0 { return 0 } return i[y][x] } func (i Image) topRight(r image.Rectangle) uint64 { - x := lowest(r.Max.X - 1, i.Bounds().Dx() - 1) - y := highest(r.Min.Y, 0) - if x == 0 || y == 0 { + b := i.Bounds() + x := lowest(r.Max.X - 1, b.Max.X - 1) + y := r.Min.Y - 1 + y = lowest(y, b.Max.Y - 1) + if x < 0 || y < 0 { return 0 } return i[y][x] } func (i Image) bottomLeft(r image.Rectangle) uint64 { - x := highest(r.Min.X, 0) - y := lowest(r.Max.Y - 1, i.Bounds().Dy() - 1) - if x == 0 || y == 0 { + b := i.Bounds() + x := r.Min.X - 1 + x = lowest(x, b.Max.X - 1) + y := lowest(r.Max.Y - 1, b.Max.Y - 1) + if x < 0 || y < 0 { return 0 } return i[y][x] } func (i Image) bottomRight(r image.Rectangle) uint64 { - x := lowest(r.Max.X - 1, i.Bounds().Dx() - 1) - y := lowest(r.Max.Y - 1, i.Bounds().Dy() - 1) - if x == 0 || y == 0 { - return 0 - } + b := i.Bounds() + x := lowest(r.Max.X - 1, b.Max.X - 1) + y := lowest(r.Max.Y - 1, b.Max.Y - 1) return i[y][x] } |