Ejemplo n.º 1
0
    public void AddElementToListFromJobInvalidatesArray()
    {
        var list = new NativeList <int>(Allocator.TempJob);

        list.Add(0);

        NativeArray <int> arrayBeforeSchedule = list;

        Assert.AreEqual(list.Length, 1);

        var jobData = new NativeListAddJob(list);
        var job     = jobData.Schedule();

#if UNITY_2020_2_OR_NEWER
        Assert.Throws <ObjectDisposedException>(
#else
        Assert.Throws <InvalidOperationException>(
#endif
            () => { Debug.Log(arrayBeforeSchedule[0]); });
        Assert.Throws <InvalidOperationException>(() => { NativeArray <int> array = list; Debug.Log(array.Length); });
        Assert.Throws <InvalidOperationException>(() => { Debug.Log(list.Capacity); });
        Assert.Throws <InvalidOperationException>(() => { list.Dispose(); });
        Assert.Throws <InvalidOperationException>(() => { Debug.Log(list[0]); });

        job.Complete();

        Assert.AreEqual(1, arrayBeforeSchedule.Length);
#if UNITY_2020_2_OR_NEWER
        Assert.Throws <ObjectDisposedException>(
#else
        Assert.Throws <InvalidOperationException>(
#endif
            () => { Debug.Log(arrayBeforeSchedule[0]); });

        Assert.AreEqual(2, list.Length);
        Assert.AreEqual(0, list[0]);
        Assert.AreEqual(1, list[1]);

        NativeArray <int> arrayAfter = list;
        Assert.AreEqual(2, arrayAfter.Length);
        Assert.AreEqual(0, arrayAfter[0]);
        Assert.AreEqual(1, arrayAfter[1]);

        list.Dispose();
    }