Skip to content

Commit f2d369c

Browse files
committed
ReferenceEquals tests
1 parent bf7653c commit f2d369c

19 files changed

Lines changed: 373 additions & 213 deletions

test/Soenneker.Gen.EnumValues.Tests/Benchmarks/EnumValuesListBenchmark.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public class EnumValuesListBenchmark
1010
[Benchmark(Baseline = true)]
1111
public int GenEnumValues_Small()
1212
{
13-
return ColorCode.List.Count;
13+
return Enums.ColorCode.List.Count;
1414
}
1515

1616
[Benchmark]

test/Soenneker.Gen.EnumValues.Tests/Benchmarks/SerializationBenchmark.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ namespace Soenneker.Gen.EnumValues.Tests.Benchmarks;
88
[SimpleJob]
99
public class SerializationBenchmark
1010
{
11-
private ColorCode _genValue = null!;
11+
private Enums.ColorCode _genValue = null!;
1212
private ColorCodeIntellenum _intellenumValue = null!;
1313
private ColorCodeSmartEnum _smartEnumValue = null!;
1414
private JsonSerializerOptions _stjOptions = null!;
1515

1616
[GlobalSetup]
1717
public void Setup()
1818
{
19-
_genValue = ColorCode.Red;
19+
_genValue = Enums.ColorCode.Red;
2020
_intellenumValue = ColorCodeIntellenum.Red;
2121
_smartEnumValue = ColorCodeSmartEnum.Red;
2222
_stjOptions = new JsonSerializerOptions();
@@ -41,9 +41,9 @@ public string SmartEnum_SystemTextJson_Serialize()
4141
}
4242

4343
[Benchmark]
44-
public ColorCode GenEnumValues_SystemTextJson_Deserialize()
44+
public Enums.ColorCode GenEnumValues_SystemTextJson_Deserialize()
4545
{
46-
return System.Text.Json.JsonSerializer.Deserialize<ColorCode>("\"R\"", _stjOptions)!;
46+
return System.Text.Json.JsonSerializer.Deserialize<Enums.ColorCode>("\"R\"", _stjOptions)!;
4747
}
4848

4949
[Benchmark]

test/Soenneker.Gen.EnumValues.Tests/Benchmarks/TryFromNameBenchmark.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ public class TryFromNameBenchmark
1111
private readonly string _miss = "Unknown";
1212

1313
[Benchmark(Baseline = true)]
14-
public (ColorCode, ColorCode) TryFromName_String_Known()
14+
public (Enums.ColorCode, Enums.ColorCode) TryFromName_String_Known()
1515
{
16-
ColorCode.TryFromName(_red, out ColorCode r);
17-
ColorCode.TryFromName(_blue, out ColorCode b);
16+
Enums.ColorCode.TryFromName(_red, out Enums.ColorCode r);
17+
Enums.ColorCode.TryFromName(_blue, out Enums.ColorCode b);
1818
return (r, b);
1919
}
2020

@@ -37,7 +37,7 @@ public class TryFromNameBenchmark
3737
[Benchmark]
3838
public bool GenEnumValues_Miss()
3939
{
40-
return ColorCode.TryFromName(_miss, out _);
40+
return Enums.ColorCode.TryFromName(_miss, out _);
4141
}
4242

4343
[Benchmark]

test/Soenneker.Gen.EnumValues.Tests/Benchmarks/TryFromValueBenchmark.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ public class TryFromValueBenchmark
1111
private readonly string _miss = "X";
1212

1313
[Benchmark(Baseline = true)]
14-
public (ColorCode, ColorCode) TryFromValue_String_Known()
14+
public (Enums.ColorCode, Enums.ColorCode) TryFromValue_String_Known()
1515
{
16-
ColorCode.TryFromValue(_r, out ColorCode r);
17-
ColorCode.TryFromValue(_b, out ColorCode b);
16+
Enums.ColorCode.TryFromValue(_r, out Enums.ColorCode r);
17+
Enums.ColorCode.TryFromValue(_b, out Enums.ColorCode b);
1818
return (r, b);
1919
}
2020

@@ -37,7 +37,7 @@ public class TryFromValueBenchmark
3737
[Benchmark]
3838
public bool GenEnumValues_Miss()
3939
{
40-
return ColorCode.TryFromValue(_miss, out _);
40+
return Enums.ColorCode.TryFromValue(_miss, out _);
4141
}
4242

4343
[Benchmark]
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Text.Json;
4+
using AwesomeAssertions;
5+
using Soenneker.Gen.EnumValues.Tests.Enums;
6+
using Xunit;
7+
8+
namespace Soenneker.Gen.EnumValues.Tests;
9+
10+
public sealed class ColorCodeReferenceTests
11+
{
12+
[Fact]
13+
public void ReferenceEquals_should_work_for_same_static_instance()
14+
{
15+
var blue = ColorCode.Blue;
16+
17+
bool result = ReferenceEquals(blue, ColorCode.Blue);
18+
19+
result.Should().BeTrue();
20+
}
21+
22+
[Fact]
23+
public void ReferenceEquals_should_work_for_two_variables_pointing_to_same_instance()
24+
{
25+
var blue1 = ColorCode.Blue;
26+
var blue2 = blue1;
27+
28+
bool result = ReferenceEquals(blue1, blue2);
29+
30+
result.Should().BeTrue();
31+
}
32+
33+
[Fact]
34+
public void ReferenceEquals_should_be_false_for_different_static_instances()
35+
{
36+
var blue = ColorCode.Blue;
37+
var red = ColorCode.Red;
38+
39+
bool result = ReferenceEquals(blue, red);
40+
41+
result.Should().BeFalse();
42+
}
43+
44+
[Fact]
45+
public void ReferenceEquals_should_be_true_when_pulled_from_collection()
46+
{
47+
var list = new List<ColorCode> { ColorCode.Blue };
48+
49+
ColorCode blueFromList = list[0];
50+
51+
bool result = ReferenceEquals(blueFromList, ColorCode.Blue);
52+
53+
result.Should().BeTrue();
54+
}
55+
56+
[Fact]
57+
public void ReferenceEquals_should_be_true_when_returned_from_method_without_rehydration()
58+
{
59+
ColorCode blue = GetBlue();
60+
61+
bool result = ReferenceEquals(blue, ColorCode.Blue);
62+
63+
result.Should().BeTrue();
64+
}
65+
66+
[Fact]
67+
public void Equals_and_ReferenceEquals_should_both_be_true_for_same_static_instance()
68+
{
69+
var blue1 = ColorCode.Blue;
70+
var blue2 = ColorCode.Blue;
71+
72+
blue1.Equals(blue2).Should().BeTrue();
73+
ReferenceEquals(blue1, blue2).Should().BeTrue();
74+
}
75+
76+
[Fact]
77+
public void Null_reference_comparisons_should_behave_correctly()
78+
{
79+
ColorCode? left = null;
80+
ColorCode? right = null;
81+
82+
ReferenceEquals(left, right).Should().BeTrue();
83+
ReferenceEquals(left, ColorCode.Blue).Should().BeFalse();
84+
ReferenceEquals(ColorCode.Blue, right).Should().BeFalse();
85+
}
86+
87+
[Fact]
88+
public void ReferenceEquals_should_be_true_after_casting_to_object()
89+
{
90+
object blue = ColorCode.Blue;
91+
92+
bool result = ReferenceEquals(blue, ColorCode.Blue);
93+
94+
result.Should().BeTrue();
95+
}
96+
97+
[Fact]
98+
public void Dictionary_lookup_should_return_same_reference_instance()
99+
{
100+
var dict = new Dictionary<string, ColorCode>
101+
{
102+
["blue"] = ColorCode.Blue
103+
};
104+
105+
ColorCode value = dict["blue"];
106+
107+
ReferenceEquals(value, ColorCode.Blue).Should().BeTrue();
108+
}
109+
110+
[Fact]
111+
public void Linq_First_should_return_same_reference_instance()
112+
{
113+
var values = new[] { ColorCode.Red, ColorCode.Blue };
114+
115+
ColorCode result = values.First(x => x == ColorCode.Blue);
116+
117+
ReferenceEquals(result, ColorCode.Blue).Should().BeTrue();
118+
}
119+
120+
[Fact]
121+
public void JsonSerializer_deserialize_should_not_preserve_reference_by_default_for_normal_reference_types()
122+
{
123+
var json = JsonSerializer.Serialize(ColorCode.Blue);
124+
ColorCode? deserialized = JsonSerializer.Deserialize<ColorCode>(json);
125+
126+
deserialized.Should().NotBeNull();
127+
128+
ReferenceEquals(deserialized, ColorCode.Blue).Should().BeTrue();
129+
}
130+
131+
[Fact]
132+
public void JsonSerializer_should_preserve_reference_only_if_custom_converter_rehydrates_static_instance()
133+
{
134+
var json = JsonSerializer.Serialize(ColorCode.Blue);
135+
ColorCode? deserialized = JsonSerializer.Deserialize<ColorCode>(json);
136+
137+
deserialized.Should().NotBeNull();
138+
ReferenceEquals(deserialized, ColorCode.Blue).Should().BeTrue();
139+
}
140+
141+
[Fact]
142+
public void FromName_should_match_reference()
143+
{
144+
var original = ColorCode.Blue;
145+
var clone = ColorCode.FromName("Blue");
146+
147+
ReferenceEquals(original, clone).Should().BeTrue();
148+
149+
// If equality is value-based, this may still be true:
150+
original.Equals(clone).Should().BeTrue();
151+
}
152+
153+
private static ColorCode GetBlue() => ColorCode.Blue;
154+
}

test/Soenneker.Gen.EnumValues.Tests/EnumValuesAdaptTests.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using AwesomeAssertions;
2+
using Soenneker.Gen.EnumValues.Tests.Enums;
23
using Xunit;
34

45
namespace Soenneker.Gen.EnumValues.Tests;
@@ -12,11 +13,11 @@ public EnumValuesAdaptTests(ITestOutputHelper output)
1213
[Fact]
1314
public void Adapt_should_adapt()
1415
{
15-
var testObject1 = new TestObject() { ColorCode = ColorCode.Blue };
16+
var testObject1 = new TestObject() { ColorCode = Enums.ColorCode.Blue };
1617

1718
var testObject2 = testObject1.Adapt<TestObject>();
1819

1920
testObject2.ColorCode.Should()
20-
.Be(ColorCode.Blue);
21+
.Be(Enums.ColorCode.Blue);
2122
}
2223
}

0 commit comments

Comments
 (0)