diff --git a/ICD.Common.Utils.Tests/SafeCriticalSectionTest.cs b/ICD.Common.Utils.Tests/SafeCriticalSectionTest.cs new file mode 100644 index 0000000..0485cdd --- /dev/null +++ b/ICD.Common.Utils.Tests/SafeCriticalSectionTest.cs @@ -0,0 +1,65 @@ +using NUnit.Framework; + +namespace ICD.Common.Utils.Tests +{ + [TestFixture] + public sealed class SafeCriticalSectionTest + { + [Test] + public void ExecuteTest() + { + bool result = false; + + SafeCriticalSection section = new SafeCriticalSection(); + section.Execute(() => result = true); + + Assert.IsTrue(result); + } + + [Test] + public void ExecuteReturnTest() + { + SafeCriticalSection section = new SafeCriticalSection(); + Assert.IsTrue(section.Execute(() => true)); + } + + [Test] + public void EnterTest() + { + Assert.Inconclusive(); + } + + [Test] + public void LeaveTest() + { + Assert.Inconclusive(); + } + + [Test] + public void TryEnterTest() + { + int result = 0; + + SafeCriticalSection section = new SafeCriticalSection(); + section.Enter(); + + // ReSharper disable once NotAccessedVariable + object handle = ThreadingUtils.SafeInvoke(() => { result = section.TryEnter() ? 0 : 1; }); + ThreadingUtils.Sleep(1000); + + Assert.AreEqual(1, result); + + section.Leave(); + + // ReSharper disable once RedundantAssignment + handle = ThreadingUtils.SafeInvoke(() => + { + result = section.TryEnter() ? 2 : 0; + section.Leave(); + }); + ThreadingUtils.Sleep(1000); + + Assert.AreEqual(2, result); + } + } +} diff --git a/ICD.Common.Utils.Tests/ThreadingUtilsTest.cs b/ICD.Common.Utils.Tests/ThreadingUtilsTest.cs new file mode 100644 index 0000000..9caa5f3 --- /dev/null +++ b/ICD.Common.Utils.Tests/ThreadingUtilsTest.cs @@ -0,0 +1,41 @@ +using System; +using NUnit.Framework; + +namespace ICD.Common.Utils.Tests +{ + [TestFixture] + public sealed class ThreadingUtilsTest + { + [Test] + public void Sleep() + { + DateTime now = IcdEnvironment.GetLocalTime(); + ThreadingUtils.Sleep(1000); + DateTime now2 = IcdEnvironment.GetLocalTime(); + + Assert.AreEqual(1000, (now2 - now).TotalMilliseconds, 100); + } + + [Test] + public void SafeInvokeTest() + { + bool result = false; + ThreadingUtils.SafeInvoke(() => result = true); + + Assert.IsFalse(result); + ThreadingUtils.Sleep(1000); + Assert.IsTrue(result); + } + + [Test] + public void SafeInvokeParamTest() + { + bool result = false; + ThreadingUtils.SafeInvoke(p => result = p, true); + + Assert.IsFalse(result); + ThreadingUtils.Sleep(1000); + Assert.IsTrue(result); + } + } +}