aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--go/game/range.go2
-rw-r--r--go/game/range_test.go43
2 files changed, 44 insertions, 1 deletions
diff --git a/go/game/range.go b/go/game/range.go
index bc50c99b..8b57fb1b 100644
--- a/go/game/range.go
+++ b/go/game/range.go
@@ -10,7 +10,7 @@ func DistanceBetweenPositions(origin, pos Position) int {
ax, ay := math.Abs(x), math.Abs(y)
var abs float64
- if pos.X > pos.Y {
+ if ax > ay {
abs = ax + math.Floor(ay/2)
} else {
abs = ay + math.Floor(ax/2)
diff --git a/go/game/range_test.go b/go/game/range_test.go
index 4b6e05ad..cfd03e55 100644
--- a/go/game/range_test.go
+++ b/go/game/range_test.go
@@ -1,6 +1,7 @@
package game
import (
+ "strings"
"testing"
"golang.org/x/exp/slices"
@@ -59,3 +60,45 @@ func TestPositionNotInRange(t *testing.T) {
t.Fatalf("Invalid range inclusion %v not in %v", o, PositionsInRange(o, 2, false))
}
}
+
+func TestDistanceBetweenPos(t *testing.T) {
+ o := Position{0, 0}
+ p := Position{2, 0}
+ d := DistanceBetweenPositions(o, p)
+ d2 := DistanceBetweenPositions(p, o)
+ if d != 2 {
+ t.Fatal("Incorrect distance", d)
+ }
+ if d != d2 {
+ t.Fatal("Distance direction discrepance", d, d2)
+ }
+}
+
+func TestDistanceBetweenPerms(t *testing.T) {
+ mapDef := `map: |1-
+ H T
+symbols:
+ T: tower
+ H: house
+ S: street
+`
+ s := NewLocalState()
+ r := strings.NewReader(mapDef)
+ m, _ := readMap(r)
+ s.SetMap(m)
+
+ p := s.AddNewPlayer("player", NewDeck())
+ o := s.AddNewPlayer("opponent", NewDeck())
+
+ p1 := s.addNewUnit(NewCard("base/fighter"), Position{0, 0}, o)
+ p2 := s.addNewUnit(NewCard("base/fighter"), Position{2, 0}, p)
+
+ d := DistanceBetweenPermanents(p1, p2)
+ d2 := DistanceBetweenPermanents(p2, p1)
+ if d != 2 {
+ t.Fatal("Incorrect distance", d)
+ }
+ if d2 != 2 {
+ t.Fatal("Incorrect distance", d2)
+ }
+}