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