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