Skip to content

Commit 1bf53fd

Browse files
committed
feat: refactor union types
1 parent 2108ee4 commit 1bf53fd

File tree

11 files changed

+415
-157
lines changed

11 files changed

+415
-157
lines changed

.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,12 @@ dotnet_naming_style.begins_with_i.required_suffix =
228228
dotnet_naming_style.begins_with_i.word_separator =
229229
dotnet_naming_style.begins_with_i.capitalization = pascal_case
230230
csharp_style_prefer_primary_constructors = true:suggestion
231+
csharp_prefer_system_threading_lock = true:suggestion
231232

232233
[*.{cs,vb}]
233234
dotnet_style_operator_placement_when_wrapping = beginning_of_line
234235
tab_width = 4
236+
indent_style = tab
235237
indent_size = 4
236238
end_of_line = crlf
237239
dotnet_style_coalesce_expression = true:warning

F1Game.UDP.Benchamrks/F1Game.UDP.Benchmarks.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFrameworks>net8.0</TargetFrameworks>
5+
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
<IsPackable>false</IsPackable>
9+
<LangVersion>latest</LangVersion>
910
</PropertyGroup>
1011

1112
<ItemGroup>

F1Game.UDP.Benchamrks/Program.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
using BenchmarkDotNet.Running;
55

66
var config = DefaultConfig.Instance
7-
.AddJob(Job.Default.WithId("NET8").WithRuntime(CoreRuntime.Core80));
7+
.AddJob(Job.Default.WithId("NET8").WithRuntime(CoreRuntime.Core80))
8+
.AddJob(Job.Default.WithId("NET9").WithRuntime(CoreRuntime.Core90));
89

910
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly)
1011
.Run(args, config);

F1Game.UDP.Benchamrks/ThirdPartyComparisonBenchmark.cs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ public Packet ReadF1Simracing()
7777

7878
static void SetupCarTelemetryPacket(byte[] data, Random random)
7979
{
80-
var packet = data.ToPacket().CarTelemetryDataPacket;
80+
if (!data.ToPacket().TryGetCarTelemetryDataPacket(out var packet))
81+
return;
82+
8183
var updatedPacket = packet with
8284
{
8385
CarTelemetryData = packet.CarTelemetryData.AsEnumerable().Select(x => x with
@@ -93,7 +95,9 @@ static void SetupCarTelemetryPacket(byte[] data, Random random)
9395

9496
static void SetupCarStatusPacket(byte[] data, Random random)
9597
{
96-
var packet = data.ToPacket().CarStatusDataPacket;
98+
if (!data.ToPacket().TryGetCarStatusDataPacket(out var packet))
99+
return;
100+
97101
var updatedPacket = packet with
98102
{
99103
CarStatusData = packet.CarStatusData.AsEnumerable().Select(x => x with
@@ -113,7 +117,9 @@ static void SetupEventPacket(byte[] data)
113117

114118
static void SetupSessionPacket(byte[] data, Random random)
115119
{
116-
var packet = data.ToPacket().SessionDataPacket;
120+
if (!data.ToPacket().TryGetSessionDataPacket(out var packet))
121+
return;
122+
117123
var updatedPacket = packet with
118124
{
119125
AirTemperature = (sbyte)random.Next(127),

F1Game.UDP.Tests/F1Game.UDP.Tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net8.0</TargetFramework>
4+
<TargetFrameworks>net8.0;net9.0</TargetFrameworks>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
<IsPackable>false</IsPackable>

F1Game.UDP.Tests/PacketReaderFixture.cs

Lines changed: 50 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
using F1Game.UDP.Internal;
88
using F1Game.UDP.Packets;
99

10+
using AwesomeAssertions.Equivalency;
11+
1012
namespace F1Game.UDP.Tests;
1113

1214
[FixtureLifeCycle(LifeCycle.InstancePerTestCase)]
@@ -75,9 +77,9 @@ public void ReadCarDamageDataPacket()
7577
var writer = new BytesWriter(bytes);
7678
writer.Write(packet);
7779

78-
bytes.ToPacket().Should().BeEquivalentTo(packet);
79-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
80-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
80+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
81+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
82+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
8183
}
8284

8385
[Test]
@@ -91,9 +93,9 @@ public void ReadCarSetupDataPacket()
9193
var writer = new BytesWriter(bytes);
9294
writer.Write(packet);
9395

94-
bytes.ToPacket().Should().BeEquivalentTo(packet);
95-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
96-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
96+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
97+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
98+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
9799
}
98100

99101
[Test]
@@ -107,9 +109,9 @@ public void ReadCarStatusDataPacket()
107109
var writer = new BytesWriter(bytes);
108110
writer.Write(packet);
109111

110-
bytes.ToPacket().Should().BeEquivalentTo(packet);
111-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
112-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
112+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
113+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
114+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
113115
}
114116

115117
[Test]
@@ -123,9 +125,9 @@ public void ReadCarTelemetryDataPacket()
123125
var writer = new BytesWriter(bytes);
124126
writer.Write(packet);
125127

126-
bytes.ToPacket().Should().BeEquivalentTo(packet);
127-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
128-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
128+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
129+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
130+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
129131
}
130132

131133
[TestCase(EventType.ButtonStatus)]
@@ -178,9 +180,9 @@ public void ReadEventDataPacket(EventType eventType)
178180
var writer = new BytesWriter(bytes);
179181
writer.Write(packet);
180182

181-
bytes.ToPacket().Should().BeEquivalentTo(packet);
182-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
183-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
183+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
184+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
185+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
184186
}
185187

186188
[Test]
@@ -201,9 +203,9 @@ public void ReadFinalClassificationDataPacket()
201203
var writer = new BytesWriter(bytes);
202204
writer.Write(packet);
203205

204-
bytes.ToPacket().Should().BeEquivalentTo(packet);
205-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
206-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
206+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
207+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
208+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
207209
}
208210

209211
[Test]
@@ -217,9 +219,9 @@ public void ReadLapDataPacket()
217219
var writer = new BytesWriter(bytes);
218220
writer.Write(packet);
219221

220-
bytes.ToPacket().Should().BeEquivalentTo(packet);
221-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
222-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
222+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
223+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
224+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
223225
}
224226

225227
[Test]
@@ -238,9 +240,9 @@ public void ReadLobbyInfoDataPacket()
238240
var writer = new BytesWriter(bytes);
239241
writer.Write(packet);
240242

241-
bytes.ToPacket().Should().BeEquivalentTo(packet);
242-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
243-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
243+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
244+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
245+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
244246
}
245247

