From 8e3986174efd39be9d5bf75402da090032968be3 Mon Sep 17 00:00:00 2001 From: William Deich Date: Thu, 21 Apr 2016 08:28:37 -0700 Subject: [PATCH] NUnit Tests from Manuli and Wcdeich4 (#373) * NUnit Tests from Manuli and Wcdeich4 --- OpenTK.sln | 154 +++--- Source/NUnitTests/Matrix4Test.cs | 289 ++++++++++++ Source/NUnitTests/NUnitTests.csproj | 86 ++++ Source/NUnitTests/Properties/AssemblyInfo.cs | 36 ++ Source/NUnitTests/Vector3Tests.cs | 439 ++++++++++++++++++ Source/NUnitTests/packages.config | 5 + Source/OpenTK.Tests/Matrix4Test.cs | 289 ++++++++++++ Source/OpenTK.Tests/OpenTK.Tests.csproj | 87 ++++ .../OpenTK.Tests/Properties/AssemblyInfo.cs | 36 ++ Source/OpenTK.Tests/Vector3Tests.cs | 439 ++++++++++++++++++ Source/OpenTK.Tests/packages.config | 5 + 11 files changed, 1795 insertions(+), 70 deletions(-) create mode 100644 Source/NUnitTests/Matrix4Test.cs create mode 100644 Source/NUnitTests/NUnitTests.csproj create mode 100644 Source/NUnitTests/Properties/AssemblyInfo.cs create mode 100644 Source/NUnitTests/Vector3Tests.cs create mode 100644 Source/NUnitTests/packages.config create mode 100644 Source/OpenTK.Tests/Matrix4Test.cs create mode 100644 Source/OpenTK.Tests/OpenTK.Tests.csproj create mode 100644 Source/OpenTK.Tests/Properties/AssemblyInfo.cs create mode 100644 Source/OpenTK.Tests/Vector3Tests.cs create mode 100644 Source/OpenTK.Tests/packages.config diff --git a/OpenTK.sln b/OpenTK.sln index 167492667f..5fbece57c6 100644 --- a/OpenTK.sln +++ b/OpenTK.sln @@ -1,7 +1,7 @@  -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -VisualStudioVersion = 12.0.21005.1 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.31101.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK", "Source\OpenTK\OpenTK.csproj", "{A37A7E14-0000-0000-0000-000000000000}" ProjectSection(ProjectDependencies) = postProject @@ -82,38 +82,29 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test.API.Desktop", "Source\ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.GLWidget", "Source\GLWidget\OpenTK.GLWidget.csproj", "{A625BE87-0000-0000-0000-000000000000}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK.Tests", "Source\OpenTK.Tests\OpenTK.Tests.csproj", "{930A780C-A67C-422F-9EED-DB38DAA47AB0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU + DebugMinimal|Any CPU = DebugMinimal|Any CPU Documentation|Any CPU = Documentation|Any CPU Nsis|Any CPU = Nsis|Any CPU Release|Any CPU = Release|Any CPU - DebugMinimal|Any CPU = DebugMinimal|Any CPU ReleaseMinimal|Any CPU = ReleaseMinimal|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {31D19132-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31D19132-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31D19132-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU - {31D19132-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU - {31D19132-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {31D19132-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {31D19132-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU - {31D19132-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31D19132-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {31D19132-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {31D19132-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {5FDFF4B6-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {A37A7E14-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU {62C0DB35-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {62C0DB35-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {62C0DB35-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU @@ -123,24 +114,6 @@ Global {62C0DB35-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU {62C0DB35-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU {62C0DB35-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.Documentation|Any CPU.Build.0 = Documentation|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.Release|Any CPU.ActiveCfg = Release|Any CPU - {650C6F3D-33B5-4216-9536-956AB42C0624}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Nsis|Any CPU.Build.0 = Nsis|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Release|Any CPU.Build.0 = Release|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU {868E37B3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {868E37B3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {868E37B3-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU @@ -150,29 +123,6 @@ Global {868E37B3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU {868E37B3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU {868E37B3-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {A37A7E14-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A625BE87-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU - {A625BE87-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Documentation|Any CPU.Build.0 = Documentation|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {A625BE87-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - {A625BE87-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU {A625BE88-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A625BE88-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {A625BE88-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU @@ -192,6 +142,46 @@ Global {ADC34399-7613-44D2-90B2-19250F06FE7A}.Nsis|Any CPU.Build.0 = Nsis|Any CPU {ADC34399-7613-44D2-90B2-19250F06FE7A}.Release|Any CPU.ActiveCfg = Release|Any CPU {ADC34399-7613-44D2-90B2-19250F06FE7A}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.Documentation|Any CPU.Build.0 = Documentation|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.Release|Any CPU.ActiveCfg = Release|Any CPU + {650C6F3D-33B5-4216-9536-956AB42C0624}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {31D19132-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {31D19132-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {31D19132-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU + {31D19132-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU + {31D19132-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {31D19132-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {31D19132-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU + {31D19132-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {31D19132-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {31D19132-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {31D19132-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {5FDFF4B6-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Nsis|Any CPU.Build.0 = Nsis|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.Release|Any CPU.Build.0 = Release|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {75DC22B1-113F-4A66-96B9-2FF8208C10E8}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU {ADC34399-7613-44D2-90B2-19250F06FE7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {ADC34399-7613-44D2-90B2-19250F06FE7B}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU {ADC34399-7613-44D2-90B2-19250F06FE7B}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU @@ -227,11 +217,35 @@ Global {C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.Release|Any CPU.Build.0 = Release|Any CPU {C4DDD20F-CB4E-43F4-A75C-4A3D668E1F99}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU - EndGlobalSection - GlobalSection(MonoDevelopProperties) = preSolution - StartupItem = Source\Examples\OpenTK.Examples.csproj + {A625BE87-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A625BE87-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.ActiveCfg = DebugMinimal|Any CPU + {A625BE87-0000-0000-0000-000000000000}.DebugMinimal|Any CPU.Build.0 = DebugMinimal|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Documentation|Any CPU.Build.0 = Documentation|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Nsis|Any CPU.ActiveCfg = Nsis|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Nsis|Any CPU.Build.0 = Nsis|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A625BE87-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {A625BE87-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.ActiveCfg = ReleaseMinimal|Any CPU + {A625BE87-0000-0000-0000-000000000000}.ReleaseMinimal|Any CPU.Build.0 = ReleaseMinimal|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.DebugMinimal|Any CPU.ActiveCfg = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.DebugMinimal|Any CPU.Build.0 = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Documentation|Any CPU.ActiveCfg = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Documentation|Any CPU.Build.0 = Debug|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Nsis|Any CPU.ActiveCfg = Release|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Nsis|Any CPU.Build.0 = Release|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.Release|Any CPU.Build.0 = Release|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.ReleaseMinimal|Any CPU.ActiveCfg = Release|Any CPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0}.ReleaseMinimal|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Source\Examples\OpenTK.Examples.csproj + EndGlobalSection EndGlobal diff --git a/Source/NUnitTests/Matrix4Test.cs b/Source/NUnitTests/Matrix4Test.cs new file mode 100644 index 0000000000..b47d7ebe2a --- /dev/null +++ b/Source/NUnitTests/Matrix4Test.cs @@ -0,0 +1,289 @@ +using System; +using NUnit.Framework; +using OpenTK; + +namespace NUnitTests +{ + [TestFixture] + public class Matrix4Test + { + [Test] + public void Matrix4_SixteenValueConstructor() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Assert.AreEqual(0, A.M11); + Assert.AreEqual(1, A.M12); + Assert.AreEqual(2, A.M13); + Assert.AreEqual(3, A.M14); + + Assert.AreEqual(4, A.M21); + Assert.AreEqual(5, A.M22); + Assert.AreEqual(6, A.M23); + Assert.AreEqual(7, A.M24); + + Assert.AreEqual(8, A.M31); + Assert.AreEqual(9, A.M32); + Assert.AreEqual(10, A.M33); + Assert.AreEqual(11, A.M34); + + Assert.AreEqual(12, A.M41); + Assert.AreEqual(13, A.M42); + Assert.AreEqual(14, A.M43); + Assert.AreEqual(15, A.M44); + } + + [Test] + public void Matrix4_Matrix3Constructor() + { + Matrix3 B = new Matrix3( 1, 2, 3, + 4, 5, 6, + 7, 8, 9); + + Matrix4 A = new Matrix4(B); + + Assert.AreEqual(B.M11, A.M11); + Assert.AreEqual(B.M12, A.M12); + Assert.AreEqual(B.M13, A.M13); + + Assert.AreEqual(B.M21, A.M21); + Assert.AreEqual(B.M22, A.M22); + Assert.AreEqual(B.M23, A.M23); + + Assert.AreEqual(B.M31, A.M31); + Assert.AreEqual(B.M32, A.M32); + Assert.AreEqual(B.M33, A.M33); + } + + [Test] + public void Matrix4_FourVector4Constructor() + { + Vector4 V = new Vector4(1, 2, 3, 4); + Vector4 U = new Vector4(5, 6, 7, 8); + Vector4 S = new Vector4(9, 10, 11, 12); + Vector4 T = new Vector4(13, 14, 15, 16); + + Matrix4 A = new Matrix4(V, U, S, T); + + Assert.AreEqual(V.X, A.M11); + Assert.AreEqual(V.Y, A.M12); + Assert.AreEqual(V.Z, A.M13); + Assert.AreEqual(V.W, A.M14); + + Assert.AreEqual(U.X, A.M21); + Assert.AreEqual(U.Y, A.M22); + Assert.AreEqual(U.Z, A.M23); + Assert.AreEqual(U.W, A.M24); + + Assert.AreEqual(S.X, A.M31); + Assert.AreEqual(S.Y, A.M32); + Assert.AreEqual(S.Z, A.M33); + Assert.AreEqual(S.W, A.M34); + + Assert.AreEqual(T.X, A.M41); + Assert.AreEqual(T.Y, A.M42); + Assert.AreEqual(T.Z, A.M43); + Assert.AreEqual(T.W, A.M44); + + } + + [Test] + public void Matrix4_Equal_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Assert.IsTrue(A == B); + } + + [Test] + public void Matrix4_Matrix4TimesMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 56, 62, 68, 74, + 152, 174, 196, 218, + 248, 286, 324, 362, + 344, 398, 452, 506); + + Matrix4 result = A * B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Matrix4PlusMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 0, 2, 4, 6, + 8, 10, 12, 14, + 16, 18, 20, 22, + 24, 26, 28, 30); + + Matrix4 result = A + B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Matrix4MinusMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0); + + Matrix4 result = A - B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Index_Operator() + { + Matrix4 A = new Matrix4(); + A[0, 0] = 0; + A[0, 1] = 1; + A[0, 2] = 2; + A[0, 3] = 3; + A[1, 0] = 4; + A[1, 1] = 5; + A[1, 2] = 6; + A[1, 3] = 7; + A[2, 0] = 8; + A[2, 1] = 9; + A[2, 2] = 10; + A[2, 3] = 11; + A[3, 0] = 12; + A[3, 1] = 13; + A[3, 2] = 14; + A[3, 3] = 15; + Assert.AreEqual(0, A[0, 0]); + Assert.AreEqual(1, A[0, 1]); + Assert.AreEqual(2, A[0, 2]); + Assert.AreEqual(3, A[0, 3]); + Assert.AreEqual(4, A[1, 0]); + Assert.AreEqual(5, A[1, 1]); + Assert.AreEqual(6, A[1, 2]); + Assert.AreEqual(7, A[1, 3]); + Assert.AreEqual(8, A[2, 0]); + Assert.AreEqual(9, A[2, 1]); + Assert.AreEqual(10, A[2, 2]); + Assert.AreEqual(11, A[2, 3]); + Assert.AreEqual(12, A[3, 0]); + Assert.AreEqual(13, A[3, 1]); + Assert.AreEqual(14, A[3, 2]); + Assert.AreEqual(15, A[3, 3]); + } + + [Test] + public void Matrix4_Index_NegativeIndexException() + { + Matrix4 A = new Matrix4(); + bool negativeIndexException = false; + try + { + A[-1, 2] = 0; + } + catch(Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + + negativeIndexException = false; + try + { + A[1, -2] = 0; + } + catch (Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + + negativeIndexException = false; + try + { + A[-1, -2] = 0; + } + catch (Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + } + + [Test] + public void Matrix4_Index_LargeIndexException() + { + Matrix4 A = new Matrix4(); + bool largeIndexException = false; + try + { + A[5, 2] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + + largeIndexException = false; + try + { + A[1, 6] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + + largeIndexException = false; + try + { + A[7, 12] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + } + } +} diff --git a/Source/NUnitTests/NUnitTests.csproj b/Source/NUnitTests/NUnitTests.csproj new file mode 100644 index 0000000000..cdbfbb158b --- /dev/null +++ b/Source/NUnitTests/NUnitTests.csproj @@ -0,0 +1,86 @@ + + + + + Debug + AnyCPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0} + Library + Properties + NUnitTests + NUnitTests + v4.5 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll + False + + + ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll + True + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.util.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll + False + + + + + + + + + + + + + + + + + + + + {a37a7e14-0000-0000-0000-000000000000} + OpenTK + + + + + + + + \ No newline at end of file diff --git a/Source/NUnitTests/Properties/AssemblyInfo.cs b/Source/NUnitTests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..076d45c68d --- /dev/null +++ b/Source/NUnitTests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("NUnitTests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NUnitTests")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8a03c40d-007c-4a15-ab0c-2111969ea6df")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/NUnitTests/Vector3Tests.cs b/Source/NUnitTests/Vector3Tests.cs new file mode 100644 index 0000000000..57e1f078ae --- /dev/null +++ b/Source/NUnitTests/Vector3Tests.cs @@ -0,0 +1,439 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using OpenTK; + +namespace NUnitTests +{ + [TestFixture] + public class Vector3Tests + { + [Test] + public void Vector3_SingleValueConstructor() + { + Vector3 V = new Vector3(1); + Assert.AreEqual(1, V.X); + Assert.AreEqual(1, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_ThreeValueConstructor() + { + Vector3 V = new Vector3(1,2,3); + Assert.AreEqual(1, V.X); + Assert.AreEqual(2, V.Y); + Assert.AreEqual(3, V.Z); + } + + [Test] + public void Vector3_Vector2Constructor() + { + Vector2 T = new Vector2(1, 2); + Vector3 V = new Vector3(T); + Assert.AreEqual(T.X, V.X); + Assert.AreEqual(T.Y, V.Y); + Assert.AreEqual(0, V.Z); + } + + [Test] + public void Vector3_Vector3Constructor() + { + Vector3 U = new Vector3(1, 2, 3); + Vector3 V = new Vector3(U); + Assert.IsTrue(U == V); + } + + [Test] + public void Vector3_Vector4Constructor() + { + Vector4 T = new Vector4(1, 2, 3, 0); + Vector3 V = new Vector3(T); + Assert.AreEqual(T.X, V.X); + Assert.AreEqual(T.Y, V.Y); + Assert.AreEqual(T.Z, V.Z); + } + + [Test] + public void Vector3_Index_operator() + { + Vector3 V = new Vector3(); + V[0] = 1; V[1] = 2; V[2] = 3; + Assert.AreEqual(1, V[0]); + Assert.AreEqual(2, V[1]); + Assert.AreEqual(3, V[2]); + } + + [Test] + public void Vector3_Index_NegativeExceptin() + { + //the syntax for an expected exception changes from + //NUnit 2.6.4 / Microsoft Unit Test to NUnit 3+ + //but a try-catch block is always guaranteed to work + Vector3 V = new Vector3(); + bool negativeIndexExceptionFound = false; + try + { + V[-1] = 5; + } + catch (Exception) + { + negativeIndexExceptionFound = true; + } + Assert.IsTrue(negativeIndexExceptionFound); + } + + [Test] + public void Vector3_Index_LargeIndexExceptin() + { + //the syntax for an expected exception changes from + //NUnit 2.6.4 / Microsoft Unit Test to NUnit 3+ + //but a try-catch block is always guaranteed to work + Vector3 V = new Vector3(); + bool largeIndexExceptionFound = false; + try + { + V[3] = 6; + } + catch (Exception) + { + largeIndexExceptionFound = true; + } + Assert.IsTrue(largeIndexExceptionFound); + } + + [Test] + public void Vector3_Length() + { + float X = 1, Y = 2, Z = 2; + Vector3 U = new Vector3(X, Y, Z); + Assert.AreEqual((float)System.Math.Sqrt(X * X + Y * Y + Z * Z), U.Length); + } + + [Test] + public void Vector3_LengthFast() + { + float X = 1, Y = 2, Z = 2; + Vector3 U = new Vector3(X, Y, Z); + Assert.AreEqual(1.0f / MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z), U.LengthFast); + } + + [Test] + public void Vector3_Normalized() + { + float X = 2, Y = 4, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + float length = U.Length; + Vector3 V = U.Normalized(); + Assert.AreEqual(U.X / length, V.X); + Assert.AreEqual(U.Y / length, V.Y); + Assert.AreEqual(U.Z / length, V.Z); + } + + [Test] + public void Vector3_NormalizeFast_Instance() + { + float X = 2, Y = 4, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = U; + V.NormalizeFast(); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_Add() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Add(T, U); + Assert.AreEqual(T.X + U.X, V.X); + Assert.AreEqual(T.Y + U.Y, V.Y); + Assert.AreEqual(T.Z + U.Z, V.Z); + } + + [Test] + public void Vector3_Subtract() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Subtract(T, U); + Assert.AreEqual(T.X - U.X, V.X); + Assert.AreEqual(T.Y - U.Y, V.Y); + Assert.AreEqual(T.Z - U.Z, V.Z); + } + + [Test] + public void Vector3_Multiply_Scalar() + { + float scalar = 5.5f; + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Multiply(U, scalar); + Assert.AreEqual(U.X * scalar, V.X); + Assert.AreEqual(U.Y * scalar, V.Y); + Assert.AreEqual(U.Z * scalar, V.Z); + } + + [Test] + public void Vector3_Multiply_Componentwise() + { + Vector3 T = new Vector3(7, 8, 0.5f); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Multiply(T, U); + Assert.AreEqual(T.X * U.X, V.X); + Assert.AreEqual(T.Y * U.Y, V.Y); + Assert.AreEqual(T.Z * U.Z, V.Z); + } + + [Test] + public void Vector3_Divide_Scalar() + { + float scalar = 5.5f; + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Divide(U, scalar); + //we have to account for a small amount of round off error + //in this division test + Assert.IsTrue(Math.Abs((U.X / scalar) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / scalar) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / scalar) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_ComponentMin() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V = Vector3.ComponentMin(T, U); + Assert.AreEqual(1, V.X); + Assert.AreEqual(3, V.Y); + Assert.AreEqual(-100, V.Z); + } + + [Test] + public void Vector3_ComponentMinOut() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V; + Vector3.ComponentMin(ref T, ref U, out V); + Assert.AreEqual(1, V.X); + Assert.AreEqual(3, V.Y); + Assert.AreEqual(-100, V.Z); + } + + [Test] + public void Vector3_ComponentMax() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V = Vector3.ComponentMax(T, U); + Assert.AreEqual(24, V.X); + Assert.AreEqual(55, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_ComponentMaxOut() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V; + Vector3.ComponentMax(ref T, ref U, out V); + Assert.AreEqual(24, V.X); + Assert.AreEqual(55, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_Min() + { + Vector3 T = new Vector3(1, 2, 3); + Vector3 U = new Vector3(24, 300, 88); + Vector3 result = Vector3.Min(T, U); + Assert.IsTrue(result == T); + } + + [Test] + public void Vector3_Max() + { + Vector3 T = new Vector3(1, 2, 3); + Vector3 U = new Vector3(24, 300, 88); + Vector3 result = Vector3.Max(T, U); + Assert.IsTrue(result == U); + } + + [Test] + public void Vector3_Clamp() + { + Vector3 V = new Vector3(-6, 302, -22); + Vector3 min = new Vector3(-5, -10, -20); + Vector3 max = new Vector3(24, 300, 55); + Vector3 result = Vector3.Clamp(V, min, max); + Assert.AreEqual(result.X, -5); + Assert.AreEqual(result.Y, 300); + Assert.AreEqual(result.Z, -20); + } + + [Test] + public void Vector3_ClampOut() + { + Vector3 V = new Vector3(-6, 302, -22); + Vector3 min = new Vector3(-5, -10, -20); + Vector3 max = new Vector3(24, 300, 55); + Vector3 result; + Vector3.Clamp(ref V, ref min, ref max, out result); + Assert.AreEqual(result.X, -5); + Assert.AreEqual(result.Y, 300); + Assert.AreEqual(result.Z, -20); + } + + [Test] + public void Vector3_Normalize() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = Vector3.Normalize(U); + float length = U.Length; + Assert.IsTrue(Math.Abs((U.X / length) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / length) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / length) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_NormalizeOut() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V; + Vector3.Normalize(ref U, out V); + float length = U.Length; + Assert.IsTrue(Math.Abs((U.X / length) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / length) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / length) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_NormalizeFast_Static() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = Vector3.NormalizeFast(U); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_NormalizeFast() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V; + Vector3.NormalizeFast(ref U, out V); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_Dot() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float dot = Vector3.Dot(T, U); + float expected = T.X * U.X + T.Y * U.Y + T.Z * U.Z; + Assert.AreEqual(expected, dot); + } + + [Test] + public void Vector3_Cross() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 expected = new Vector3(-1073, 445, 439); + Vector3 result = Vector3.Cross(T, U); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Lerp() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float blend = 0.25f; + Vector3 expected = blend * (U - T) + T; + Vector3 result = Vector3.Lerp(T, U, blend); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_LerpOut() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float blend = 0.25f; + Vector3 expected = blend * (U - T) + T; + Vector3 result; + Vector3.Lerp(ref T, ref U, blend, out result); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_BaryCentric() + { + Vector3 a = new Vector3(7, 8, 9); + Vector3 b = new Vector3(23, 89, -34); + Vector3 c = new Vector3(88, -42, 39); + float u = 0.25f; + float v = 0.75f; + Vector3 expected = a + u * (b - a) + v * (c - a); + Vector3 result = Vector3.BaryCentric(a, b, c, u, v); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_BaryCentricOut() + { + Vector3 a = new Vector3(7, 8, 9); + Vector3 b = new Vector3(23, 89, -34); + Vector3 c = new Vector3(88, -42, 39); + float u = 0.25f; + float v = 0.75f; + Vector3 expected = a + u * (b - a) + v * (c - a); + Vector3 result; + Vector3.BaryCentric(ref a, ref b, ref c, u, v, out result); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Matrix3TimesVector3_operator() + { + Matrix3 A = new Matrix3(); + A[0, 0] = 16; A[0, 1] = 15; A[0, 2] = 14; + A[1, 0] = 12; A[1, 1] = 11; A[1, 2] = 10; + A[2, 0] = 8; A[2, 1] = 7; A[2, 2] = 6; + + Vector3 input = new Vector3(1, 5, 9); + Vector3 result = A * input; + OpenTK.Vector3 expected = new OpenTK.Vector3(217, 157, 97); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Equal_operator() + { + Vector3 V = new Vector3(1, 2, 3); + Vector3 U = new Vector3(1, 2, 3); + Assert.IsTrue(U == V); + } + + + } +} diff --git a/Source/NUnitTests/packages.config b/Source/NUnitTests/packages.config new file mode 100644 index 0000000000..1f8800b2cd --- /dev/null +++ b/Source/NUnitTests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Source/OpenTK.Tests/Matrix4Test.cs b/Source/OpenTK.Tests/Matrix4Test.cs new file mode 100644 index 0000000000..97cc8862aa --- /dev/null +++ b/Source/OpenTK.Tests/Matrix4Test.cs @@ -0,0 +1,289 @@ +using System; +using NUnit.Framework; +using OpenTK; + +namespace OpenTK.Tests +{ + [TestFixture] + public class Matrix4Test + { + [Test] + public void Matrix4_SixteenValueConstructor() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Assert.AreEqual(0, A.M11); + Assert.AreEqual(1, A.M12); + Assert.AreEqual(2, A.M13); + Assert.AreEqual(3, A.M14); + + Assert.AreEqual(4, A.M21); + Assert.AreEqual(5, A.M22); + Assert.AreEqual(6, A.M23); + Assert.AreEqual(7, A.M24); + + Assert.AreEqual(8, A.M31); + Assert.AreEqual(9, A.M32); + Assert.AreEqual(10, A.M33); + Assert.AreEqual(11, A.M34); + + Assert.AreEqual(12, A.M41); + Assert.AreEqual(13, A.M42); + Assert.AreEqual(14, A.M43); + Assert.AreEqual(15, A.M44); + } + + [Test] + public void Matrix4_Matrix3Constructor() + { + Matrix3 B = new Matrix3( 1, 2, 3, + 4, 5, 6, + 7, 8, 9); + + Matrix4 A = new Matrix4(B); + + Assert.AreEqual(B.M11, A.M11); + Assert.AreEqual(B.M12, A.M12); + Assert.AreEqual(B.M13, A.M13); + + Assert.AreEqual(B.M21, A.M21); + Assert.AreEqual(B.M22, A.M22); + Assert.AreEqual(B.M23, A.M23); + + Assert.AreEqual(B.M31, A.M31); + Assert.AreEqual(B.M32, A.M32); + Assert.AreEqual(B.M33, A.M33); + } + + [Test] + public void Matrix4_FourVector4Constructor() + { + Vector4 V = new Vector4(1, 2, 3, 4); + Vector4 U = new Vector4(5, 6, 7, 8); + Vector4 S = new Vector4(9, 10, 11, 12); + Vector4 T = new Vector4(13, 14, 15, 16); + + Matrix4 A = new Matrix4(V, U, S, T); + + Assert.AreEqual(V.X, A.M11); + Assert.AreEqual(V.Y, A.M12); + Assert.AreEqual(V.Z, A.M13); + Assert.AreEqual(V.W, A.M14); + + Assert.AreEqual(U.X, A.M21); + Assert.AreEqual(U.Y, A.M22); + Assert.AreEqual(U.Z, A.M23); + Assert.AreEqual(U.W, A.M24); + + Assert.AreEqual(S.X, A.M31); + Assert.AreEqual(S.Y, A.M32); + Assert.AreEqual(S.Z, A.M33); + Assert.AreEqual(S.W, A.M34); + + Assert.AreEqual(T.X, A.M41); + Assert.AreEqual(T.Y, A.M42); + Assert.AreEqual(T.Z, A.M43); + Assert.AreEqual(T.W, A.M44); + + } + + [Test] + public void Matrix4_Equal_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Assert.IsTrue(A == B); + } + + [Test] + public void Matrix4_Matrix4TimesMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 56, 62, 68, 74, + 152, 174, 196, 218, + 248, 286, 324, 362, + 344, 398, 452, 506); + + Matrix4 result = A * B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Matrix4PlusMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 0, 2, 4, 6, + 8, 10, 12, 14, + 16, 18, 20, 22, + 24, 26, 28, 30); + + Matrix4 result = A + B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Matrix4MinusMatrix4_operator() + { + Matrix4 A = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 B = new Matrix4( 0, 1, 2, 3, + 4, 5, 6, 7, + 8, 9, 10, 11, + 12, 13, 14, 15); + + Matrix4 expected = new Matrix4( 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0, + 0, 0, 0, 0); + + Matrix4 result = A - B; + Assert.IsTrue(expected == result); + } + + [Test] + public void Matrix4_Index_Operator() + { + Matrix4 A = new Matrix4(); + A[0, 0] = 0; + A[0, 1] = 1; + A[0, 2] = 2; + A[0, 3] = 3; + A[1, 0] = 4; + A[1, 1] = 5; + A[1, 2] = 6; + A[1, 3] = 7; + A[2, 0] = 8; + A[2, 1] = 9; + A[2, 2] = 10; + A[2, 3] = 11; + A[3, 0] = 12; + A[3, 1] = 13; + A[3, 2] = 14; + A[3, 3] = 15; + Assert.AreEqual(0, A[0, 0]); + Assert.AreEqual(1, A[0, 1]); + Assert.AreEqual(2, A[0, 2]); + Assert.AreEqual(3, A[0, 3]); + Assert.AreEqual(4, A[1, 0]); + Assert.AreEqual(5, A[1, 1]); + Assert.AreEqual(6, A[1, 2]); + Assert.AreEqual(7, A[1, 3]); + Assert.AreEqual(8, A[2, 0]); + Assert.AreEqual(9, A[2, 1]); + Assert.AreEqual(10, A[2, 2]); + Assert.AreEqual(11, A[2, 3]); + Assert.AreEqual(12, A[3, 0]); + Assert.AreEqual(13, A[3, 1]); + Assert.AreEqual(14, A[3, 2]); + Assert.AreEqual(15, A[3, 3]); + } + + [Test] + public void Matrix4_Index_NegativeIndexException() + { + Matrix4 A = new Matrix4(); + bool negativeIndexException = false; + try + { + A[-1, 2] = 0; + } + catch(Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + + negativeIndexException = false; + try + { + A[1, -2] = 0; + } + catch (Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + + negativeIndexException = false; + try + { + A[-1, -2] = 0; + } + catch (Exception) + { + negativeIndexException = true; + } + Assert.IsTrue(negativeIndexException); + } + + [Test] + public void Matrix4_Index_LargeIndexException() + { + Matrix4 A = new Matrix4(); + bool largeIndexException = false; + try + { + A[5, 2] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + + largeIndexException = false; + try + { + A[1, 6] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + + largeIndexException = false; + try + { + A[7, 12] = 0; + } + catch (Exception) + { + largeIndexException = true; + } + Assert.IsTrue(largeIndexException); + } + } +} diff --git a/Source/OpenTK.Tests/OpenTK.Tests.csproj b/Source/OpenTK.Tests/OpenTK.Tests.csproj new file mode 100644 index 0000000000..08e709ecfd --- /dev/null +++ b/Source/OpenTK.Tests/OpenTK.Tests.csproj @@ -0,0 +1,87 @@ + + + + + Debug + AnyCPU + {930A780C-A67C-422F-9EED-DB38DAA47AB0} + Library + Properties + OpenTK.Tests + OpenTK.Tests + v4.0 + 512 + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.core.interfaces.dll + False + + + ..\..\packages\NUnit.2.6.4\lib\nunit.framework.dll + True + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\nunit.util.dll + False + + + ..\..\packages\NUnitTestAdapter.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll + False + + + + + + + + + + + + + + + + + + + + {a37a7e14-0000-0000-0000-000000000000} + OpenTK + + + + + + + + \ No newline at end of file diff --git a/Source/OpenTK.Tests/Properties/AssemblyInfo.cs b/Source/OpenTK.Tests/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..fac1b001a2 --- /dev/null +++ b/Source/OpenTK.Tests/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenTK.Tests")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("OpenTK.Tests")] +[assembly: AssemblyCopyright("Copyright © 2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("8a03c40d-007c-4a15-ab0c-2111969ea6df")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Source/OpenTK.Tests/Vector3Tests.cs b/Source/OpenTK.Tests/Vector3Tests.cs new file mode 100644 index 0000000000..16db47351e --- /dev/null +++ b/Source/OpenTK.Tests/Vector3Tests.cs @@ -0,0 +1,439 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using OpenTK; + +namespace OpenTK.Tests +{ + [TestFixture] + public class Vector3Tests + { + [Test] + public void Vector3_SingleValueConstructor() + { + Vector3 V = new Vector3(1); + Assert.AreEqual(1, V.X); + Assert.AreEqual(1, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_ThreeValueConstructor() + { + Vector3 V = new Vector3(1,2,3); + Assert.AreEqual(1, V.X); + Assert.AreEqual(2, V.Y); + Assert.AreEqual(3, V.Z); + } + + [Test] + public void Vector3_Vector2Constructor() + { + Vector2 T = new Vector2(1, 2); + Vector3 V = new Vector3(T); + Assert.AreEqual(T.X, V.X); + Assert.AreEqual(T.Y, V.Y); + Assert.AreEqual(0, V.Z); + } + + [Test] + public void Vector3_Vector3Constructor() + { + Vector3 U = new Vector3(1, 2, 3); + Vector3 V = new Vector3(U); + Assert.IsTrue(U == V); + } + + [Test] + public void Vector3_Vector4Constructor() + { + Vector4 T = new Vector4(1, 2, 3, 0); + Vector3 V = new Vector3(T); + Assert.AreEqual(T.X, V.X); + Assert.AreEqual(T.Y, V.Y); + Assert.AreEqual(T.Z, V.Z); + } + + [Test] + public void Vector3_Index_operator() + { + Vector3 V = new Vector3(); + V[0] = 1; V[1] = 2; V[2] = 3; + Assert.AreEqual(1, V[0]); + Assert.AreEqual(2, V[1]); + Assert.AreEqual(3, V[2]); + } + + [Test] + public void Vector3_Index_NegativeExceptin() + { + //the syntax for an expected exception changes from + //NUnit 2.6.4 / Microsoft Unit Test to NUnit 3+ + //but a try-catch block is always guaranteed to work + Vector3 V = new Vector3(); + bool negativeIndexExceptionFound = false; + try + { + V[-1] = 5; + } + catch (Exception) + { + negativeIndexExceptionFound = true; + } + Assert.IsTrue(negativeIndexExceptionFound); + } + + [Test] + public void Vector3_Index_LargeIndexExceptin() + { + //the syntax for an expected exception changes from + //NUnit 2.6.4 / Microsoft Unit Test to NUnit 3+ + //but a try-catch block is always guaranteed to work + Vector3 V = new Vector3(); + bool largeIndexExceptionFound = false; + try + { + V[3] = 6; + } + catch (Exception) + { + largeIndexExceptionFound = true; + } + Assert.IsTrue(largeIndexExceptionFound); + } + + [Test] + public void Vector3_Length() + { + float X = 1, Y = 2, Z = 2; + Vector3 U = new Vector3(X, Y, Z); + Assert.AreEqual((float)System.Math.Sqrt(X * X + Y * Y + Z * Z), U.Length); + } + + [Test] + public void Vector3_LengthFast() + { + float X = 1, Y = 2, Z = 2; + Vector3 U = new Vector3(X, Y, Z); + Assert.AreEqual(1.0f / MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z), U.LengthFast); + } + + [Test] + public void Vector3_Normalized() + { + float X = 2, Y = 4, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + float length = U.Length; + Vector3 V = U.Normalized(); + Assert.AreEqual(U.X / length, V.X); + Assert.AreEqual(U.Y / length, V.Y); + Assert.AreEqual(U.Z / length, V.Z); + } + + [Test] + public void Vector3_NormalizeFast_Instance() + { + float X = 2, Y = 4, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = U; + V.NormalizeFast(); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_Add() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Add(T, U); + Assert.AreEqual(T.X + U.X, V.X); + Assert.AreEqual(T.Y + U.Y, V.Y); + Assert.AreEqual(T.Z + U.Z, V.Z); + } + + [Test] + public void Vector3_Subtract() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Subtract(T, U); + Assert.AreEqual(T.X - U.X, V.X); + Assert.AreEqual(T.Y - U.Y, V.Y); + Assert.AreEqual(T.Z - U.Z, V.Z); + } + + [Test] + public void Vector3_Multiply_Scalar() + { + float scalar = 5.5f; + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Multiply(U, scalar); + Assert.AreEqual(U.X * scalar, V.X); + Assert.AreEqual(U.Y * scalar, V.Y); + Assert.AreEqual(U.Z * scalar, V.Z); + } + + [Test] + public void Vector3_Multiply_Componentwise() + { + Vector3 T = new Vector3(7, 8, 0.5f); + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Multiply(T, U); + Assert.AreEqual(T.X * U.X, V.X); + Assert.AreEqual(T.Y * U.Y, V.Y); + Assert.AreEqual(T.Z * U.Z, V.Z); + } + + [Test] + public void Vector3_Divide_Scalar() + { + float scalar = 5.5f; + Vector3 U = new Vector3(23, 89, -34); + Vector3 V = Vector3.Divide(U, scalar); + //we have to account for a small amount of round off error + //in this division test + Assert.IsTrue(Math.Abs((U.X / scalar) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / scalar) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / scalar) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_ComponentMin() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V = Vector3.ComponentMin(T, U); + Assert.AreEqual(1, V.X); + Assert.AreEqual(3, V.Y); + Assert.AreEqual(-100, V.Z); + } + + [Test] + public void Vector3_ComponentMinOut() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V; + Vector3.ComponentMin(ref T, ref U, out V); + Assert.AreEqual(1, V.X); + Assert.AreEqual(3, V.Y); + Assert.AreEqual(-100, V.Z); + } + + [Test] + public void Vector3_ComponentMax() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V = Vector3.ComponentMax(T, U); + Assert.AreEqual(24, V.X); + Assert.AreEqual(55, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_ComponentMaxOut() + { + Vector3 T = new Vector3(1, 55, -100); + Vector3 U = new Vector3(24, 3, 1); + Vector3 V; + Vector3.ComponentMax(ref T, ref U, out V); + Assert.AreEqual(24, V.X); + Assert.AreEqual(55, V.Y); + Assert.AreEqual(1, V.Z); + } + + [Test] + public void Vector3_Min() + { + Vector3 T = new Vector3(1, 2, 3); + Vector3 U = new Vector3(24, 300, 88); + Vector3 result = Vector3.Min(T, U); + Assert.IsTrue(result == T); + } + + [Test] + public void Vector3_Max() + { + Vector3 T = new Vector3(1, 2, 3); + Vector3 U = new Vector3(24, 300, 88); + Vector3 result = Vector3.Max(T, U); + Assert.IsTrue(result == U); + } + + [Test] + public void Vector3_Clamp() + { + Vector3 V = new Vector3(-6, 302, -22); + Vector3 min = new Vector3(-5, -10, -20); + Vector3 max = new Vector3(24, 300, 55); + Vector3 result = Vector3.Clamp(V, min, max); + Assert.AreEqual(result.X, -5); + Assert.AreEqual(result.Y, 300); + Assert.AreEqual(result.Z, -20); + } + + [Test] + public void Vector3_ClampOut() + { + Vector3 V = new Vector3(-6, 302, -22); + Vector3 min = new Vector3(-5, -10, -20); + Vector3 max = new Vector3(24, 300, 55); + Vector3 result; + Vector3.Clamp(ref V, ref min, ref max, out result); + Assert.AreEqual(result.X, -5); + Assert.AreEqual(result.Y, 300); + Assert.AreEqual(result.Z, -20); + } + + [Test] + public void Vector3_Normalize() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = Vector3.Normalize(U); + float length = U.Length; + Assert.IsTrue(Math.Abs((U.X / length) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / length) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / length) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_NormalizeOut() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V; + Vector3.Normalize(ref U, out V); + float length = U.Length; + Assert.IsTrue(Math.Abs((U.X / length) - V.X) < 1e-5); + Assert.IsTrue(Math.Abs((U.Y / length) - V.Y) < 1e-5); + Assert.IsTrue(Math.Abs((U.Z / length) - V.Z) < 1e-5); + } + + [Test] + public void Vector3_NormalizeFast_Static() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V = Vector3.NormalizeFast(U); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_NormalizeFast() + { + float X = 64, Y = 144, Z = 16; + Vector3 U = new Vector3(X, Y, Z); + Vector3 V; + Vector3.NormalizeFast(ref U, out V); + float scale = MathHelper.InverseSqrtFast(X * X + Y * Y + Z * Z); + Assert.AreEqual(U.X * scale, V.X); + Assert.AreEqual(U.Y * scale, V.Y); + Assert.AreEqual(U.Z * scale, V.Z); + } + + [Test] + public void Vector3_Dot() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float dot = Vector3.Dot(T, U); + float expected = T.X * U.X + T.Y * U.Y + T.Z * U.Z; + Assert.AreEqual(expected, dot); + } + + [Test] + public void Vector3_Cross() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + Vector3 expected = new Vector3(-1073, 445, 439); + Vector3 result = Vector3.Cross(T, U); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Lerp() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float blend = 0.25f; + Vector3 expected = blend * (U - T) + T; + Vector3 result = Vector3.Lerp(T, U, blend); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_LerpOut() + { + Vector3 T = new Vector3(7, 8, 9); + Vector3 U = new Vector3(23, 89, -34); + float blend = 0.25f; + Vector3 expected = blend * (U - T) + T; + Vector3 result; + Vector3.Lerp(ref T, ref U, blend, out result); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_BaryCentric() + { + Vector3 a = new Vector3(7, 8, 9); + Vector3 b = new Vector3(23, 89, -34); + Vector3 c = new Vector3(88, -42, 39); + float u = 0.25f; + float v = 0.75f; + Vector3 expected = a + u * (b - a) + v * (c - a); + Vector3 result = Vector3.BaryCentric(a, b, c, u, v); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_BaryCentricOut() + { + Vector3 a = new Vector3(7, 8, 9); + Vector3 b = new Vector3(23, 89, -34); + Vector3 c = new Vector3(88, -42, 39); + float u = 0.25f; + float v = 0.75f; + Vector3 expected = a + u * (b - a) + v * (c - a); + Vector3 result; + Vector3.BaryCentric(ref a, ref b, ref c, u, v, out result); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Matrix3TimesVector3_operator() + { + Matrix3 A = new Matrix3(); + A[0, 0] = 16; A[0, 1] = 15; A[0, 2] = 14; + A[1, 0] = 12; A[1, 1] = 11; A[1, 2] = 10; + A[2, 0] = 8; A[2, 1] = 7; A[2, 2] = 6; + + Vector3 input = new Vector3(1, 5, 9); + Vector3 result = A * input; + OpenTK.Vector3 expected = new OpenTK.Vector3(217, 157, 97); + Assert.IsTrue(expected == result); + } + + [Test] + public void Vector3_Equal_operator() + { + Vector3 V = new Vector3(1, 2, 3); + Vector3 U = new Vector3(1, 2, 3); + Assert.IsTrue(U == V); + } + + + } +} diff --git a/Source/OpenTK.Tests/packages.config b/Source/OpenTK.Tests/packages.config new file mode 100644 index 0000000000..1f8800b2cd --- /dev/null +++ b/Source/OpenTK.Tests/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file