basic ECS spawner
This commit is contained in:
181
addons/gecs/tests/performance/test_set_perf.gd
Normal file
181
addons/gecs/tests/performance/test_set_perf.gd
Normal file
@@ -0,0 +1,181 @@
|
||||
## Set and Array Performance Tests
|
||||
## Tests Set operations and ArrayExtensions performance
|
||||
extends GdUnitTestSuite
|
||||
|
||||
var runner: GdUnitSceneRunner
|
||||
var world: World
|
||||
|
||||
|
||||
func before():
|
||||
runner = scene_runner("res://addons/gecs/tests/test_scene.tscn")
|
||||
world = runner.get_property("world")
|
||||
ECS.world = world
|
||||
|
||||
|
||||
func after_test():
|
||||
if world:
|
||||
world.purge(false)
|
||||
|
||||
|
||||
## Helper to create test arrays with specified overlap
|
||||
func create_test_arrays(size1: int, size2: int, overlap_percent: float = 0.5) -> Array:
|
||||
var array1: Array = []
|
||||
var array2: Array = []
|
||||
|
||||
# Create first array
|
||||
for i in size1:
|
||||
array1.append("Entity_%d" % i)
|
||||
|
||||
# Create second array with specified overlap
|
||||
var overlap_count = int(size2 * overlap_percent)
|
||||
var unique_count = size2 - overlap_count
|
||||
|
||||
# Add overlapping elements
|
||||
for i in overlap_count:
|
||||
if i < size1:
|
||||
array2.append(array1[i])
|
||||
|
||||
# Add unique elements
|
||||
for i in unique_count:
|
||||
array2.append("Entity_%d" % (size1 + i))
|
||||
|
||||
return [array1, array2]
|
||||
|
||||
|
||||
## Test Set.intersect() performance
|
||||
func test_set_intersect(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var set1 = Set.new(arrays[0])
|
||||
var set2 = Set.new(arrays[1])
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = set1.intersect(set2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("set_intersect", scale, time_ms)
|
||||
|
||||
|
||||
## Test Set.union() performance
|
||||
func test_set_union(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var set1 = Set.new(arrays[0])
|
||||
var set2 = Set.new(arrays[1])
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = set1.union(set2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("set_union", scale, time_ms)
|
||||
|
||||
|
||||
## Test Set.difference() performance
|
||||
func test_set_difference(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var set1 = Set.new(arrays[0])
|
||||
var set2 = Set.new(arrays[1])
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = set1.difference(set2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("set_difference", scale, time_ms)
|
||||
|
||||
|
||||
## Test ArrayExtensions.intersect() performance
|
||||
func test_array_intersect(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var array1 = arrays[0]
|
||||
var array2 = arrays[1]
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = ArrayExtensions.intersect(array1, array2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("array_intersect", scale, time_ms)
|
||||
|
||||
|
||||
## Test ArrayExtensions.union() performance
|
||||
func test_array_union(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var array1 = arrays[0]
|
||||
var array2 = arrays[1]
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = ArrayExtensions.union(array1, array2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("array_union", scale, time_ms)
|
||||
|
||||
|
||||
## Test ArrayExtensions.difference() performance
|
||||
func test_array_difference(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.5)
|
||||
var array1 = arrays[0]
|
||||
var array2 = arrays[1]
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
var result = ArrayExtensions.difference(array1, array2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("array_difference", scale, time_ms)
|
||||
|
||||
|
||||
## Test Set.erase() performance
|
||||
func test_set_erase(scale: int, test_parameters := [[100], [1000], [10000]]):
|
||||
var array1: Array = []
|
||||
for i in scale:
|
||||
array1.append("Entity_%d" % i)
|
||||
|
||||
var test_set := Set.new(array1)
|
||||
|
||||
var time_ms = PerfHelpers.time_it(func():
|
||||
# erase half the elements
|
||||
for i in scale / 2:
|
||||
test_set.erase("Entity_%d" % i)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("set_erase", scale, time_ms)
|
||||
|
||||
|
||||
## Test Set vs Array operations with no overlap
|
||||
func test_set_vs_array_no_overlap(scale: int, test_parameters := [[100], [1000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 0.0) # No overlap
|
||||
var array1 = arrays[0]
|
||||
var array2 = arrays[1]
|
||||
var set1 = Set.new(array1)
|
||||
var set2 = Set.new(array2)
|
||||
|
||||
# Test array intersect
|
||||
var array_time = PerfHelpers.time_it(func():
|
||||
var result = ArrayExtensions.intersect(array1, array2)
|
||||
)
|
||||
|
||||
# Test set intersect
|
||||
var set_time = PerfHelpers.time_it(func():
|
||||
var result = set1.intersect(set2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("array_intersect_no_overlap", scale, array_time)
|
||||
PerfHelpers.record_result("set_intersect_no_overlap", scale, set_time)
|
||||
|
||||
|
||||
## Test Set vs Array operations with complete overlap
|
||||
func test_set_vs_array_complete_overlap(scale: int, test_parameters := [[100], [1000]]):
|
||||
var arrays = create_test_arrays(scale, scale, 1.0) # Complete overlap
|
||||
var array1 = arrays[0]
|
||||
var array2 = arrays[1]
|
||||
var set1 = Set.new(array1)
|
||||
var set2 = Set.new(array2)
|
||||
|
||||
# Test array intersect
|
||||
var array_time = PerfHelpers.time_it(func():
|
||||
var result = ArrayExtensions.intersect(array1, array2)
|
||||
)
|
||||
|
||||
# Test set intersect
|
||||
var set_time = PerfHelpers.time_it(func():
|
||||
var result = set1.intersect(set2)
|
||||
)
|
||||
|
||||
PerfHelpers.record_result("array_intersect_complete_overlap", scale, array_time)
|
||||
PerfHelpers.record_result("set_intersect_complete_overlap", scale, set_time)
|
||||
Reference in New Issue
Block a user