68 lines
2.0 KiB
C#
68 lines
2.0 KiB
C#
using NUnit.Framework;
|
|
using System;
|
|
using Unity.Jobs;
|
|
using Unity.Collections;
|
|
using Unity.Collections.Tests;
|
|
|
|
#if ENABLE_UNITY_COLLECTIONS_CHECKS
|
|
internal class NativeParallelMultiHashMapTests_JobDebugger : NativeParallelMultiHashMapTestsFixture
|
|
{
|
|
[Test]
|
|
public void NativeParallelMultiHashMap_Read_And_Write_Without_Fences()
|
|
{
|
|
var hashMap = new NativeParallelMultiHashMap<int, int>(hashMapSize, CommonRwdAllocator.Handle);
|
|
var writeStatus = CollectionHelper.CreateNativeArray<int>(hashMapSize, CommonRwdAllocator.Handle);
|
|
var readValues = CollectionHelper.CreateNativeArray<int>(hashMapSize, CommonRwdAllocator.Handle);
|
|
|
|
var writeData = new MultiHashMapWriteParallelForJob()
|
|
{
|
|
hashMap = hashMap.AsParallelWriter(),
|
|
status = writeStatus,
|
|
keyMod = hashMapSize,
|
|
};
|
|
|
|
var readData = new MultiHashMapReadParallelForJob()
|
|
{
|
|
hashMap = hashMap,
|
|
values = readValues,
|
|
keyMod = writeData.keyMod,
|
|
};
|
|
|
|
var writeJob = writeData.Schedule(hashMapSize, 1);
|
|
Assert.Throws<InvalidOperationException>(() => { readData.Schedule(hashMapSize, 1); });
|
|
writeJob.Complete();
|
|
|
|
hashMap.Dispose();
|
|
writeStatus.Dispose();
|
|
readValues.Dispose();
|
|
}
|
|
|
|
struct NestedMapJob : IJob
|
|
{
|
|
public NativeParallelMultiHashMap<int, NativeParallelMultiHashMap<int, int>> nestedMap;
|
|
|
|
public void Execute()
|
|
{
|
|
nestedMap.Clear();
|
|
}
|
|
}
|
|
|
|
[Test]
|
|
public void NativeParallelMultiHashMap_NestedJob_Error()
|
|
{
|
|
var map = new NativeParallelMultiHashMap<int, NativeParallelMultiHashMap<int, int>>(hashMapSize, CommonRwdAllocator.Handle);
|
|
|
|
var nestedJob = new NestedMapJob
|
|
{
|
|
nestedMap = map
|
|
};
|
|
|
|
JobHandle job = default;
|
|
Assert.Throws<InvalidOperationException>(() => { job = nestedJob.Schedule(); });
|
|
job.Complete();
|
|
|
|
map.Dispose();
|
|
}
|
|
}
|
|
#endif
|