Skip to content

Commit 7b1aeb8

Browse files
add: gen shapes for parsable objs & more math utils
1 parent 59f4add commit 7b1aeb8

12 files changed

Lines changed: 348 additions & 98 deletions

File tree

src/AridityTeam.Ascorbic.Tests/Mathematics/Vector2DTests.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,82 +9,82 @@ public class Vector2DTests
99
[Fact]
1010
public void Vector2D_Addition_Works()
1111
{
12-
var v1 = new Vector2D(1, 2);
13-
var v2 = new Vector2D(3, 4);
12+
var v1 = new Vector2(1, 2);
13+
var v2 = new Vector2(3, 4);
1414
var result = v1 + v2;
15-
Assert.Equal(new Vector2D(4, 6), result);
15+
Assert.Equal(new Vector2(4, 6), result);
1616
}
1717

1818
[Fact]
1919
public void Vector2D_Subtraction_Works()
2020
{
21-
var v1 = new Vector2D(5, 7);
22-
var v2 = new Vector2D(2, 3);
21+
var v1 = new Vector2(5, 7);
22+
var v2 = new Vector2(2, 3);
2323
var result = v1 - v2;
24-
Assert.Equal(new Vector2D(3, 4), result);
24+
Assert.Equal(new Vector2(3, 4), result);
2525
}
2626

2727
[Fact]
2828
public void Vector2D_ScalarMultiplication_Works()
2929
{
30-
var v = new Vector2D(2, 3);
30+
var v = new Vector2(2, 3);
3131
var result = v * 2;
32-
Assert.Equal(new Vector2D(4, 6), result);
32+
Assert.Equal(new Vector2(4, 6), result);
3333
}
3434

3535
[Fact]
3636
public void Vector2D_ScalarDivision_Works()
3737
{
38-
var v = new Vector2D(4, 6);
38+
var v = new Vector2(4, 6);
3939
var result = v / 2;
40-
Assert.Equal(new Vector2D(2, 3), result);
40+
Assert.Equal(new Vector2(2, 3), result);
4141
}
4242

4343
[Fact]
4444
public void Vector2D_Negation_Works()
4545
{
46-
var v = new Vector2D(2, -3);
46+
var v = new Vector2(2, -3);
4747
var result = -v;
48-
Assert.Equal(new Vector2D(-2, 3), result);
48+
Assert.Equal(new Vector2(-2, 3), result);
4949
}
5050

5151
[Fact]
5252
public void Vector2D_Length_Works()
5353
{
54-
var v = new Vector2D(3, 4);
54+
var v = new Vector2(3, 4);
5555
Assert.Equal(5, v.Length, 5);
5656
Assert.Equal(25, v.LengthSquared, 5);
5757
}
5858

5959
[Fact]
6060
public void Vector2D_Normalized_Works()
6161
{
62-
var v = new Vector2D(3, 4);
62+
var v = new Vector2(3, 4);
6363
var normalized = v.Normalized;
6464
Assert.Equal(1, normalized.Length, 5);
6565
}
6666

6767
[Fact]
6868
public void Vector2D_DotProduct_Works()
6969
{
70-
var v1 = new Vector2D(1, 2);
71-
var v2 = new Vector2D(3, 4);
70+
var v1 = new Vector2(1, 2);
71+
var v2 = new Vector2(3, 4);
7272
Assert.Equal(11, v1.Dot(v2));
7373
}
7474

7575
[Fact]
7676
public void Vector2D_DistanceTo_Works()
7777
{
78-
var v1 = new Vector2D(1, 2);
79-
var v2 = new Vector2D(4, 6);
78+
var v1 = new Vector2(1, 2);
79+
var v2 = new Vector2(4, 6);
8080
Assert.Equal(5, v1.DistanceTo(v2), 5);
8181
}
8282

8383
[Fact]
8484
public void Vector2D_Constants_Works()
8585
{
86-
Assert.Equal(new Vector2D(0, 0), Vector2D.Zero);
87-
Assert.Equal(new Vector2D(1, 1), Vector2D.One);
86+
Assert.Equal(new Vector2(0, 0), Vector2.Zero);
87+
Assert.Equal(new Vector2(1, 1), Vector2.One);
8888
}
8989
}
9090
}

src/AridityTeam.Ascorbic.Tests/Mathematics/Vector3DTests.cs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,44 @@ public class Vector3DTests
99
[Fact]
1010
public void Vector3D_Addition_Works()
1111
{
12-
var v1 = new Vector3D(1, 2, 3);
13-
var v2 = new Vector3D(4, 5, 6);
14-
Assert.Equal(new Vector3D(5, 7, 9), v1 + v2);
12+
var v1 = new Vector3(1, 2, 3);
13+
var v2 = new Vector3(4, 5, 6);
14+
Assert.Equal(new Vector3(5, 7, 9), v1 + v2);
1515
}
1616

