diff options
| author | Florian Fischer <florian.fischer@muhq.space> | 2025-07-22 13:30:27 -0400 |
|---|---|---|
| committer | Florian Fischer <florian.fischer@muhq.space> | 2025-07-24 12:22:10 -0400 |
| commit | c59b6d5e3e71ceebec87242b8c54457078ebfcbd (patch) | |
| tree | 9e6c11b603165b78a0b379b972373994dc2d56fd | |
| parent | 6f20f68f32d0b9b6ed8ba7fd09914602be3e5953 (diff) | |
| download | muhqs-game-c59b6d5e3e71ceebec87242b8c54457078ebfcbd.tar.gz muhqs-game-c59b6d5e3e71ceebec87242b8c54457078ebfcbd.zip | |
reuse distance calculation implementation
| -rw-r--r-- | go/game/range.go | 14 | ||||
| -rw-r--r-- | go/game/range_test.go | 37 |
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) { |
