Skip to content

Commit eb8e298

Browse files
committed
Add serialization tests
1 parent a3008a8 commit eb8e298

File tree

1 file changed

+58
-1
lines changed
  • crates/bindings-csharp/BSATN.Runtime.Tests

1 file changed

+58
-1
lines changed

crates/bindings-csharp/BSATN.Runtime.Tests/Tests.cs

+58-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ namespace SpacetimeDB;
22

33
using System.Diagnostics.CodeAnalysis;
44
using CsCheck;
5+
using SpacetimeDB.BSATN;
56
using Xunit;
67

78
public static partial class BSATNRuntimeTests
@@ -328,6 +329,29 @@ public void AssertCollisionsLessThan(double fraction)
328329
}
329330
}
330331

332+
static void TestRoundTrip<T, BSATN>(Gen<T> gen, BSATN serializer)
333+
where BSATN : IReadWrite<T>
334+
{
335+
gen.Sample((value) =>
336+
{
337+
var stream = new MemoryStream();
338+
var writer = new BinaryWriter(stream);
339+
serializer.Write(writer, value);
340+
stream.Seek(0, SeekOrigin.Begin);
341+
var reader = new BinaryReader(stream);
342+
var result = serializer.Read(reader);
343+
Assert.Equal(value, result);
344+
}, iter: 10_000);
345+
}
346+
347+
[Fact]
348+
public static void GeneratedProductRoundTrip()
349+
{
350+
TestRoundTrip(GenBasic.Select(value => new BasicDataClass(value)), new BasicDataClass.BSATN());
351+
TestRoundTrip(GenBasic.Select(value => new BasicDataRecord(value)), new BasicDataRecord.BSATN());
352+
TestRoundTrip(GenBasic.Select(value => new BasicDataStruct(value)), new BasicDataStruct.BSATN());
353+
}
354+
331355
[Fact]
332356
public static void GeneratedProductEqualsWorks()
333357
{
@@ -408,7 +432,8 @@ public partial record BasicEnum
408432
BasicDataClass U,
409433
BasicDataStruct V,
410434
BasicDataRecord W
411-
)> { }
435+
)>
436+
{ }
412437

413438
static readonly Gen<BasicEnum> GenBasicEnum = Gen.SelectMany<int, BasicEnum>(
414439
Gen.Int[0, 7],
@@ -432,6 +457,12 @@ BasicDataRecord W
432457
(e1, e2) => (e1, e2)
433458
);
434459

460+
[Fact]
461+
public static void GeneratedSumRoundTrip()
462+
{
463+
TestRoundTrip(GenBasicEnum, new BasicEnum.BSATN());
464+
}
465+
435466
[Fact]
436467
public static void GeneratedSumEqualsWorks()
437468
{
@@ -500,6 +531,12 @@ public ContainsList(List<BasicEnum?>? theList)
500531
(e1, e2) => (e1, e2)
501532
);
502533

534+
[Fact]
535+
public static void GeneratedListRoundTrip()
536+
{
537+
TestRoundTrip(GenContainsList, new ContainsList.BSATN());
538+
}
539+
503540
[Fact]
504541
public static void GeneratedListEqualsWorks()
505542
{
@@ -550,6 +587,24 @@ public ContainsNestedList(List<BasicEnum[][]> theList)
550587
TheList = theList;
551588
}
552589
}
590+
591+
// For the serialization test, forbid nulls.
592+
static readonly Gen<ContainsNestedList> GenContainsNestedListNoNulls = GenBasicEnum
593+
.Array[0, 2]
594+
.Array[0, 2]
595+
.List[0, 2]
596+
.Select(list => new ContainsNestedList(list));
597+
598+
599+
[Fact]
600+
public static void GeneratedNestedListRoundTrip()
601+
{
602+
TestRoundTrip(GenContainsNestedListNoNulls, new ContainsNestedList.BSATN());
603+
}
604+
605+
// However, for the equals + hashcode test, throw in some nulls, just to be paranoid.
606+
// The user might have constructed a bad one of these in-memory.
607+
553608
#pragma warning disable CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types.
554609
static readonly Gen<ContainsNestedList> GenContainsNestedList = GenBasicEnum
555610
.Null()
@@ -561,6 +616,7 @@ public ContainsNestedList(List<BasicEnum[][]> theList)
561616
.Select(list => new ContainsNestedList(list));
562617
#pragma warning restore CS8620 // Argument cannot be used for parameter due to differences in the nullability of reference types.
563618

619+
564620
static readonly Gen<(ContainsNestedList e1, ContainsNestedList e2)> GenTwoContainsNestedList =
565621
Gen.Select(GenContainsNestedList, GenContainsNestedList, (e1, e2) => (e1, e2));
566622

@@ -590,6 +646,7 @@ public override int GetHashCode([DisallowNull] IEnumerable<T> obj)
590646
}
591647
}
592648

649+
593650
[Fact]
594651
public static void GeneratedNestedListEqualsWorks()
595652
{

0 commit comments

Comments
 (0)