1717
[Fact]
1818
public void Vector3D_Subtraction_Works()
1919
{
20-
var v1 = new Vector3D(5, 7, 9);
21-
var v2 = new Vector3D(1, 2, 3);
22-
Assert.Equal(new Vector3D(4, 5, 6), v1 - v2);
20+
var v1 = new Vector3(5, 7, 9);
21+
var v2 = new Vector3(1, 2, 3);
22+
Assert.Equal(new Vector3(4, 5, 6), v1 - v2);
2323
}
2424

2525
[Fact]
2626
public void Vector3D_ScalarMultiplication_Works()
2727
{
28-
var v = new Vector3D(1, 2, 3);
29-
Assert.Equal(new Vector3D(2, 4, 6), v * 2);
28+
var v = new Vector3(1, 2, 3);
29+
Assert.Equal(new Vector3(2, 4, 6), v * 2);
3030
}
3131

3232
[Fact]
3333
public void Vector3D_ScalarDivision_Works()
3434
{
35-
var v = new Vector3D(2, 4, 6);
36-
Assert.Equal(new Vector3D(1, 2, 3), v / 2);
35+
var v = new Vector3(2, 4, 6);
36+
Assert.Equal(new Vector3(1, 2, 3), v / 2);
3737
}
3838

3939
[Fact]
4040
public void Vector3D_Negation_Works()
4141
{
42-
var v = new Vector3D(1, -2, 3);
43-
Assert.Equal(new Vector3D(-1, 2, -3), -v);
42+
var v = new Vector3(1, -2, 3);
43+
Assert.Equal(new Vector3(-1, 2, -3), -v);
4444
}
4545

4646
[Fact]
4747
public void Vector3D_Length_Works()
4848
{
49-
var v = new Vector3D(2, 3, 6);
49+
var v = new Vector3(2, 3, 6);
5050
var expected = Math.Sqrt(4 + 9 + 36); // sqrt(49) = 7
5151
Assert.Equal(expected, v.Length, 5);
5252
Assert.Equal(49, v.LengthSquared, 5);
@@ -55,43 +55,43 @@ public void Vector3D_Length_Works()
5555
[Fact]
5656
public void Vector3D_Normalized_Works()
5757
{
58-
var v = new Vector3D(1, 2, 2);
58+
var v = new Vector3(1, 2, 2);
5959
var normalized = v.Normalized;
6060
Assert.Equal(1, normalized.Length, 5);
6161
}
6262

6363
[Fact]
6464
public void Vector3D_DotProduct_Works()
6565
{
66-
var v1 = new Vector3D(1, 2, 3);
67-
var v2 = new Vector3D(4, 5, 6);
66+
var v1 = new Vector3(1, 2, 3);
67+
var v2 = new Vector3(4, 5, 6);
6868
Assert.Equal(32, v1.Dot(v2));
6969
}
7070

7171
[Fact]
7272
public void Vector3D_CrossProduct_Works()
7373
{
74-
var v1 = new Vector3D(1, 0, 0);
75-
var v2 = new Vector3D(0, 1, 0);
76-
Assert.Equal(new Vector3D(0, 0, 1), v1.Cross(v2));
74+
var v1 = new Vector3(1, 0, 0);
75+
var v2 = new Vector3(0, 1, 0);
76+
Assert.Equal(new Vector3(0, 0, 1), v1.Cross(v2));
7777
}
7878

7979
[Fact]
8080
public void Vector3D_DistanceTo_Works()
8181
{
82-
var v1 = new Vector3D(1, 2, 3);
83-
var v2 = new Vector3D(4, 6, 3);
82+
var v1 = new Vector3(1, 2, 3);
83+
var v2 = new Vector3(4, 6, 3);
8484
Assert.Equal(5, v1.DistanceTo(v2), 5);
8585
}
8686

8787
[Fact]
8888
public void Vector3D_Constants_Works()
8989
{
90-
Assert.Equal(new Vector3D(0, 0, 0), Vector3D.Zero);
91-
Assert.Equal(new Vector3D(1, 1, 1), Vector3D.One);
92-
Assert.Equal(new Vector3D(0, 1, 0), Vector3D.Up);
93-
Assert.Equal(new Vector3D(0, 0, 1), Vector3D.Forward);
94-
Assert.Equal(new Vector3D(1, 0, 0), Vector3D.Right);
90+
Assert.Equal(new Vector3(0, 0, 0), Vector3.Zero);
91+
Assert.Equal(new Vector3(1, 1, 1), Vector3.One);
92+
Assert.Equal(new Vector3(0, 1, 0), Vector3.Up);
93+
Assert.Equal(new Vector3(0, 0, 1), Vector3.Forward);
94+
Assert.Equal(new Vector3(1, 0, 0), Vector3.Right);
9595
}
9696
}
9797
}

