Opentk/Source/Examples/Tests/MathSpeed.cs
2008-01-06 02:35:32 +00:00

93 lines
3.1 KiB
C#

#region --- License ---
/* Copyright (c) 2006, 2007 Stefanos Apostolopoulos
* See license.txt for license info
*/
#endregion
using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using OpenTK.Math;
namespace Examples.Tests
{
[Example("Math speed test", ExampleCategory.Test, 2, false)]
public class MathSpeed
{
public static void Main()
{
Stopwatch watch = new Stopwatch();
Vector3 a = new Vector3(0.0f, 0.0f, 0.0f);
Vector3 b = new Vector3(1.0f, 1.0f, 1.0f);
Vector3 c = new Vector3(3.0f, 3.0f, 3.0f);
Vector3 d = new Vector3(4.0f, 4.0f, 4.0f);
Vector3 e = Vector3.Zero;
Vector3 res;
// Force the JIT to compile the functions.
Vector3.Add(a, b);
Vector3.Add(ref a, ref b, out res);
res = a + b;
res = Vector3.Zero;
/*
watch.Reset();
watch.Start();
for (int i = 100000000; --i != 0; )
;
watch.Stop();
Trace.WriteLine(String.Format("Noop\t\t\t\t\t\t{0}ns", (watch.Elapsed.TotalSeconds / 10.0).ToString()));
watch.Reset();
watch.Start();
for (int i = 100000000; --i != 0; )
res = Vector3.Add(res, a);
watch.Stop();
res += res; // To make sure the whole for-loop isn't optimized-out
Trace.WriteLine(String.Format("res = Vector3.Add(a, b)\t\t\t{0}ns", (watch.Elapsed.TotalSeconds / 10.0).ToString()));
res = Vector3.Zero;
watch.Reset();
watch.Start();
for (int i = 100000000; --i != 0; )
res = res + a;
watch.Stop();
res += res; // To make sure the whole for-loop isn't optimized-out
Trace.WriteLine(String.Format("res = a + b\t\t\t\t\t{0}ns", (watch.Elapsed.TotalSeconds / 10.0).ToString()));
watch.Reset();
watch.Start();
for (int i = 100000000; --i != 0; )
Vector3.Add(ref res, ref a, out res);
watch.Stop();
res += res; // To make sure the whole for-loop isn't optimized-out
Trace.WriteLine(String.Format("Vector3.Add(ref a, ref b, out res)\t{0}ns", (watch.Elapsed.TotalSeconds / 10.0).ToString()));
*/
/*
a = Vector3.UnitX;
b = Vector3.UnitY;
res = Vector3.Add(ref a, ref b);
Trace.WriteLine(res.ToString());
a = Vector3.UnitX;
b = Vector3.UnitY;
Vector3.Add(a, b, out res);
Trace.WriteLine(res.ToString());
Vector2Im q = new Vector2(0.0f, 1.0f);
Vector2Im p = new Vector2(2.0f, 3.0f);
Vector2Im s = Vector2.Add(p, q);
p = s + q;
*/
}
static Vector3 pos = new Vector3();
static Vector3 Pos
{
get { return pos; }
set { pos = value; }
}
}
}