From eb2fc0af7db8614024f6d73093ccb0825c8a1cc0 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Tue, 22 Jul 2025 11:07:39 -0400 Subject: fix incorrect range calculation --- go/game/range.go | 2 +- go/game/range_test.go | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) 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) + } +} -- cgit v1.2.3