mirror of
https://github.com/knight0zh/aoi.git
synced 2026-02-03 23:55:09 +08:00
增加test
This commit is contained in:
@@ -139,7 +139,7 @@ func BenchmarkGridManger(b *testing.B) {
|
||||
manger.Add(&Entity{
|
||||
X: float64(rand.Intn(5) * 10),
|
||||
Y: float64(rand.Intn(5) * 10),
|
||||
Name: fmt.Sprintf("name%d", rand.Intn(50)),
|
||||
Name: fmt.Sprintf("player%d", rand.Intn(50)),
|
||||
})
|
||||
wg.Done()
|
||||
}()
|
||||
@@ -148,7 +148,7 @@ func BenchmarkGridManger(b *testing.B) {
|
||||
manger.Delete(&Entity{
|
||||
X: float64(rand.Intn(5) * 10),
|
||||
Y: float64(rand.Intn(5) * 10),
|
||||
Name: fmt.Sprintf("name%d", rand.Intn(50)),
|
||||
Name: fmt.Sprintf("player%d", rand.Intn(50)),
|
||||
})
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
@@ -113,7 +113,7 @@ func (n *Node) cutNode() {
|
||||
n.Entities = nil
|
||||
}
|
||||
|
||||
func NewQuadTree(xStart, yStart, width float64, opts ...QuadOption) *QuadTree {
|
||||
func NewQuadTree(xStart, yStart, width float64, opts ...QuadOption) AOI {
|
||||
basicNode := &Node{
|
||||
Leaf: true,
|
||||
Deep: 1,
|
||||
|
||||
@@ -1,12 +1,17 @@
|
||||
package aoi
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestFindQuadrant(t *testing.T) {
|
||||
tree := NewQuadTree(0, 0, 100)
|
||||
func Test_FindQuadrant(t *testing.T) {
|
||||
aoi := NewQuadTree(0, 0, 100)
|
||||
tree := aoi.(*QuadTree)
|
||||
tree.cutNode()
|
||||
|
||||
tests := []struct {
|
||||
@@ -57,8 +62,33 @@ func TestFindQuadrant(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func Test_NeedCut(t *testing.T) {
|
||||
aoi := NewQuadTree(0, 0, 100)
|
||||
tree := aoi.(*QuadTree)
|
||||
|
||||
tree.maxCap = 2 // 超过两人节点分裂
|
||||
assert.Equal(t, false, tree.needCut())
|
||||
player1 := &Entity{
|
||||
X: 60.9,
|
||||
Y: 24.9,
|
||||
Name: "player1",
|
||||
}
|
||||
tree.Add(player1)
|
||||
|
||||
assert.Equal(t, false, tree.needCut())
|
||||
player2 := &Entity{
|
||||
X: 25,
|
||||
Y: 25,
|
||||
Name: "player2",
|
||||
}
|
||||
tree.Add(player2)
|
||||
|
||||
assert.Equal(t, true, tree.needCut())
|
||||
}
|
||||
|
||||
func TestNode_Search(t *testing.T) {
|
||||
tree := NewQuadTree(0, 0, 100)
|
||||
aoi := NewQuadTree(0, 0, 100)
|
||||
tree := aoi.(*QuadTree)
|
||||
tree.maxCap = 2 // 超过两人节点分裂
|
||||
tree.radius = 5
|
||||
player1 := &Entity{
|
||||
@@ -109,4 +139,46 @@ func TestNode_Search(t *testing.T) {
|
||||
tree.Add(player5)
|
||||
entities = tree.Search(player2)
|
||||
assert.Equal(t, 2, len(entities), "player2 player5")
|
||||
|
||||
tree.Delete(player5)
|
||||
entities = tree.Search(player2)
|
||||
assert.Equal(t, 1, len(entities), "player2")
|
||||
}
|
||||
|
||||
func BenchmarkQuadtree(b *testing.B) {
|
||||
var wg sync.WaitGroup
|
||||
aoi := NewQuadTree(0, 0, 100)
|
||||
tree := aoi.(*QuadTree)
|
||||
rand.Seed(time.Now().UnixNano())
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
wg.Add(3000)
|
||||
for j := 0; j < 1000; j++ {
|
||||
go func() {
|
||||
tree.Add(&Entity{
|
||||
X: float64(rand.Intn(5) * 10),
|
||||
Y: float64(rand.Intn(5) * 10),
|
||||
Name: fmt.Sprintf("player%d", rand.Intn(50)),
|
||||
})
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
go func() {
|
||||
tree.Delete(&Entity{
|
||||
X: float64(rand.Intn(5) * 10),
|
||||
Y: float64(rand.Intn(5) * 10),
|
||||
Name: fmt.Sprintf("player%d", rand.Intn(50)),
|
||||
})
|
||||
wg.Done()
|
||||
}()
|
||||
|
||||
go func() {
|
||||
tree.Search(&Entity{
|
||||
X: float64(rand.Intn(5) * 10),
|
||||
Y: float64(rand.Intn(5) * 10),
|
||||
})
|
||||
wg.Done()
|
||||
}()
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user