246248
[Test]
@@ -254,9 +256,9 @@ public void ReadMotionDataPacket()
254256
var writer = new BytesWriter(bytes);
255257
writer.Write(packet);
256258

257-
bytes.ToPacket().Should().BeEquivalentTo(packet);
258-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
259-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
259+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
260+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
261+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
260262
}
261263

262264
[Test]
@@ -269,9 +271,9 @@ public void ReadMotionExDataPacket()
269271
var writer = new BytesWriter(bytes);
270272
writer.Write(packet);
271273

272-
bytes.ToPacket().Should().BeEquivalentTo(packet);
273-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
274-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
274+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
275+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
276+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
275277
}
276278

277279
[Test]
@@ -290,9 +292,9 @@ public void ReadParticipantsDataPacket()
290292
var writer = new BytesWriter(bytes);
291293
writer.Write(packet);
292294

293-
bytes.ToPacket().Should().BeEquivalentTo(packet);
294-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
295-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
295+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
296+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
297+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
296298
}
297299

298300
[Test]
@@ -308,9 +310,9 @@ public void ReadSessionDataPacket()
308310
var writer = new BytesWriter(bytes);
309311
writer.Write(packet);
310312

311-
bytes.ToPacket().Should().BeEquivalentTo(packet);
312-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
313-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
313+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
314+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
315+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
314316
}
315317

316318
[Test]
@@ -325,9 +327,9 @@ public void ReadSessionHistoryDataPacket()
325327
var writer = new BytesWriter(bytes);
326328
writer.Write(packet);
327329

328-
bytes.ToPacket().Should().BeEquivalentTo(packet);
329-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
330-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
330+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
331+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
332+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
331333
}
332334

333335
[Test]
@@ -341,9 +343,9 @@ public void ReadTyreSetsDataPacket()
341343
var writer = new BytesWriter(bytes);
342344
writer.Write(packet);
343345

344-
bytes.ToPacket().Should().BeEquivalentTo(packet);
345-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
346-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
346+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
347+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
348+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
347349
}
348350

349351
[Test]
@@ -355,9 +357,9 @@ public void ReadTimeTrialDataPacket()
355357
var writer = new BytesWriter(bytes);
356358
writer.Write(packet);
357359

358-
bytes.ToPacket().Should().BeEquivalentTo(packet);
359-
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet);
360-
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet);
360+
bytes.ToPacket().Should().BeEquivalentTo(packet, Configure);
361+
bytes.ToPacketWithReader().Should().BeEquivalentTo(packet, Configure);
362+
bytes.ToPacketWithMarshal().Should().BeEquivalentTo(packet, Configure);
361363
}
362364

363365
IPostprocessComposer<T> BuildPacket<T>() where T : IHaveHeader, new()
@@ -388,4 +390,7 @@ public void ReadTimeTrialDataPacket()
388390
return fixture.Build<T>()
389391
.With(x => x.Header, header);
390392
}
393+
394+
static EquivalencyOptions<UnionPacket> Configure(EquivalencyOptions<UnionPacket> options)
395+
=> options.IncludingInternalFields();
391396
}

0 commit comments

Comments
 (0)