86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			86 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System; | ||
|  | using NUnit.Framework; | ||
|  | using Unity.Collections; | ||
|  | using Unity.Jobs; | ||
|  | 
 | ||
|  | namespace Unity.Jobs.Tests.ManagedJobs | ||
|  | { | ||
|  |     internal class JobStressTests : JobTestsFixture | ||
|  |     { | ||
|  |         struct JobSetIndexValue : IJobParallelFor | ||
|  |         { | ||
|  |             public NativeArray<int> value; | ||
|  | 
 | ||
|  |             public void Execute(int index) | ||
|  |             { | ||
|  |                 value[index] = index; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         [Test] | ||
|  |         public void StressTestParallelFor() | ||
|  |         { | ||
|  |             StressTestParallelForIterations(1, 5000); | ||
|  |         } | ||
|  | 
 | ||
|  |         public void StressTestParallelForIterations(int amount, int amountOfData) | ||
|  |         { | ||
|  |             for (var k = 0; k != amount; k++) | ||
|  |             { | ||
|  |                 var len = UnityEngine.Random.Range(1, amountOfData); | ||
|  | 
 | ||
|  |                 JobSetIndexValue job1; | ||
|  |                 job1.value = CollectionHelper.CreateNativeArray<int>(len, RwdAllocator.ToAllocator); | ||
|  | 
 | ||
|  |                 JobSetIndexValue job2; | ||
|  |                 job2.value = CollectionHelper.CreateNativeArray<int>(len, RwdAllocator.ToAllocator); | ||
|  | 
 | ||
|  |                 var job1Handle = job1.Schedule(len, UnityEngine.Random.Range(1, 1024)); | ||
|  |                 var job2Handle = job2.Schedule(len, UnityEngine.Random.Range(1, 1024)); | ||
|  | 
 | ||
|  |                 job2Handle.Complete(); | ||
|  |                 job1Handle.Complete(); | ||
|  | 
 | ||
|  |                 for (var i = 0; i < len; i++) | ||
|  |                 { | ||
|  |                     Assert.AreEqual(i, job1.value[i]); | ||
|  |                     Assert.AreEqual(i, job2.value[i]); | ||
|  |                 } | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         struct JobSetValue : IJob | ||
|  |         { | ||
|  |             public int expected; | ||
|  |             public NativeArray<int> value; | ||
|  | 
 | ||
|  |             public void Execute() | ||
|  |             { | ||
|  |                 value[0] = value[0] + 1; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         [Test] | ||
|  |         public void DeepDependencyChain() | ||
|  |         { | ||
|  |             var array = new NativeArray<int>(1, Allocator.Persistent); | ||
|  |             var jobHandle = new JobHandle(); | ||
|  |             const int depth = 10000; | ||
|  |             for (var i = 0; i < depth; i++) | ||
|  |             { | ||
|  |                 var job = new JobSetValue | ||
|  |                 { | ||
|  |                     value = array, | ||
|  |                     expected = i | ||
|  |                 }; | ||
|  |                 jobHandle = job.Schedule(jobHandle); | ||
|  |             } | ||
|  | 
 | ||
|  |             jobHandle.Complete(); | ||
|  |             Assert.AreEqual(depth, array[0]); | ||
|  | 
 | ||
|  |             array.Dispose(); | ||
|  |         } | ||
|  |     } | ||
|  | } |