You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
164 lines
5.3 KiB
164 lines
5.3 KiB
using System;
|
|
using System.Collections;
|
|
using NUnit.Framework;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine.Rendering;
|
|
|
|
namespace UnityEditor.Rendering.Tests
|
|
{
|
|
class RemoveRangeExtensionsTests
|
|
{
|
|
static TestCaseData[] s_ListTestsCaseDatas =
|
|
{
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 1, 2).SetName("Remove middle"),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 0, 2).SetName("Remove front"),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 0, 6).SetName("Remove all"),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 5, 1).SetName("Remove back"),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 0, 0).SetName("Index 0"),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 5, 0).SetName("Count 0")
|
|
};
|
|
|
|
bool ItemInRangeAreRemovedAfterRemoveRange<TList>(TList list, int startIndex, int count)
|
|
where TList : IList<int>
|
|
{
|
|
using (ListPool<int>.Get(out var copy))
|
|
{
|
|
foreach (int integer in list)
|
|
copy.Add(integer);
|
|
|
|
if (list.TryRemoveElementsInRange(startIndex, count, out var exception))
|
|
{
|
|
copy.RemoveRange(startIndex, count);
|
|
return copy.SequenceEqual(list);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
[Test, TestCaseSource(nameof(s_ListTestsCaseDatas))]
|
|
public void ItemInRangeAreRemovedAfterRemoveRangeForList(int[] ints, int startIndex, int count)
|
|
{
|
|
using (GenericPool<SimpleList>.Get(out var copy))
|
|
{
|
|
copy.AddRange(ints);
|
|
Assert.IsTrue(ItemInRangeAreRemovedAfterRemoveRange<IList<int>>(copy as IList<int>, startIndex, count));
|
|
}
|
|
}
|
|
|
|
[Test, TestCaseSource(nameof(s_ListTestsCaseDatas))]
|
|
public void ItemInRangeAreRemovedAfterRemoveRangeForSimpleList(int[] ints, int startIndex, int count)
|
|
{
|
|
using (ListPool<int>.Get(out var copy))
|
|
{
|
|
copy.AddRange(ints);
|
|
Assert.IsTrue(ItemInRangeAreRemovedAfterRemoveRange<List<int>>(copy, startIndex, count));
|
|
}
|
|
}
|
|
|
|
static TestCaseData[] s_ListTestsCaseDatasExceptions =
|
|
{
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 5, -1).SetName("Count negative").Returns(typeof(ArgumentOutOfRangeException)),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, -1, 2).SetName("Index negative").Returns(typeof(ArgumentOutOfRangeException)),
|
|
new TestCaseData(new int[] {1,2,3,4,5,6}, 5, 5).SetName("Count exceeds list size").Returns(typeof(ArgumentException)),
|
|
};
|
|
|
|
Exception ExceptionsAreCorrect<TList>(TList list, int startIndex, int count)
|
|
where TList : IList<int>
|
|
{
|
|
list.TryRemoveElementsInRange(startIndex, count, out var error);
|
|
return error;
|
|
}
|
|
|
|
[Test, TestCaseSource(nameof(s_ListTestsCaseDatasExceptions))]
|
|
public Type ExceptionsAreCorrectForList(int[] ints, int startIndex, int count)
|
|
{
|
|
using (ListPool<int>.Get(out var copy))
|
|
{
|
|
copy.AddRange(ints);
|
|
return ExceptionsAreCorrect(copy, startIndex, count).GetType();
|
|
}
|
|
}
|
|
|
|
[Test, TestCaseSource(nameof(s_ListTestsCaseDatasExceptions))]
|
|
public Type ExceptionsAreCorrectForSimpleList(int[] ints, int startIndex, int count)
|
|
{
|
|
using (GenericPool<SimpleList>.Get(out var copy))
|
|
{
|
|
copy.AddRange(ints);
|
|
return ExceptionsAreCorrect(copy, startIndex, count).GetType();
|
|
}
|
|
}
|
|
|
|
class SimpleList : IList<int>
|
|
{
|
|
private List<int> m_List = new List<int>();
|
|
|
|
public void AddRange(int[] ints)
|
|
{
|
|
m_List.Clear();
|
|
m_List.AddRange(ints);
|
|
}
|
|
|
|
public IEnumerator<int> GetEnumerator()
|
|
{
|
|
return m_List.GetEnumerator();
|
|
}
|
|
|
|
IEnumerator IEnumerable.GetEnumerator()
|
|
{
|
|
return GetEnumerator();
|
|
}
|
|
|
|
public void Add(int item)
|
|
{
|
|
m_List.Add(item);
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
m_List.Clear();
|
|
}
|
|
|
|
public bool Contains(int item)
|
|
{
|
|
return m_List.Contains(item);
|
|
}
|
|
|
|
public void CopyTo(int[] array, int arrayIndex)
|
|
{
|
|
m_List.CopyTo(array, arrayIndex);
|
|
}
|
|
|
|
public bool Remove(int item)
|
|
{
|
|
return m_List.Remove(item);
|
|
}
|
|
|
|
public int Count => m_List.Count;
|
|
public bool IsReadOnly => false;
|
|
public int IndexOf(int item)
|
|
{
|
|
return m_List.IndexOf(item);
|
|
}
|
|
|
|
public void Insert(int index, int item)
|
|
{
|
|
m_List.Insert(index, item);
|
|
}
|
|
|
|
public void RemoveAt(int index)
|
|
{
|
|
m_List.RemoveAt(index);
|
|
}
|
|
|
|
public int this[int index]
|
|
{
|
|
get => m_List[index];
|
|
set => m_List[index] = value;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|