|
using System; |
|
using NUnit.Framework; |
|
|
|
namespace Unity.MLAgents.Tests |
|
{ |
|
[TestFixture] |
|
public class RecursionCheckerTests |
|
{ |
|
class InfiniteRecurser |
|
{ |
|
RecursionChecker m_checker = new RecursionChecker("InfiniteRecurser"); |
|
public int NumCalls; |
|
|
|
public void Implode() |
|
{ |
|
NumCalls++; |
|
using (m_checker.Start()) |
|
{ |
|
Implode(); |
|
} |
|
} |
|
} |
|
|
|
[Test] |
|
public void TestRecursionCheck() |
|
{ |
|
var rc = new InfiniteRecurser(); |
|
Assert.Throws<UnityAgentsException>(() => |
|
{ |
|
rc.Implode(); |
|
}); |
|
|
|
|
|
Assert.AreEqual(2, rc.NumCalls); |
|
} |
|
|
|
class OneTimeThrower |
|
{ |
|
RecursionChecker m_checker = new RecursionChecker("OneTimeThrower"); |
|
public int NumCalls; |
|
|
|
public void DoStuff() |
|
{ |
|
|
|
|
|
NumCalls++; |
|
using (m_checker.Start()) |
|
{ |
|
if (NumCalls == 1) |
|
{ |
|
throw new ArgumentException("oops"); |
|
} |
|
} |
|
} |
|
} |
|
|
|
[Test] |
|
public void TestThrowResetsFlag() |
|
{ |
|
var ott = new OneTimeThrower(); |
|
Assert.Throws<ArgumentException>(() => |
|
{ |
|
ott.DoStuff(); |
|
}); |
|
|
|
|
|
ott.DoStuff(); |
|
ott.DoStuff(); |
|
Assert.AreEqual(3, ott.NumCalls); |
|
} |
|
} |
|
} |
|
|