public void TestDynamicPoolInitialState([Values(1, 22, 333, 4444)] int total) { // Prepare PersistencySettings settings = CreateTestSettings(); PersistentSceneSystem persistentSceneSystem = World.GetOrCreateSystem <PersistentSceneSystem>(); BeginFramePersistencySystem beginFramePersistencySystem = World.GetExistingSystem <BeginFramePersistencySystem>(); beginFramePersistencySystem.ReplaceSettings(settings); PersistentDataStorage dataStorage = persistentSceneSystem.PersistentDataStorage; Hash128 identifier = Hash128.Compute("DynamicPoolTests"); NativeArray <PersistableTypeHandle> typeHandles = new NativeArray <PersistableTypeHandle>(Archetype.Length, Allocator.Persistent); for (int i = 0; i < typeHandles.Length; i++) { typeHandles[i] = settings.GetPersistableTypeHandleFromFullTypeName(Archetype[i].GetManagedType().FullName); // This is not advised in a game } // Action Entity prefabEntity = m_Manager.CreateEntity(Archetype); m_Manager.SetComponentData(prefabEntity, new EcsTestData(1)); m_Manager.AddComponent <Prefab>(prefabEntity); persistentSceneSystem.InitializePool(prefabEntity, total, identifier, typeHandles); // Verify { Assert.True(dataStorage.IsInitialized(identifier), "PoolContainer is not initialized!"); PersistentDataContainer container = dataStorage.GetInitialStateReadContainer(identifier); int sizePerEntity = container.GetDataLayoutAtIndex(0).SizePerEntity; Assert.AreEqual(sizePerEntity * total, container.GetRawData().Length, "The data container was not of the expected size!"); int amountNonZero = container.GetRawData().Count(dataByte => dataByte != 0); Assert.NotZero(amountNonZero, "The datacontainer didn't have valid initial state."); } // Action 2 total += 31; persistentSceneSystem.InstantChangePoolCapacity(identifier, total); // Verify { Assert.True(dataStorage.IsInitialized(identifier), "PoolContainer is not initialized!"); dataStorage.ToIndex(0); PersistentDataContainer container = dataStorage.GetReadContainerForCurrentIndex(identifier); int sizePerEntity = container.GetDataLayoutAtIndex(0).SizePerEntity; Assert.AreEqual(sizePerEntity * total, container.GetRawData().Length, "The data container was not of the expected size after an InstantResize!"); int amountNonZero = container.GetRawData().Count(dataByte => dataByte != 0); Assert.NotZero(amountNonZero, "The datacontainer grew but didn't have valid initial state."); } // Cleanup m_Manager.DestroyEntity(m_Manager.UniversalQuery); }