| using System; |
| using System.Collections; |
| using NUnit.Framework; |
|
|
|
|
| namespace Unity.MLAgents.Tests |
| { |
| [TestFixture] |
| public class InplaceArrayTests |
| { |
| class LengthCases : IEnumerable |
| { |
| public IEnumerator GetEnumerator() |
| { |
| yield return 1; |
| yield return 2; |
| yield return 3; |
| yield return 4; |
| } |
| } |
|
|
| private InplaceArray<int> GetTestArray(int length) |
| { |
| switch (length) |
| { |
| case 1: |
| return new InplaceArray<int>(11); |
| case 2: |
| return new InplaceArray<int>(11, 22); |
| case 3: |
| return new InplaceArray<int>(11, 22, 33); |
| case 4: |
| return new InplaceArray<int>(11, 22, 33, 44); |
| default: |
| throw new ArgumentException("bad test!"); |
| } |
| } |
|
|
| private InplaceArray<int> GetZeroArray(int length) |
| { |
| switch (length) |
| { |
| case 1: |
| return new InplaceArray<int>(0); |
| case 2: |
| return new InplaceArray<int>(0, 0); |
| case 3: |
| return new InplaceArray<int>(0, 0, 0); |
| case 4: |
| return new InplaceArray<int>(0, 0, 0, 0); |
| default: |
| throw new ArgumentException("bad test!"); |
| } |
| } |
|
|
| [Test] |
| public void TestInplaceArrayCtor() |
| { |
| var a1 = new InplaceArray<int>(11); |
| Assert.AreEqual(1, a1.Length); |
| Assert.AreEqual(11, a1[0]); |
|
|
| var a2 = new InplaceArray<int>(11, 22); |
| Assert.AreEqual(2, a2.Length); |
| Assert.AreEqual(11, a2[0]); |
| Assert.AreEqual(22, a2[1]); |
|
|
| var a3 = new InplaceArray<int>(11, 22, 33); |
| Assert.AreEqual(3, a3.Length); |
| Assert.AreEqual(11, a3[0]); |
| Assert.AreEqual(22, a3[1]); |
| Assert.AreEqual(33, a3[2]); |
|
|
| var a4 = new InplaceArray<int>(11, 22, 33, 44); |
| Assert.AreEqual(4, a4.Length); |
| Assert.AreEqual(11, a4[0]); |
| Assert.AreEqual(22, a4[1]); |
| Assert.AreEqual(33, a4[2]); |
| Assert.AreEqual(44, a4[3]); |
| } |
|
|
| [TestCaseSource(typeof(LengthCases))] |
| public void TestInplaceGetSet(int length) |
| { |
| var original = GetTestArray(length); |
|
|
| for (var i = 0; i < original.Length; i++) |
| { |
| var modified = original; |
| modified[i] = 0; |
| for (var j = 0; j < original.Length; j++) |
| { |
| if (i == j) |
| { |
| |
| Assert.AreEqual(0, modified[j]); |
| } |
| else |
| { |
| |
| Assert.AreEqual(original[j], modified[j]); |
| } |
| } |
| } |
| } |
|
|
| [TestCaseSource(typeof(LengthCases))] |
| public void TestInvalidAccess(int length) |
| { |
| var tmp = 0; |
| var a = GetTestArray(length); |
| |
| Assert.Throws<IndexOutOfRangeException>(() => { tmp += a[-1]; }); |
| Assert.Throws<IndexOutOfRangeException>(() => { tmp += a[length]; }); |
|
|
| |
| Assert.Throws<IndexOutOfRangeException>(() => { a[-1] = 0; }); |
| Assert.Throws<IndexOutOfRangeException>(() => { a[length] = 0; }); |
|
|
| |
| Assert.AreEqual(0, tmp); |
| } |
|
|
| [Test] |
| public void TestOperatorEqualsDifferentLengths() |
| { |
| |
| for (var l1 = 1; l1 <= 4; l1++) |
| { |
| var a1 = GetZeroArray(l1); |
| for (var l2 = 1; l2 <= 4; l2++) |
| { |
| var a2 = GetZeroArray(l2); |
| if (l1 == l2) |
| { |
| Assert.AreEqual(a1, a2); |
| Assert.IsTrue(a1 == a2); |
| } |
| else |
| { |
| Assert.AreNotEqual(a1, a2); |
| Assert.IsTrue(a1 != a2); |
| } |
| } |
| } |
| } |
|
|
| [TestCaseSource(typeof(LengthCases))] |
| public void TestOperatorEquals(int length) |
| { |
| for (var index = 0; index < length; index++) |
| { |
| var a1 = GetTestArray(length); |
| var a2 = GetTestArray(length); |
| Assert.AreEqual(a1, a2); |
| Assert.IsTrue(a1 == a2); |
|
|
| a1[index] = 42; |
| Assert.AreNotEqual(a1, a2); |
| Assert.IsTrue(a1 != a2); |
|
|
| a2[index] = 42; |
| Assert.AreEqual(a1, a2); |
| Assert.IsTrue(a1 == a2); |
| } |
| } |
|
|
| [Test] |
| public void TestToString() |
| { |
| Assert.AreEqual("[1]", new InplaceArray<int>(1).ToString()); |
| Assert.AreEqual("[1, 2]", new InplaceArray<int>(1, 2).ToString()); |
| Assert.AreEqual("[1, 2, 3]", new InplaceArray<int>(1, 2, 3).ToString()); |
| Assert.AreEqual("[1, 2, 3, 4]", new InplaceArray<int>(1, 2, 3, 4).ToString()); |
| } |
|
|
| [TestCaseSource(typeof(LengthCases))] |
| public void TestFromList(int length) |
| { |
| var intArray = new int[length]; |
| for (var i = 0; i < length; i++) |
| { |
| intArray[i] = (i + 1) * 11; |
| } |
|
|
| var converted = InplaceArray<int>.FromList(intArray); |
| Assert.AreEqual(GetTestArray(length), converted); |
| } |
| } |
| } |
|
|