Skip to content

Commit 17f19a0

Browse files
committed
Add tests for SFML.System
1 parent 289182b commit 17f19a0

File tree

7 files changed

+878
-1
lines changed

7 files changed

+878
-1
lines changed

.github/workflows/ci.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,15 @@ jobs:
4141
run: dotnet new globaljson --sdk-version ${{ steps.setup-dotnet.outputs.dotnet-version }} --force
4242
- name: Verify SDK Installation
4343
run: dotnet --info
44+
continue-on-error: true
4445

4546
- name: Install SFML.Net Dependencies
4647
run: dotnet restore
4748
- name: Build SFML.Net
4849
run: dotnet build --configuration Release --no-restore
50+
- name: Test SFML.Net
51+
if: matrix.dotnet.name == '.NET 6'
52+
run: dotnet test --configuration Release --no-restore
4953
- name: Pack SFML.Net
5054
run: dotnet pack --configuration Release -o Publish
5155

@@ -58,4 +62,4 @@ jobs:
5862
uses: actions/upload-artifact@v4
5963
with:
6064
name: SFML.Net (${{ matrix.platform.name }} ${{ matrix.dotnet.name }})
61-
path: Publish/SFML.*.*.nupkg
65+
path: Publish/SFML.*.*.nupkg

SFML.sln

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
2121
SFML.CodeStyle.props = SFML.CodeStyle.props
2222
EndProjectSection
2323
EndProject
24+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SFML.System.Test", "test\SFML.System.Test\SFML.System.Test.csproj", "{958AC8B0-2D99-4C65-97C1-2979A090C82D}"
25+
EndProject
26+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{D98B564D-6F79-4429-87C3-ECDDC54F731B}"
27+
EndProject
2428
Global
2529
GlobalSection(SolutionConfigurationPlatforms) = preSolution
2630
Debug|Any CPU = Debug|Any CPU
@@ -91,11 +95,26 @@ Global
9195
{88DD6B5D-3013-4737-A77C-EC2563FCED38}.Release|x64.Build.0 = Release|x64
9296
{88DD6B5D-3013-4737-A77C-EC2563FCED38}.Release|x86.ActiveCfg = Release|x86
9397
{88DD6B5D-3013-4737-A77C-EC2563FCED38}.Release|x86.Build.0 = Release|x86
98+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
99+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|Any CPU.Build.0 = Debug|Any CPU
100+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|x64.ActiveCfg = Debug|x64
101+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|x64.Build.0 = Debug|x64
102+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|x86.ActiveCfg = Debug|x86
103+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Debug|x86.Build.0 = Debug|x86
104+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|Any CPU.ActiveCfg = Release|Any CPU
105+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|Any CPU.Build.0 = Release|Any CPU
106+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|x64.ActiveCfg = Release|x64
107+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|x64.Build.0 = Release|x64
108+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|x86.ActiveCfg = Release|x86
109+
{958AC8B0-2D99-4C65-97C1-2979A090C82D}.Release|x86.Build.0 = Release|x86
94110
EndGlobalSection
95111
GlobalSection(SolutionProperties) = preSolution
96112
HideSolutionNode = FALSE
97113
EndGlobalSection
98114
GlobalSection(ExtensibilityGlobals) = postSolution
99115
SolutionGuid = {384AFDD8-7EEF-462A-B496-B5F71D0EEF1D}
100116
EndGlobalSection
117+
GlobalSection(NestedProjects) = preSolution
118+
{958AC8B0-2D99-4C65-97C1-2979A090C82D} = {D98B564D-6F79-4429-87C3-ECDDC54F731B}
119+
EndGlobalSection
101120
EndGlobal

test/SFML.System.Test/Angle.test.cs

