168 lines
4.3 KiB
C#
168 lines
4.3 KiB
C#
|
using NUnit.Framework;
|
||
|
using Unity.Collections;
|
||
|
using Unity.Jobs;
|
||
|
|
||
|
namespace Unity.Jobs.Tests.ManagedJobs
|
||
|
{
|
||
|
internal class JobTestsFixtureBasic
|
||
|
{
|
||
|
AllocatorHelper<RewindableAllocator> m_AllocatorHelper;
|
||
|
protected ref RewindableAllocator RwdAllocator => ref m_AllocatorHelper.Allocator;
|
||
|
|
||
|
[OneTimeSetUp]
|
||
|
public virtual void OneTimeSetUp()
|
||
|
{
|
||
|
m_AllocatorHelper = new AllocatorHelper<RewindableAllocator>(Allocator.Persistent);
|
||
|
m_AllocatorHelper.Allocator.Initialize(128 * 1024, true);
|
||
|
}
|
||
|
|
||
|
[OneTimeTearDown]
|
||
|
public virtual void OneTimeTearDown()
|
||
|
{
|
||
|
m_AllocatorHelper.Allocator.Dispose();
|
||
|
m_AllocatorHelper.Dispose();
|
||
|
}
|
||
|
|
||
|
|
||
|
[TearDown]
|
||
|
public void Teardown()
|
||
|
{
|
||
|
RwdAllocator.Rewind();
|
||
|
// This is test only behavior for determinism. Rewind twice such that all
|
||
|
// tests start with an allocator containing only one memory block.
|
||
|
RwdAllocator.Rewind();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
internal class JobTestsFixture : JobTestsFixtureBasic
|
||
|
{
|
||
|
/*
|
||
|
* this used to test both, and maybe it should again, but we have to make GetExecuteMethod() work with
|
||
|
* multiple interfaces, hopefully in a non-global way
|
||
|
*/
|
||
|
public struct SumDataParallelForJob : /*IJob,*/ IJobParallelFor
|
||
|
{
|
||
|
[ReadOnly] public NativeArray<int> input0;
|
||
|
|
||
|
[ReadOnly] public NativeArray<int> input1;
|
||
|
|
||
|
public NativeArray<int> output;
|
||
|
|
||
|
/* public void Execute()
|
||
|
{
|
||
|
for (var i = 0; i < output.Length; ++i)
|
||
|
output[i] = input0[i] + input1[i];
|
||
|
}*/
|
||
|
|
||
|
public void Execute(int i)
|
||
|
{
|
||
|
output[i] = input0[i] + input1[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public struct CopyAndDestroyNativeArrayParallelForJob : IJobParallelFor
|
||
|
{
|
||
|
[ReadOnlyAttribute]
|
||
|
public NativeArray<int> input;
|
||
|
|
||
|
public NativeArray<int> output;
|
||
|
|
||
|
public void Execute(int i)
|
||
|
{
|
||
|
output[i] = input[i];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public SumDataParallelForJob data;
|
||
|
|
||
|
public int[] expectedInput0;
|
||
|
|
||
|
public NativeArray<int> input0;
|
||
|
public NativeArray<int> input1;
|
||
|
public NativeArray<int> input2;
|
||
|
public NativeArray<int> output;
|
||
|
public NativeArray<int> output2;
|
||
|
|
||
|
[SetUp]
|
||
|
public void Init()
|
||
|
{
|
||
|
expectedInput0 = new int[10];
|
||
|
input0 = new NativeArray<int>(10, Allocator.Persistent);
|
||
|
input1 = new NativeArray<int>(10, Allocator.Persistent);
|
||
|
input2 = new NativeArray<int>(10, Allocator.Persistent);
|
||
|
output = new NativeArray<int>(10, Allocator.Persistent);
|
||
|
output2 = new NativeArray<int>(10, Allocator.Persistent);
|
||
|
|
||
|
for (var i = 0; i < output.Length; i++)
|
||
|
{
|
||
|
expectedInput0[i] = i;
|
||
|
input0[i] = i;
|
||
|
input1[i] = 10 * i;
|
||
|
input2[i] = 100 * i;
|
||
|
output[i] = 0;
|
||
|
output2[i] = 0;
|
||
|
}
|
||
|
|
||
|
data.input0 = input0;
|
||
|
data.input1 = input1;
|
||
|
data.output = output;
|
||
|
}
|
||
|
|
||
|
public void ExpectOutputSumOfInput0And1()
|
||
|
{
|
||
|
for (var i = 0; i != output.Length; i++)
|
||
|
Assert.AreEqual(input0[i] + input1[i], output[i]);
|
||
|
}
|
||
|
|
||
|
public void ExpectOutputSumOfInput0And1And2()
|
||
|
{
|
||
|
for (var i = 0; i != output.Length; i++)
|
||
|
Assert.AreEqual(input0[i] + input1[i] + input2[i], output[i]);
|
||
|
}
|
||
|
|
||
|
[TearDown]
|
||
|
public void Cleanup()
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
input0.Dispose();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
input1.Dispose();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
input2.Dispose();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
output.Dispose();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
output2.Dispose();
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|