75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using Unity.Jobs; | ||
|  | using Unity.Collections; | ||
|  | using Unity.Burst; | ||
|  | using Unity.Collections.Tests; | ||
|  | 
 | ||
|  | internal class NativeParallelMultiHashMapTestsFixture : CollectionsTestFixture | ||
|  | { | ||
|  |     protected const int hashMapSize = 10 * 1024; | ||
|  | 
 | ||
|  |     [BurstCompile(CompileSynchronously = true)] | ||
|  |     public struct MultiHashMapSimpleWriteJob : IJob | ||
|  |     { | ||
|  |         public NativeParallelMultiHashMap<int, int>.ParallelWriter hashMap; | ||
|  | 
 | ||
|  |         public void Execute() | ||
|  |         { | ||
|  |             hashMap.Add(0, 0); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     // Burst error BC1005: The `try` construction is not supported | ||
|  |     // [BurstCompile(CompileSynchronously = true)] | ||
|  |     public struct MultiHashMapWriteParallelForJob : IJobParallelFor | ||
|  |     { | ||
|  |         public NativeParallelMultiHashMap<int, int>.ParallelWriter hashMap; | ||
|  |         public NativeArray<int> status; | ||
|  | 
 | ||
|  |         public int keyMod; | ||
|  | 
 | ||
|  |         public void Execute(int i) | ||
|  |         { | ||
|  |             status[i] = 0; | ||
|  |             try | ||
|  |             { | ||
|  |                 hashMap.Add(i % keyMod, i); | ||
|  |             } | ||
|  |             catch (System.InvalidOperationException) | ||
|  |             { | ||
|  |                 status[i] = -2; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     [BurstCompile(CompileSynchronously = true)] | ||
|  |     public struct MultiHashMapReadParallelForJob : IJobParallelFor | ||
|  |     { | ||
|  |         [ReadOnly] | ||
|  |         public NativeParallelMultiHashMap<int, int> hashMap; | ||
|  |         public NativeArray<int> values; | ||
|  | 
 | ||
|  |         public int keyMod; | ||
|  |         public void Execute(int i) | ||
|  |         { | ||
|  |             int iSquared; | ||
|  |             values[i] = -1; | ||
|  |             NativeParallelMultiHashMapIterator<int> it; | ||
|  |             if (hashMap.TryGetFirstValue(i % keyMod, out iSquared, out it)) | ||
|  |             { | ||
|  |                 int count = 0; | ||
|  |                 do | ||
|  |                 { | ||
|  |                     if (iSquared % keyMod != i % keyMod) | ||
|  |                     { | ||
|  |                         values[i] = -2; | ||
|  |                         return; | ||
|  |                     } | ||
|  |                     ++count; | ||
|  |                 } | ||
|  |                 while (hashMap.TryGetNextValue(out iSquared, ref it)); | ||
|  |                 values[i] = count; | ||
|  |             } | ||
|  |         } | ||
|  |     } | ||
|  | } |