Lines changed: 266 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,266 @@
1+
namespace SFML.System.Test;
2+
3+
public class AngleTests
4+
{
5+
private const float Eps = 1e-5f;
6+
7+
[Fact]
8+
public void Construction()
9+
{
10+
var angle = new Angle();
11+
Assert.Equal(0f, angle.Degrees);
12+
Assert.Equal(0f, angle.Radians);
13+
}
14+
15+
[Fact]
16+
public void WrapSigned_WithZero()
17+
=> Assert.Equal(Angle.Zero, Angle.Zero.WrapSigned());
18+
19+
[Theory]
20+
[InlineData(0, 0)]
21+
[InlineData(1, 1)]
22+
[InlineData(-1, -1)]
23+
[InlineData(90, 90)]
24+
[InlineData(-90, -90)]
25+
[InlineData(180, -180)]
26+
[InlineData(-180, -180)]
27+
[InlineData(360, 0)]
28+
[InlineData(-360, 0)]
29+
[InlineData(720, 0)]
30+
[InlineData(-720, 0)]
31+
public void WrapSigned(float input, float expectedWrap)
32+
=> Assert.Equal(Angle.FromDegrees(expectedWrap).Radians, Angle.FromDegrees(input).WrapSigned().Radians, Eps);
33+
34+
[Fact]
35+
public void WrapUnsigned_WithZero()
36+
=> Assert.Equal(Angle.Zero, Angle.Zero.WrapUnsigned());
37+
38+
[Theory]
39+
[InlineData(0, 0)]
40+
[InlineData(1, 1)]
41+
[InlineData(-1, 359)]
42+
[InlineData(90, 90)]
43+
[InlineData(-90, 270)]
44+
[InlineData(180, 180)]
45+
[InlineData(-180, 180)]
46+
[InlineData(360, 0)]
47+
[InlineData(-360, 0)]
48+
[InlineData(720, 0)]
49+
[InlineData(-720, 0)]
50+
public void WrapUnsigned(float input, float expectedWrap)
51+
=> Assert.Equal(Angle.FromDegrees(expectedWrap).Radians, Angle.FromDegrees(input).WrapUnsigned().Radians, Eps);
52+
53+
[Theory]
54+
[InlineData(15, 0.26179939f)]
55+
[InlineData(1000, 17.453293f)]
56+
[InlineData(-4321, -75.415677f)]
57+
public void Degrees(float degrees, float expectedRadians)
58+
{
59+
var angle = Angle.FromDegrees(degrees);
60+
Assert.Equal(degrees, angle.Degrees, Eps);
61+
Assert.Equal(expectedRadians, angle.Radians, Eps);
62+
}
63+
64+
[Theory]
65+
[InlineData(1, 57.2957795f)]
66+
[InlineData(72, 4125.29612f)]
67+
[InlineData(-200, -11459.1559f)]
68+
public void Radians(float radians, float expectedDegrees)
69+
{
70+
var angle = Angle.FromRadians(radians);
71+
Assert.Equal(radians, angle.Radians, Eps);
72+
Assert.Equal(expectedDegrees, angle.Degrees, Eps);
73+
}
74+
75+
[Fact]
76+
public void Constants()
77+
{
78+
Assert.Equal(0f, Angle.Zero.Degrees);
79+
Assert.Equal(0f, Angle.Zero.Radians);
80+
}
81+
82+
[Fact]
83+
public void OperatorEq()
84+
{
85+
Assert.True(new Angle() == new Angle());
86+
Assert.True(new Angle() == Angle.Zero);
87+
Assert.True(new Angle() == Angle.FromDegrees(0));
88+
Assert.True(new Angle() == Angle.FromRadians(0));
89+
Assert.True(Angle.FromDegrees(0) == Angle.FromRadians(0));
90+
Assert.True(Angle.FromDegrees(15) == Angle.FromDegrees(15));
91+
Assert.True(Angle.FromRadians(15) == Angle.FromRadians(15));
92+
Assert.True(Angle.FromDegrees(360) == Angle.FromDegrees(360));
93+
Assert.True(Angle.FromDegrees(720) == Angle.FromDegrees(720));
94+
}
95+
96+
[Fact]
97+
public void OperatorNotEq()
98+
{
99+
Assert.True(new Angle() != Angle.FromRadians(2));
100+
Assert.True(Angle.FromDegrees(1) != Angle.FromRadians(1));
101+
Assert.True(Angle.FromRadians(0) != Angle.FromRadians(0.1f));
102+
}
103+
104+
[Fact]
105+
public void OperatorLt()
106+
{
107+
Assert.True(Angle.FromRadians(0) < Angle.FromDegrees(0.1f));
108+
Assert.True(Angle.FromDegrees(0) < Angle.FromRadians(0.1f));
109+
Assert.True(Angle.FromRadians(-0.1f) < Angle.FromRadians(0f));
110+
Assert.True(Angle.FromDegrees(-0.1f) < Angle.FromDegrees(0f));
111+
}
112+
113+
[Fact]
114+
public void OperatorGt()
115+
{
116+
Assert.True(Angle.FromRadians(0.1f) > Angle.FromDegrees(0));
117+
Assert.True(Angle.FromDegrees(0.1f) > Angle.FromRadians(0));
118+
Assert.True(Angle.FromRadians(0) > Angle.FromRadians(-0.1f));
119+
Assert.True(Angle.FromDegrees(0) > Angle.FromDegrees(-0.1f));
120+
}
121+
122+
[Fact]
123+
public void OperatorLte()
124+
{
125+
Assert.True(Angle.FromRadians(0) <= Angle.FromDegrees(0.1f));
126+
Assert.True(Angle.FromDegrees(0) <= Angle.FromRadians(0.1f));
127+
Assert.True(Angle.FromRadians(-0.1f) <= Angle.FromRadians(0f));
128+
Assert.True(Angle.FromDegrees(-0.1f) <= Angle.FromDegrees(0f));
129+
130+
Assert.True(new Angle() <= new Angle());
131+
Assert.True(new Angle() <= Angle.Zero);
132+
Assert.True(new Angle() <= Angle.FromDegrees(0));
133+
Assert.True(new Angle() <= Angle.FromRadians(0));
134+
Assert.True(Angle.FromDegrees(0) <= Angle.FromRadians(0));
135+
Assert.True(Angle.FromDegrees(15) <= Angle.FromDegrees(15));
136+
Assert.True(Angle.FromRadians(15) <= Angle.FromRadians(15));
137+
Assert.True(Angle.FromDegrees(360) <= Angle.FromDegrees(360));
138+
Assert.True(Angle.FromDegrees(720) <= Angle.FromDegrees(720));
139+
}
140+
141+
[Fact]
142+
public void OperatorGte()
143+
{
144+
Assert.True(Angle.FromRadians(0.1f) > Angle.FromDegrees(0));
145+
Assert.True(Angle.FromDegrees(0.1f) > Angle.FromRadians(0));
146+
Assert.True(Angle.FromRadians(0) > Angle.FromRadians(-0.1f));
147+
Assert.True(Angle.FromDegrees(0) > Angle.FromDegrees(-0.1f));
148+
149+
Assert.True(new Angle() >= new Angle());
150+
Assert.True(new Angle() >= Angle.Zero);
151+
Assert.True(new Angle() >= Angle.FromDegrees(0));
152+
Assert.True(new Angle() >= Angle.FromRadians(0));
153+
Assert.True(Angle.FromDegrees(0) >= Angle.FromRadians(0));
154+
Assert.True(Angle.FromDegrees(15) >= Angle.FromDegrees(15));
155+
Assert.True(Angle.FromRadians(15) >= Angle.FromRadians(15));
156+
Assert.True(Angle.FromDegrees(360) >= Angle.FromDegrees(360));
157+
Assert.True(Angle.FromDegrees(720) >= Angle.FromDegrees(720));
158+
}
159+
160+
[Fact]
161+
public void OperatorNeg()
162+
{
163+
Assert.Equal(-new Angle(), new Angle());
164+
Assert.Equal(-Angle.FromRadians(-1), Angle.FromRadians(1));
165+
Assert.Equal(-Angle.FromDegrees(15), Angle.FromDegrees(-15));
166+
Assert.Equal(-Angle.FromRadians(1), Angle.FromRadians(-1));
167+
}
168+
169+
[Fact]
170+
public void OperatorAdd()
171+
{
172+
Assert.Equal(new Angle() + new Angle(), new Angle());
173+
Assert.Equal(Angle.Zero + Angle.FromRadians(0.5f), Angle.FromRadians(0.5f));
174+
Assert.Equal(Angle.FromRadians(6) + Angle.FromRadians(0.5f), Angle.FromRadians(6.5f));
175+
Assert.Equal(Angle.FromRadians(10) + Angle.FromRadians(0.5f), Angle.FromRadians(10.5f));
176+
Assert.Equal(Angle.FromDegrees(360) + Angle.FromDegrees(360), Angle.FromDegrees(720));
177+
}
178+
179+
[Fact]
180+
public void OperatorAddAssign()
181+
{
182+
var angle = Angle.FromDegrees(-15);
183+
angle += Angle.FromDegrees(15);
184+
Assert.Equal(Angle.FromDegrees(0).Degrees, angle.Degrees, Eps);
185+
angle += Angle.FromDegrees(10);
186+
Assert.Equal(Angle.FromDegrees(10).Degrees, angle.Degrees, Eps);
187+
}
188+
189+
[Fact]
190+
public void OperatorSub()
191+
{
192+
Assert.Equal(new Angle() - new Angle(), new Angle());
193+
Assert.Equal(Angle.FromRadians(1) - Angle.FromRadians(0.5f), Angle.FromRadians(0.5f));
194+
Assert.Equal(Angle.Zero - Angle.FromRadians(0.5f), Angle.FromRadians(-0.5f));
195+
Assert.Equal(Angle.FromDegrees(900) - Angle.FromDegrees(1), Angle.FromDegrees(899));
196+
}
197+
198+
[Fact]
199+
public void OperatorSubAssign()
200+
{
201+
var angle = Angle.FromDegrees(15);
202+
angle -= Angle.FromDegrees(15);
203+
Assert.Equal(Angle.FromDegrees(0).Degrees, angle.Degrees, Eps);
204+
angle -= Angle.FromDegrees(10);
205+
Assert.Equal(Angle.FromDegrees(-10).Degrees, angle.Degrees, Eps);
206+
}
207+
208+
[Fact]
209+
public void OperatorMul()
210+
{
211+
Assert.Equal(10 * Angle.FromRadians(0), Angle.Zero);
212+
Assert.Equal((2.5f * Angle.FromDegrees(10)).Degrees, Angle.FromDegrees(25).Degrees, Eps);
213+
Assert.Equal((10f * Angle.FromDegrees(100)).Degrees, Angle.FromDegrees(1000).Degrees, Eps);
214+
215+
Assert.Equal(10 * Angle.FromRadians(0), Angle.Zero);
216+
Assert.Equal((2.5f * Angle.FromDegrees(10)).Degrees, Angle.FromDegrees(25).Degrees, Eps);
217+
Assert.Equal((10f * Angle.FromDegrees(100)).Degrees, Angle.FromDegrees(1000).Degrees, Eps);
218+
}
219+
220+
[Fact]
221+
public void OperatorMulAssign()
222+
{
223+
var angle = Angle.FromDegrees(1);
224+
angle *= 10;
225+
Assert.Equal(Angle.FromDegrees(10).Degrees, angle.Degrees, Eps);
226+
}
227+
228+
[Fact]
229+
public void OperatorDiv()
230+
{
231+
Assert.Equal(Angle.Zero / 10, Angle.Zero);
232+
Assert.Equal(Angle.FromDegrees(10) / 2.5f, Angle.FromDegrees(4));
233+
Assert.Equal(Angle.FromRadians(12) / 3, Angle.FromRadians(4));
234+
235+
Assert.Equal(0f, Angle.Zero / Angle.FromDegrees(1));
236+
Assert.Equal(1f, Angle.FromDegrees(10) / Angle.FromDegrees(10));
237+
Assert.Equal(5f, Angle.FromRadians(10) / Angle.FromRadians(2), Eps);
238+
}
239+
240+
[Fact]
241+
public void OperatorDivAssign()
242+
{
243+
var angle = Angle.FromDegrees(60);
244+
angle /= 5;
245+
Assert.Equal(Angle.FromDegrees(12).Degrees, angle.Degrees, Eps);
246+
}
247+
248+
[Fact]
249+
public void OperatorMod()
250+
{
251+
Assert.Equal(Angle.Zero % Angle.FromRadians(0.5f), Angle.Zero);
252+
Assert.Equal(Angle.FromRadians(10) % Angle.FromRadians(1), Angle.FromRadians(0));
253+
Assert.Equal((Angle.FromDegrees(90) % Angle.FromDegrees(30)).Degrees, Angle.FromDegrees(0).Degrees, Eps);
254+
Assert.Equal((Angle.FromDegrees(90) % Angle.FromDegrees(40)).Degrees, Angle.FromDegrees(10).Degrees, Eps);
255+
Assert.Equal((Angle.FromDegrees(-90) % Angle.FromDegrees(30)).Degrees, Angle.FromDegrees(0).Degrees, Eps);
256+
Assert.Equal((Angle.FromDegrees(-90) % Angle.FromDegrees(40)).Degrees, Angle.FromDegrees(30).Degrees, Eps);
257+
}
258+
259+
[Fact]
260+
public void OperatorModAssign()
261+
{
262+
var angle = Angle.FromDegrees(59);
263+
angle %= Angle.FromDegrees(10);
264+
Assert.Equal(Angle.FromDegrees(9).Degrees, angle.Degrees, Eps);
265+
}
266+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>net6.0</TargetFramework>
5+
<ImplicitUsings>enable</ImplicitUsings>
6+
<Nullable>enable</Nullable>
7+
8+
<IsPackable>false</IsPackable>
9+
<IsTestProject>true</IsTestProject>
10+
<Platforms>AnyCPU;x86;x64</Platforms>
11+
</PropertyGroup>
12+
13+
<ItemGroup>
14+
<PackageReference Include="coverlet.collector" Version="6.0.2">
15+
<PrivateAssets>all</PrivateAssets>
16+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
17+
</PackageReference>
18+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
19+
<PackageReference Include="xunit" Version="2.9.0" />
20+
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
21+
<PrivateAssets>all</PrivateAssets>
22+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
23+
</PackageReference>
24+
</ItemGroup>
25+
26+
<ItemGroup>
27+
<ProjectReference Include="..\..\src\SFML.System\SFML.System.csproj" />
28+
</ItemGroup>
29+
30+
<ItemGroup>
31+
<Using Include="Xunit" />
32+
</ItemGroup>
33+
34+
</Project>

0 commit comments

Comments
 (0)