Unity 机器学习代理工具包 (ML-Agents) 是一个开源项目,它使游戏和模拟能够作为训练智能代理的环境。
您最多选择25个主题 主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 
 
 

192 行
5.9 KiB

using System;
using System.Collections;
using NUnit.Framework;
using Unity.MLAgents;
using UnityEngine;
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)
{
// This is the one we overwrote
Assert.AreEqual(0, modified[j]);
}
else
{
// Other elements should be unchanged
Assert.AreEqual(original[j], modified[j]);
}
}
}
}
[TestCaseSource(typeof(LengthCases))]
public void TestInvalidAccess(int length)
{
var tmp = 0;
var a = GetTestArray(length);
// get
Assert.Throws<IndexOutOfRangeException>(() => { tmp += a[-1]; });
Assert.Throws<IndexOutOfRangeException>(() => { tmp += a[length]; });
// set
Assert.Throws<IndexOutOfRangeException>(() => { a[-1] = 0; });
Assert.Throws<IndexOutOfRangeException>(() => { a[length] = 0; });
// Make sure temp is used
Assert.AreEqual(0, tmp);
}
[Test]
public void TestOperatorEqualsDifferentLengths()
{
// Check arrays of different length are never equal (even if they have 0s in all elements)
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; // 11, 22, etc.
}
var converted = InplaceArray<int>.FromList(intArray);
Assert.AreEqual(GetTestArray(length), converted);
}
}
}