|
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); |
|
} |
|
} |
|
} |
|
|