src/AridityTeam.Ascorbic/AridityTeam.Ascorbic.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@
4646
- Addition: AridityTeam.Diagnostics.DiagnosticScope
4747
- Addition: AridityTeam.Diagnostics.DiagnosticSample
4848
- Addition: Threading utilities (AridityTeam.Threading namespace)
49+
- Addition: More mathematical utilities
50+
- Addition: Generated shapes for serializable objects using PolyType
51+
- Modified: Renamed "Vector2D" to "Vector2"
52+
- Modified: Renamed "Vector3D" to "Vector3"
4953
- Modified: Moved Git-related utilities from "AridityTeam.Util" to "AridityTeam.Util.Git"
5054
- Modified: Renamed "Git" to "GitClient"
5155
- Removed: Old AridityTeam.Diagnostics utilties

src/AridityTeam.Ascorbic/Diagnostics/DiagnosticSample.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
*/
2121

2222
using System;
23+
using System.Runtime.Serialization;
2324

2425
using PolyType;
2526

@@ -37,13 +38,25 @@ namespace AridityTeam.Diagnostics
3738
/// A collection of integers that represent the amount of times that
3839
/// the garbage collection has occurred.
3940
/// </param>
41+
[Serializable]
4042
[GenerateShape]
4143
public partial record DiagnosticSample(
44+
[property: DataMember]
4245
string ScopeName,
46+
47+
[property: DataMember]
4348
TimeSpan Elapsed,
49+
50+
[property: DataMember]
4451
TimeSpan CpuTime,
52+
53+
[property: DataMember]
4554
long AllocatedBytes,
55+
56+
[property: DataMember]
4657
long WorkingSetDelta,
58+
59+
[property: DataMember]
4760
int[] GcCollections
4861
);
4962
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
/*
2+
* Copyright (c) 2025 The Aridity Team
3+
* Permission is hereby granted, free of charge, to any person obtaining a copy
4+
* of this software and associated documentation files (the "Software"), to deal
5+
* in the Software without restriction, including without limitation the rights
6+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
7+
* copies of the Software, and to permit persons to whom the Software is
8+
* furnished to do so, subject to the following conditions:
9+
*
10+
* The above copyright notice and this permission notice shall be included in all
11+
* copies or substantial portions of the Software.
12+
*
13+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19+
* SOFTWARE.
20+
*/
21+
22+
using System;
23+
using System.Runtime.Serialization;
24+
25+
using PolyType;
26+
27+
namespace AridityTeam.Mathematics
28+
{
29+
/// <summary>
30+
/// Represents an angle in degrees, with conversion to/from radians.
31+
/// </summary>
32+
[GenerateShape]
33+
[Serializable]
34+
public partial struct Angle(double degrees)
35+
{
36+
/// <summary>The angle in degrees.</summary>
37+
[DataMember]
38+
public double Degrees = degrees;
39+
40+
/// <summary>Gets or sets the angle in radians.</summary>
41+
[DataMember]
42+
public double Radians
43+
{
44+
readonly get => MathUtil.ToRadians(Degrees);
45+
set => Degrees = MathUtil.ToDegrees(value);
46+
}
47+
48+
/// <summary>Creates an angle from radians.</summary>
49+
/// <param name="radians">Angle in radians.</param>
50+
/// <returns>Angle in degrees.</returns>
51+
public static Angle FromRadians(double radians) => new(MathUtil.ToDegrees(radians));
52+
53+
/// <summary>Returns a string representation of the angle in degrees.</summary>
54+
public override readonly string ToString() => $"{Degrees}°";
55+
}
56+
}

src/AridityTeam.Ascorbic/Mathematics/MathUtil.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,12 @@ namespace AridityTeam.Mathematics
3030
/// </summary>
3131
public static class MathUtil
3232
{
33+
/// <summary>Degrees to radians conversion factor.</summary>
34+
public const double Deg2Rad = Math.PI / 180.0;
35+
36+
/// <summary>Radians to degrees conversion factor.</summary>
37+
public const double Rad2Deg = 180.0 / Math.PI;
38+
3339
#if NET472_OR_GREATER
3440
/// <summary>
3541
/// Clamps an integer value between a minimum and maximum value.
@@ -168,5 +174,19 @@ public static long GetBinaryLogBase(long number)
168174
return number == (1 << num1) ? num1 : throw new ArgumentException(
169175
PrivateErrorHelpers.Format(SR.Math_TheNumberIsNotPow2, number));
170176
}
177+
178+
/// <summary>
179+
/// Converts degrees to radians.
180+
/// </summary>
181+
/// <param name="degrees">Angle in degrees.</param>
182+
/// <returns>Angle in radians.</returns>
183+
public static double ToRadians(double degrees) => degrees * Deg2Rad;
184+
185+
/// <summary>
186+
/// Converts radians to degrees.
187+
/// </summary>
188+
/// <param name="radians">Angle in radians.</param>
189+
/// <returns>Angle in degrees.</returns>
190+
public static double ToDegrees(double radians) => radians * Rad2Deg;
171191
}
172192
}

0 commit comments

Comments
 (0)