aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go/game/range.go14
-rw-r--r--go/game/range_test.go37
2 files changed, 24 insertions, 27 deletions
diff --git a/go/game/range.go b/go/game/range.go
index 8b57fb1b..c98e1c44 100644
--- a/go/game/range.go
+++ b/go/game/range.go
@@ -27,20 +27,8 @@ func DistanceBetweenPermanents(p1, p2 Permanent) int {
}
func IsPositionInRange(origin Position, pos Position, r int) bool {
- x, y := float64(pos.X-origin.X), float64(pos.Y-origin.Y)
- ax, ay := math.Abs(x), math.Abs(y)
- if ax > float64(r) || ay > float64(r) {
- return false
- }
-
- var abs float64
- if pos.X > pos.Y {
- abs = ax + math.Floor(ay/2)
- } else {
- abs = ay + math.Floor(ax/2)
- }
- return abs <= float64(r)
+ return DistanceBetweenPositions(origin, pos) <= r
}
func PositionsInRange(origin Position, r int, includeOrigin bool) []Position {
diff --git a/go/game/range_test.go b/go/game/range_test.go
index cfd03e55..3d1636a6 100644
--- a/go/game/range_test.go
+++ b/go/game/range_test.go
@@ -7,19 +7,33 @@ import (
"golang.org/x/exp/slices"
)
-func TestPositionsInRange(t *testing.T) {
- origin := Position{0, 0}
- positionsInRange1 := []Position{{0, 1}, {1, 0}, {1, 1}}
- calculatedPositions := PositionsInRange(origin, 1, false)
- if len(positionsInRange1) != len(calculatedPositions) {
- t.Fatalf("Unexpected number of calculated positions")
+func assertPosSliceEqual(is, exp []Position, t *testing.T) {
+ if len(is) != len(exp) {
+ t.Fatal("Unexpected number of calculated positions:", is, exp)
}
- for _, p := range positionsInRange1 {
- if !slices.Contains(calculatedPositions, p) {
+ for _, p := range exp {
+ if !slices.Contains(is, p) {
t.Fatalf("Position %v not in calculated positions", p)
}
}
+}
+
+func TestPositionsInRange(t *testing.T) {
+ origin := Position{0, 0}
+ positionsInRange1 := []Position{{0, 1}, {1, 0}, {1, 1}}
+ calculatedPositions := PositionsInRange(origin, 1, false)
+ assertPosSliceEqual(calculatedPositions, positionsInRange1, t)
+
+ origin = Position{1, 0}
+ positionsInRange1 = []Position{{0, 0}, {0, 1}, {1, 1}, {2, 0}, {2, 1}}
+ calculatedPositions = PositionsInRange(origin, 1, false)
+ assertPosSliceEqual(calculatedPositions, positionsInRange1, t)
+
+ origin = Position{0, 2}
+ positionsInRange1 = []Position{{0, 1}, {1, 1}, {1, 2}, {0, 3}, {1, 3}}
+ calculatedPositions = PositionsInRange(origin, 1, false)
+ assertPosSliceEqual(calculatedPositions, positionsInRange1, t)
origin = Position{2, 2}
positionsInRange2 := []Position{
@@ -45,12 +59,7 @@ func TestPositionsInRange(t *testing.T) {
{4, 3},
}
calculatedPositions = PositionsInRange(origin, 2, false)
-
- for _, p := range positionsInRange2 {
- if !slices.Contains(calculatedPositions, p) {
- t.Fatalf("Position %v not in calculated positions", p)
- }
- }
+ assertPosSliceEqual(calculatedPositions, positionsInRange2, t)
}
func TestPositionNotInRange(t *testing.T) {