Added WaitAll and WaitAny to JobScheduler;
Added generation support to UnsafeSparseSet;
This commit is contained in:
@@ -14,33 +14,40 @@ public class TestUnsafeSparseSet
|
||||
_sparseSet = new UnsafeSparseSet<int>(16, Allocator.Persistent);
|
||||
}
|
||||
|
||||
[TestCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
_sparseSet.Dispose();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Add()
|
||||
{
|
||||
var id = _sparseSet.Add(10);
|
||||
Assert.IsTrue(_sparseSet.Contains(id));
|
||||
var id = _sparseSet.Add(10, out var gen);
|
||||
Assert.IsTrue(_sparseSet.Contains(id, gen));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void Remove()
|
||||
{
|
||||
var id = _sparseSet.Add(20);
|
||||
Assert.IsTrue(_sparseSet.Contains(id));
|
||||
var id = _sparseSet.Add(20, out var gen);
|
||||
Assert.IsTrue(_sparseSet.Contains(id, gen));
|
||||
|
||||
_sparseSet.Remove(id);
|
||||
Assert.IsFalse(_sparseSet.Contains(id));
|
||||
_sparseSet.Remove(id, gen);
|
||||
Assert.IsFalse(_sparseSet.Contains(id, gen));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void IndexReuse()
|
||||
{
|
||||
var id = _sparseSet.Add(20);
|
||||
Assert.IsTrue(_sparseSet.Contains(id));
|
||||
var id = _sparseSet.Add(20, out var gen);
|
||||
Assert.IsTrue(_sparseSet.Contains(id, gen));
|
||||
|
||||
_sparseSet.Remove(id);
|
||||
Assert.IsFalse(_sparseSet.Contains(id));
|
||||
_sparseSet.Remove(id, gen);
|
||||
Assert.IsFalse(_sparseSet.Contains(id, gen));
|
||||
|
||||
var newId = _sparseSet.Add(30);
|
||||
var newId = _sparseSet.Add(30, out var newGen);
|
||||
Assert.AreEqual(id, newId);
|
||||
Assert.AreNotEqual(gen, newGen);
|
||||
}
|
||||
}
|
||||
@@ -75,7 +75,7 @@ public unsafe class TestJobSystem
|
||||
result = result
|
||||
};
|
||||
|
||||
var handle1 = _jobScheduler.Schedule(ref job1, -1);
|
||||
var handle1 = _jobScheduler.Schedule(ref job1);
|
||||
_jobScheduler.WaitComplete(handle1);
|
||||
|
||||
var job2 = new AddJob
|
||||
@@ -84,7 +84,7 @@ public unsafe class TestJobSystem
|
||||
result = result
|
||||
};
|
||||
|
||||
var handle2 = _jobScheduler.Schedule(ref job2, -1, handle1);
|
||||
var handle2 = _jobScheduler.Schedule(ref job2, handle1);
|
||||
_jobScheduler.WaitComplete(handle2);
|
||||
|
||||
Assert.AreEqual(8.0f, *result);
|
||||
@@ -101,7 +101,7 @@ public unsafe class TestJobSystem
|
||||
result = result
|
||||
};
|
||||
|
||||
var handle1 = _jobScheduler.Schedule(ref job1, -1);
|
||||
var handle1 = _jobScheduler.Schedule(ref job1);
|
||||
|
||||
var job2 = new AddJob
|
||||
{
|
||||
@@ -109,7 +109,7 @@ public unsafe class TestJobSystem
|
||||
result = result
|
||||
};
|
||||
|
||||
var handle2 = _jobScheduler.Schedule(ref job2, -1, handle1);
|
||||
var handle2 = _jobScheduler.Schedule(ref job2, handle1);
|
||||
|
||||
var job3 = new AddJob
|
||||
{
|
||||
@@ -118,7 +118,7 @@ public unsafe class TestJobSystem
|
||||
};
|
||||
|
||||
var combinedHandle = _jobScheduler.CombineDependencies(handle1, handle2);
|
||||
var handle3 = _jobScheduler.Schedule(ref job3, -1, combinedHandle);
|
||||
var handle3 = _jobScheduler.Schedule(ref job3, combinedHandle);
|
||||
|
||||
_jobScheduler.WaitComplete(handle3);
|
||||
|
||||
@@ -137,7 +137,7 @@ public unsafe class TestJobSystem
|
||||
inout = result
|
||||
};
|
||||
|
||||
var handle = _jobScheduler.ScheduleParallel(ref job, size, 64, -1, JobHandle.Invalid);
|
||||
var handle = _jobScheduler.ScheduleParallel(ref job, size, 64);
|
||||
_jobScheduler.WaitComplete(handle);
|
||||
|
||||
Assert.AreEqual(1.0f, result[500]);
|
||||
@@ -189,13 +189,66 @@ public unsafe class TestJobSystem
|
||||
output = result
|
||||
};
|
||||
|
||||
var handle1 = _jobScheduler.ScheduleParallel(ref addJob, arraySize, 64, -1, JobHandle.Invalid);
|
||||
var handle2 = _jobScheduler.ScheduleParallel(ref multiplyJob, arraySize, 64, -1, handle1);
|
||||
var handle3 = _jobScheduler.Schedule(ref sumJob, -1, handle2);
|
||||
var handle1 = _jobScheduler.ScheduleParallel(ref addJob, arraySize, 64);
|
||||
var handle2 = _jobScheduler.ScheduleParallel(ref multiplyJob, arraySize, 64);
|
||||
var handle3 = _jobScheduler.Schedule(ref sumJob, handle2);
|
||||
|
||||
_jobScheduler.WaitComplete(handle3);
|
||||
|
||||
var expected = ComputeExpectedSum(arraySize);
|
||||
Assert.AreEqual(expected, *result, 0.01f);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void WaitAll()
|
||||
{
|
||||
var result1 = stackalloc float[1];
|
||||
var result2 = stackalloc float[1];
|
||||
|
||||
var job1 = new AddJob
|
||||
{
|
||||
value = 1.0f,
|
||||
result = result1
|
||||
};
|
||||
|
||||
var job2 = new AddJob
|
||||
{
|
||||
value = 1.0f,
|
||||
result = result2
|
||||
};
|
||||
|
||||
var handle1 = _jobScheduler.Schedule(ref job1);
|
||||
var handle2 = _jobScheduler.Schedule(ref job2);
|
||||
|
||||
_jobScheduler.WaitAll(handle1, handle2);
|
||||
|
||||
Assert.AreEqual(JobState.Completed, _jobScheduler.GetJobStatus(handle1));
|
||||
Assert.AreEqual(JobState.Completed, _jobScheduler.GetJobStatus(handle2));
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void WaitAny()
|
||||
{
|
||||
var result1 = stackalloc float[1];
|
||||
var result2 = stackalloc float[1];
|
||||
|
||||
var job1 = new AddJob
|
||||
{
|
||||
value = 1.0f,
|
||||
result = result1
|
||||
};
|
||||
|
||||
var job2 = new AddJob
|
||||
{
|
||||
value = 1.0f,
|
||||
result = result2
|
||||
};
|
||||
|
||||
var handle1 = _jobScheduler.Schedule(ref job1);
|
||||
var handle2 = _jobScheduler.Schedule(ref job2);
|
||||
|
||||
var completedHandle = _jobScheduler.WaitAny(handle1, handle2);
|
||||
|
||||
Assert.AreEqual(JobState.Completed, _jobScheduler.GetJobStatus(completedHandle));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user