public unsafe void EntityDiffer_GetChanges_BlobAssets_SetComponent_TypeMemoryOrdering() { using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) { var blobAssetReferences = new NativeArray <BlobAssetReference <int> >(100, Allocator.Temp); for (var i = 0; i < blobAssetReferences.Length; i++) { // Construct the archetype in an order which will NOT match the memory order. var archetype = SrcEntityManager.CreateArchetype( typeof(EntityGuid), typeof(EcsTestDataBlobAssetRef), typeof(EcsTestData4)); // Validate the assumption that the archetype is created in this way. Assert.That(archetype.Archetype->TypeMemoryOrder[0], Is.EqualTo(0)); Assert.That(archetype.Archetype->TypeMemoryOrder[1], Is.EqualTo(2)); Assert.That(archetype.Archetype->TypeMemoryOrder[2], Is.EqualTo(1)); // Validate the component sizes are different Assert.That(UnsafeUtility.SizeOf <EcsTestDataBlobAssetRef>(), Is.Not.EqualTo(UnsafeUtility.SizeOf <EcsTestData4>())); var entity = SrcEntityManager.CreateEntity(archetype); blobAssetReferences[i] = BlobAssetReference <int> .Create(i); SrcEntityManager.SetComponentData(entity, CreateEntityGuid()); SrcEntityManager.SetComponentData(entity, new EcsTestData4()); SrcEntityManager.SetComponentData(entity, new EcsTestDataBlobAssetRef { value = blobAssetReferences[i] }); } try { using (var changes = differ.GetChanges(EntityManagerDifferOptions.Default, Allocator.Temp)) { Assert.IsTrue(changes.HasForwardChangeSet); var forward = changes.ForwardChangeSet; Assert.That(forward.CreatedBlobAssets.Length, Is.EqualTo(100)); Assert.That(forward.BlobAssetReferenceChanges.Length, Is.EqualTo(100)); Assert.That(forward.BlobAssetData.Length, Is.EqualTo(sizeof(int) * 100)); } } finally { for (var i = 0; i < blobAssetReferences.Length; i++) { blobAssetReferences[i].Dispose(); } blobAssetReferences.Dispose(); } } }