test: battle multiple non-crossing enemies
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package controller_test
|
||||
|
||||
import (
|
||||
"maps"
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
"github.com/iliadenisov/galaxy/internal/controller"
|
||||
@@ -124,3 +126,70 @@ func TestFilterBattleOpponents(t *testing.T) {
|
||||
assert.True(t, controller.FilterBattleOpponents(c, 1, 3, cacheProbability))
|
||||
assert.NotContains(t, cacheProbability[1], 3)
|
||||
}
|
||||
|
||||
func TestProduceBattles(t *testing.T) {
|
||||
c, g := newCache()
|
||||
|
||||
race_C_name, race_D_name := "Race_C", "Race_D"
|
||||
race_C_idx, _ := c.AddRace(race_C_name)
|
||||
race_D_idx, _ := c.AddRace(race_D_name)
|
||||
|
||||
assert.NoError(t, g.UpdateRelation(Race_0.Name, Race_1.Name, game.RelationWar))
|
||||
assert.NoError(t, g.UpdateRelation(Race_1.Name, Race_0.Name, game.RelationWar))
|
||||
|
||||
assert.NoError(t, g.UpdateRelation(race_C_name, race_D_name, game.RelationWar))
|
||||
assert.NoError(t, g.UpdateRelation(race_D_name, race_C_name, game.RelationWar))
|
||||
|
||||
rel, err := g.Relation(Race_0.Name, race_C_name)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, game.RelationPeace, rel)
|
||||
|
||||
rel, err = g.Relation(Race_1.Name, race_C_name)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, game.RelationPeace, rel)
|
||||
|
||||
rel, err = g.Relation(Race_0.Name, race_D_name)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, game.RelationPeace, rel)
|
||||
|
||||
rel, err = g.Relation(Race_1.Name, race_D_name)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, game.RelationPeace, rel)
|
||||
|
||||
// Race_0
|
||||
assert.NoError(t, c.CreateShips(Race_0_idx, Race_0_Gunship, R0_Planet_0_num, 10))
|
||||
|
||||
// Race_1
|
||||
c.CreateShipsUnsafe_T(Race_1_idx, c.MustShipClass(Race_1_idx, Race_1_Gunship).ID, R0_Planet_0_num, 11)
|
||||
|
||||
// Race_C
|
||||
assert.NoError(t, c.CreateShipType(race_C_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F()))
|
||||
c.CreateShipsUnsafe_T(race_C_idx, c.MustShipClass(race_C_idx, Cruiser.Name).ID, R0_Planet_0_num, 12)
|
||||
|
||||
// Race_D
|
||||
assert.NoError(t, c.CreateShipType(race_D_idx, Cruiser.Name, Cruiser.Drive.F(), int(Cruiser.Armament), Cruiser.Weapons.F(), Cruiser.Shields.F(), Cruiser.Cargo.F()))
|
||||
c.CreateShipsUnsafe_T(race_D_idx, c.MustShipClass(race_D_idx, Cruiser.Name).ID, R0_Planet_0_num, 13)
|
||||
|
||||
battle := controller.ProduceBattles(c)
|
||||
|
||||
assert.Len(t, battle, 1)
|
||||
b := battle[0]
|
||||
assert.Equal(t, R0_Planet_0_num, b.Planet)
|
||||
assert.Len(t, b.ObserverGroups, 4)
|
||||
assert.Len(t, b.InitialNumbers, 4)
|
||||
assert.ElementsMatch(t, slices.Collect(maps.Keys(b.ObserverGroups)), slices.Collect(maps.Keys(b.InitialNumbers)))
|
||||
assert.Equal(t, 10, int(b.InitialNumbers[0]))
|
||||
assert.Equal(t, 11, int(b.InitialNumbers[1]))
|
||||
assert.Equal(t, 12, int(b.InitialNumbers[2]))
|
||||
assert.Equal(t, 13, int(b.InitialNumbers[3]))
|
||||
if c.ShipGroup(0).Number == 0 {
|
||||
assert.Greater(t, c.ShipGroup(1).Number, uint(0))
|
||||
} else {
|
||||
assert.Zero(t, c.ShipGroup(1).Number)
|
||||
}
|
||||
if c.ShipGroup(2).Number == 0 {
|
||||
assert.Greater(t, c.ShipGroup(3).Number, uint(0))
|
||||
} else {
|
||||
assert.Zero(t, c.ShipGroup(3).Number)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user