Skip to content

Commit e60042b

Browse files
HurricanKaiPerksey
andauthored
A maths library for Silk.NET (#359)
* Initial commit * gitignore * Exclude Idea folder * Restructure project * Add Operations and Constants * Add Vector2 and Tests * Vector3 * Vector4 * Matrix4x4 * Integrate Matrix4x4 * Plane * Quaternion * Matrix3x2 * Add PublicAPI Tracking * Document Constants * Document remaining Vector2 methods * Add extension methods for converting generic to/from non-generic types * FromSystem -> ToGeneric * Add explicit casts * Add Log * Add Exp * Pow & Abs * Improve Abs with HWIntrinsics * Improve Log with... things * Improve Exp somewhat * Document all the things * Ray2/3D * Circle & Sphere * Cube & Rect * Matrix4x3 * Matrix3x4 * Matrix3x3 * Matrix2x3 * Matrix2x2 & Multiplications * Remove D suffix * I hate matrices * Renames & ctors * Merge Part 2 * Vector * Matrix * Scalar.Inverse<T> * Floor improvement * Abs improvements * Round optimization * Sqrt improvement * Integrate into Solution, Multi-target * Rect -> Rectangle * Update Benchmarks to use System.Math on NetFx4.8 * More improvements * Round * Fix Tables on non-POH platforms * Bounds2/3 * Bounds2 -> Box2 * Bounds3 -> Box3 * Box2 & Box3 APIs * Cube & Rectangle API * Remove Maths solution * Rename folders * Remove unecessary files * Best Serialization effort * Tired * Circle/Sphere * Update API * Vectors AAA * Update API tracking * Remove MS Toolkit dependency * Both net5.0 and netcoreapp3.1 (and netframework4.8) are required for tests * Integrate MathHelper into Scalar * Fix Diameter * 768 * Plane.D -> Plane.Distance * readonly getters * Two more methods marked as readonly * Add .editorconfig * Add source * Reciprocal * Length/Squared to Properties * Extract Vector2 statics * Extract Vector3 statics * Extract Vector4 statics * Extract Plane statics * Extract Matrix4x4 statics * Cleanup rest * Add Indexers * Document more * Fix last warnings * Add VS Test runner * Address some review comments * Move static classes to Ops files Co-authored-by: Dylan Perks <dmp9biz@gmail.com>
0 parents  commit e60042b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+35398
-0
lines changed

src/Maths/.editorconfig

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[*.cs]
2+
max_line_length = 300
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Engines;
5+
6+
namespace Silk.NET.Maths.Benchmark
7+
{
8+
[SimpleJob(RunStrategy.Throughput)]
9+
public class AbsBenchmark
10+
{
11+
[ParamsSource("GenerateNumber")] public float X;
12+
public int XInt;
13+
14+
[GlobalSetup]
15+
public void GlobalSetup()
16+
{
17+
XInt = (int)X;
18+
}
19+
20+
[Benchmark(Baseline = true)]
21+
public float Sys()
22+
{
23+
#if MATHF
24+
return MathF.Abs(X);
25+
#else
26+
return (float)Math.Abs(X);
27+
#endif
28+
}
29+
30+
[Benchmark]
31+
public float SilkFloat()
32+
{
33+
return Scalar.Abs(X);
34+
}
35+
36+
[Benchmark]
37+
public int SilkInt()
38+
{
39+
return Scalar.Abs(XInt);
40+
}
41+
42+
private const int NumbersTested = 1;
43+
private static Random _random = new Random();
44+
public IEnumerable<float> GenerateNumber()
45+
{
46+
for (int i = 0; i < NumbersTested; i++)
47+
yield return (float) _random.NextDouble();
48+
}
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Engines;
5+
6+
namespace Silk.NET.Maths.Benchmark
7+
{
8+
[MemoryDiagnoser]
9+
[SimpleJob(RunStrategy.Throughput)]
10+
public class ExpSmallBenchmark
11+
{
12+
[ParamsSource("GenerateNumber")] public float X;
13+
14+
[Benchmark(Baseline = true)]
15+
public float Sys()
16+
{
17+
#if MATHF
18+
return MathF.Exp(X);
19+
#else
20+
return (float)Math.Exp(X);
21+
#endif
22+
}
23+
24+
[Benchmark]
25+
public float Silk()
26+
{
27+
return Scalar.Exp(X);
28+
}
29+
30+
private const int NumbersTested = 1;
31+
private static Random _random = new Random();
32+
33+
public IEnumerable<float> GenerateNumber()
34+
{
35+
for (int i = 0; i < NumbersTested; i++)
36+
yield return (float) _random.NextDouble();
37+
}
38+
}
39+
40+
[MemoryDiagnoser]
41+
[SimpleJob(RunStrategy.Throughput)]
42+
public class ExpBigBenchmark
43+
{
44+
[ParamsSource("GenerateNumber")] public float X;
45+
46+
[Benchmark(Baseline = true)]
47+
public float Sys()
48+
{
49+
#if MATHF
50+
return MathF.Exp(X);
51+
#else
52+
return (float)Math.Exp(X);
53+
#endif
54+
}
55+
56+
[Benchmark]
57+
public float Silk()
58+
{
59+
return Scalar.Exp(X);
60+
}
61+
62+
private const int NumbersTested = 1;
63+
private static Random _random = new Random();
64+
65+
public IEnumerable<float> GenerateNumber()
66+
{
67+
for (int i = 0; i < NumbersTested; i++)
68+
yield return (float) (_random.NextDouble() * 10) + 10f;
69+
}
70+
}
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Engines;
5+
6+
namespace Silk.NET.Maths.Benchmark
7+
{
8+
[SimpleJob(RunStrategy.Throughput)]
9+
public class FloorBenchmark
10+
{
11+
[ParamsSource("GenerateNumber")] public float X;
12+
public int XInt;
13+
14+
[GlobalSetup]
15+
public void GlobalSetup()
16+
{
17+
XInt = (int)X;
18+
}
19+
20+
[Benchmark(Baseline = true)]
21+
public float Sys()
22+
{
23+
#if MATHF
24+
return MathF.Floor(X);
25+
#else
26+
return (float)Math.Floor(X);
27+
#endif
28+
}
29+
30+
[Benchmark]
31+
public float SilkFloat()
32+
{
33+
return Scalar.Floor(X);
34+
}
35+
36+
[Benchmark]
37+
public int SilkInt()
38+
{
39+
return Scalar.Floor(XInt);
40+
}
41+
42+
private const int NumbersTested = 1;
43+
private static Random _random = new Random();
44+
public IEnumerable<float> GenerateNumber()
45+
{
46+
for (int i = 0; i < NumbersTested; i++)
47+
yield return (float) _random.NextDouble();
48+
}
49+
}
50+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Engines;
5+
6+
namespace Silk.NET.Maths.Benchmark
7+
{
8+
[MemoryDiagnoser]
9+
[SimpleJob(RunStrategy.Throughput)]
10+
public class LogSmallBenchmark
11+
{
12+
[ParamsSource("GenerateNumber")] public float X;
13+
14+
[Benchmark(Baseline = true)]
15+
public float Sys()
16+
{
17+
#if MATHF
18+
return MathF.Log(X);
19+
#else
20+
return (float)Math.Log(X);
21+
#endif
22+
}
23+
24+
[Benchmark]
25+
public float Silk()
26+
{
27+
return Scalar.Log(X);
28+
}
29+
30+
private const int NumbersTested = 1;
31+
private static Random _random = new Random();
32+
33+
public IEnumerable<float> GenerateNumber()
34+
{
35+
for (int i = 0; i < NumbersTested; i++)
36+
yield return (float) _random.NextDouble();
37+
}
38+
}
39+
40+
[MemoryDiagnoser]
41+
[SimpleJob(RunStrategy.Throughput)]
42+
public class LogBigBenchmark
43+
{
44+
[ParamsSource("GenerateNumber")] public float X;
45+
46+
[Benchmark(Baseline = true)]
47+
public float Sys()
48+
{
49+
#if MATHF
50+
return MathF.Log(X);
51+
#else
52+
return (float)Math.Log(X);
53+
#endif
54+
}
55+
56+
[Benchmark]
57+
public float Silk()
58+
{
59+
return Scalar.Log(X);
60+
}
61+
62+
private const int NumbersTested = 1;
63+
private static Random _random = new Random();
64+
65+
public IEnumerable<float> GenerateNumber()
66+
{
67+
for (int i = 0; i < NumbersTested; i++)
68+
yield return (float) (_random.NextDouble() * 1000);
69+
}
70+
}
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using BenchmarkDotNet.Attributes;
4+
using BenchmarkDotNet.Engines;
5+
6+
namespace Silk.NET.Maths.Benchmark
7+
{
8+
[MemoryDiagnoser]
9+
[SimpleJob(RunStrategy.Throughput)]
10+
public class PowSmallBenchmark
11+
{
12+
[ParamsSource("GenerateNumber")] public float X;
13+
[ParamsSource("GenerateNumber")] public float Y;
14+
15+
[Benchmark(Baseline = true)]
16+
public float Sys()
17+
{
18+
#if MATHF
19+
return MathF.Pow(X, Y);
20+
#else
21+
return (float)Math.Pow(X, Y);
22+
#endif
23+
}
24+
25+
[Benchmark]
26+
public float Silk()
27+
{
28+
return Scalar.Pow(X, Y);
29+
}
30+
31+
private const int NumbersTested = 1;
32+
private static Random _random = new Random();
33+
34+
public IEnumerable<float> GenerateNumber()
35+
{
36+
for (int i = 0; i < NumbersTested; i++)
37+
yield return (float) _random.NextDouble();
38+
}
39+
}
40+
41+
[MemoryDiagnoser]
42+
[SimpleJob(RunStrategy.Throughput)]
43+
public class PowBigBenchmark
44+
{
45+
[ParamsSource("GenerateNumber")] public float X;
46+
[ParamsSource("GenerateNumber")] public float Y;
47+
48+
[Benchmark(Baseline = true)]
49+
public float Sys()
50+
{
51+
#if MATHF
52+
return MathF.Pow(X, Y);
53+
#else
54+
return (float)Math.Pow(X, Y);
55+
#endif
56+
}
57+
58+
[Benchmark]
59+
public float Silk()
60+
{
61+
return Scalar.Pow(X, Y);
62+
}
63+
64+
private const int NumbersTested = 1;
65+
private static Random _random = new Random();
66+
67+
public IEnumerable<float> GenerateNumber()
68+
{
69+
for (int i = 0; i < NumbersTested; i++)
70+
yield return (float) (_random.NextDouble() * 10) + 10f;
71+
}
72+
}
73+
74+
[MemoryDiagnoser]
75+
[SimpleJob(RunStrategy.Throughput)]
76+
public class PowIntBenchmark
77+
{
78+
[ParamsSource("GenerateNumber")] public int X;
79+
[ParamsSource("GenerateNumber")] public int Y;
80+
81+
[Benchmark(Baseline = true)]
82+
public float Sys()
83+
{
84+
#if MATHF
85+
return MathF.Pow(X, Y);
86+
#else
87+
return (float)Math.Pow(X, Y);
88+
#endif
89+
}
90+
91+
[Benchmark]
92+
public float SilkFloat()
93+
{
94+
return Scalar.Pow<float>(X, Y);
95+
}
96+
97+
[Benchmark]
98+
public float SilkInt()
99+
{
100+
return Scalar.Pow(X, Y);
101+
}
102+
103+
private const int NumbersTested = 1;
104+
private static Random _random = new Random();
105+
106+
public IEnumerable<int> GenerateNumber()
107+
{
108+
for (int i = 0; i < NumbersTested; i++)
109+
yield return _random.Next(-1000, 1000);
110+
}
111+
}
112+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System.Reflection;
2+
using BenchmarkDotNet.Running;
3+
4+
namespace Silk.NET.Maths.Benchmark
5+
{
6+
public class Program
7+
{
8+
public static void Main(string[] args)
9+
{
10+
BenchmarkSwitcher.FromAssembly(Assembly.GetEntryAssembly()).Run(args);
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)