Skip to content

Commit 22c8b68

Browse files
committed
Add Equals test + formatting
1 parent 4d5d25a commit 22c8b68

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

crates/bindings-csharp/BSATN.Codegen/Type.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ public record EnumUse(string Type, string TypeInfo) : TypeUse(Type, TypeInfo)
123123
// We just use `==` here, rather than `.Equals`, because
124124
// C# enums don't provide a `bool Equals(Self other)`, and
125125
// using `.Equals(object other)` allocates, which we want to avoid.
126-
//
126+
//
127127
// We could instead generate custom .Equals for enums -- except that requires
128128
// partial enums, and I'm not sure such things exist.
129129
public override string EqualsStatement(

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

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,8 @@ public partial record BasicEnum
444444
BasicDataClass U,
445445
BasicDataStruct V,
446446
BasicDataRecord W
447-
)> { }
447+
)>
448+
{ }
448449

449450
static readonly Gen<BasicEnum> GenBasicEnum = Gen.SelectMany<int, BasicEnum>(
450451
Gen.Int[0, 7],
@@ -669,6 +670,7 @@ enum Banana
669670
PisangRaja,
670671
}
671672

673+
672674
[Fact]
673675
public static void EnumSerializationWorks()
674676
{
@@ -820,4 +822,37 @@ [new BasicEnum.X(1), null],
820822
);
821823
#pragma warning restore CS8625 // Cannot convert null literal to non-nullable reference type.
822824
}
825+
826+
[Type]
827+
partial struct ContainsEnum
828+
{
829+
public Banana TheBanana;
830+
public int BananaCount;
831+
}
832+
833+
static readonly Gen<(Banana, int)> GenContainsEnum = Gen.Select(Gen.Enum<Banana>(), Gen.Int[0, 3]);
834+
static readonly Gen<((Banana, int), (Banana, int))> GenTwoContainsEnum = Gen.Select(GenContainsEnum, GenContainsEnum);
835+
836+
[Fact]
837+
public static void GeneratedEnumEqualsWorks()
838+
{
839+
GenTwoContainsEnum.Sample(example =>
840+
{
841+
var ((b1, c1), (b2, c2)) = example;
842+
var struct1 = new ContainsEnum { TheBanana = b1, BananaCount = c1 };
843+
var struct2 = new ContainsEnum { TheBanana = b2, BananaCount = c2 };
844+
845+
if ((b1, c1) == (b2, c2))
846+
{
847+
Assert.True(struct1.Equals(struct2));
848+
Assert.Equal(struct1, struct2);
849+
}
850+
else
851+
{
852+
Assert.False(struct1.Equals(struct2));
853+
Assert.NotEqual(struct1, struct2);
854+
}
855+
856+
}, iter: 10_000);
857+
}
823858
}

0 commit comments

Comments
 (0)