新增soastorage存储器
This commit is contained in:
88
tests/ECS/Core/ComponentStorage.auto.test.ts
Normal file
88
tests/ECS/Core/ComponentStorage.auto.test.ts
Normal file
@@ -0,0 +1,88 @@
|
||||
import { Component } from '../../../src/ECS/Component';
|
||||
import { ComponentStorageManager, EnableSoA } from '../../../src/ECS/Core/ComponentStorage';
|
||||
|
||||
// 默认原始存储组件
|
||||
class PositionComponent extends Component {
|
||||
public x: number = 0;
|
||||
public y: number = 0;
|
||||
public z: number = 0;
|
||||
}
|
||||
|
||||
// 启用SoA优化的组件(用于大规模批量操作)
|
||||
@EnableSoA
|
||||
class LargeScaleComponent extends Component {
|
||||
public x: number = 0;
|
||||
public y: number = 0;
|
||||
public z: number = 0;
|
||||
public vx: number = 0;
|
||||
public vy: number = 0;
|
||||
public vz: number = 0;
|
||||
}
|
||||
|
||||
describe('SoA优化选择测试', () => {
|
||||
let manager: ComponentStorageManager;
|
||||
|
||||
beforeEach(() => {
|
||||
manager = new ComponentStorageManager();
|
||||
});
|
||||
|
||||
test('默认使用原始存储', () => {
|
||||
const storage = manager.getStorage(PositionComponent);
|
||||
|
||||
// 添加组件
|
||||
manager.addComponent(1, new PositionComponent());
|
||||
|
||||
// 验证能正常工作
|
||||
const component = manager.getComponent(1, PositionComponent);
|
||||
expect(component).toBeTruthy();
|
||||
expect(component?.x).toBe(0);
|
||||
|
||||
// 验证使用原始存储
|
||||
expect(storage.constructor.name).toBe('ComponentStorage');
|
||||
});
|
||||
|
||||
test('@EnableSoA装饰器启用优化', () => {
|
||||
const storage = manager.getStorage(LargeScaleComponent);
|
||||
|
||||
// 添加组件
|
||||
const component = new LargeScaleComponent();
|
||||
component.x = 100;
|
||||
component.vx = 10;
|
||||
manager.addComponent(1, component);
|
||||
|
||||
// 验证能正常工作
|
||||
const retrieved = manager.getComponent(1, LargeScaleComponent);
|
||||
expect(retrieved).toBeTruthy();
|
||||
expect(retrieved?.x).toBe(100);
|
||||
expect(retrieved?.vx).toBe(10);
|
||||
|
||||
// 验证使用SoA存储
|
||||
expect(storage.constructor.name).toBe('SoAStorage');
|
||||
});
|
||||
|
||||
test('SoA存储功能验证', () => {
|
||||
const entityCount = 1000;
|
||||
|
||||
// 创建实体(使用SoA优化)
|
||||
for (let i = 0; i < entityCount; i++) {
|
||||
const component = new LargeScaleComponent();
|
||||
component.x = i;
|
||||
component.y = i * 2;
|
||||
component.vx = 1;
|
||||
component.vy = 2;
|
||||
manager.addComponent(i, component);
|
||||
}
|
||||
|
||||
// 验证数据正确性
|
||||
const testComponent = manager.getComponent(100, LargeScaleComponent);
|
||||
expect(testComponent?.x).toBe(100);
|
||||
expect(testComponent?.y).toBe(200);
|
||||
expect(testComponent?.vx).toBe(1);
|
||||
expect(testComponent?.vy).toBe(2);
|
||||
|
||||
// 验证存储类型
|
||||
const storage = manager.getStorage(LargeScaleComponent);
|
||||
expect(storage.constructor.name).toBe('SoAStorage');
|
||||
console.log(`成功创建 ${entityCount} 个SoA实体,数据验证通过`);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user