diff --git a/Essentials.Tests/Essentials.Tests.csproj b/Essentials.Tests/Essentials.Tests.csproj
new file mode 100644
index 0000000..dac495e
--- /dev/null
+++ b/Essentials.Tests/Essentials.Tests.csproj
@@ -0,0 +1,93 @@
+
+
+
+
+ {59A47A68-8B18-4942-B082-BCB52ED6D66D}
+ Library
+ Properties
+ Essentials.Tests
+ Essentials.Tests
+ v4.6.1
+ 512
+
+
+
+ 1591,0649
+
+
+ true
+ $(SolutionDir)\bin-test\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ $(SolutionDir)\bin-test\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ $(SolutionDir)\bin-test\x64\Release\Essentials.Tests.xml
+
+
+
+ ..\packages\NLog.4.4.12\lib\net45\NLog.dll
+ True
+
+
+
+
+
+
+
+
+
+
+ ..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll
+
+
+ ..\packages\xunit.assert.2.2.0\lib\netstandard1.1\xunit.assert.dll
+
+
+ ..\packages\xunit.extensibility.core.2.2.0\lib\netstandard1.1\xunit.core.dll
+
+
+ ..\packages\xunit.extensibility.execution.2.2.0\lib\net452\xunit.execution.desktop.dll
+
+
+ $(SolutionDir)\TorchBinaries\Torch.dll
+ True
+
+
+ $(SolutionDir)\TorchBinaries\Torch.API.dll
+ True
+
+
+
+
+ Properties\AssemblyVersion.cs
+
+
+
+
+
+
+
+
+ {A4C5FC37-5848-4A75-8CDC-4A1ADB2E01A2}
+ Essentials
+ True
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Essentials.Tests/Properties/AssemblyInfo.cs b/Essentials.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..1551025
--- /dev/null
+++ b/Essentials.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,17 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Torch Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Torch")]
+[assembly: AssemblyCopyright("Copyright © Torch API 2017")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: ComVisible(false)]
+
+#if DEBUG
+[assembly: AssemblyConfiguration("Debug")]
+#else
+[assembly: AssemblyConfiguration("Release")]
+#endif
\ No newline at end of file
diff --git a/Essentials.Tests/ReflectionTestManager.cs b/Essentials.Tests/ReflectionTestManager.cs
new file mode 100644
index 0000000..425024e
--- /dev/null
+++ b/Essentials.Tests/ReflectionTestManager.cs
@@ -0,0 +1,72 @@
+using System;
+using System.Collections.Generic;
+using System.Reflection;
+using Torch.Utils;
+
+namespace Torch.Tests
+{
+ public class ReflectionTestManager
+ {
+ #region FieldProvider
+ public struct FieldRef
+ {
+ public FieldInfo Field;
+
+ public FieldRef(FieldInfo f)
+ {
+ Field = f;
+ }
+
+ public override string ToString()
+ {
+ if (Field == null)
+ return "Ignored";
+ return Field.DeclaringType?.FullName + "." + Field.Name;
+ }
+ }
+
+ private readonly HashSet