|
10 | 10 | public class ImmutableWithComplexStructFieldTests |
11 | 11 | { |
12 | 12 | [Fact] |
13 | | - public void AssignVariousValues() |
| 13 | + public void StructWithoutOperatorsAlwaysRecreatesObjectWithChangedValue() |
14 | 14 | { |
15 | 15 | var originalStruct = new SomeStructWithMultipleFields(5, 0); |
16 | 16 | var structWithModifiedSecondField = new SomeStructWithMultipleFields(5, 1); |
17 | 17 | var v1 = ImmutableWithComplexStructField.Create(someStructField: originalStruct); |
18 | 18 | var v2 = v1.With(someStructField: structWithModifiedSecondField); |
19 | 19 | Assert.Equal(structWithModifiedSecondField.Field2, v2.SomeStructField.Field2); |
20 | 20 | } |
| 21 | + |
| 22 | + [Fact] |
| 23 | + public void StructWithoutOperatorsAlwaysRecreatesObjectWithSameValue() |
| 24 | + { |
| 25 | + var s1 = new SomeStructWithMultipleFields(1, 2); |
| 26 | + var v1 = ImmutableWithComplexStructField.Create(someStructField: s1); |
| 27 | + var v2 = v1.With(someStructField: s1); |
| 28 | + |
| 29 | + // The object should have been recreated since equality between the two struct values |
| 30 | + // cannot be determined without their operator defined. |
| 31 | + Assert.NotSame(v1, v2); |
| 32 | + Assert.Equal(s1.Field1, v2.SomeStructField.Field1); |
| 33 | + } |
| 34 | + |
| 35 | + [Fact] |
| 36 | + public void StructWithoutOperatorsAlwaysRecreatesObjectWithoutValue() |
| 37 | + { |
| 38 | + var s1 = new SomeStructWithMultipleFields(1, 2); |
| 39 | + var v1 = ImmutableWithComplexStructField.Create(someStructField: s1); |
| 40 | + var v2 = v1.With(); // omit the struct value altogether |
| 41 | + Assert.Same(v1, v2); |
| 42 | + } |
| 43 | + |
| 44 | + [Fact] |
| 45 | + public void StructWithOperatorsRecreatesObjectWithChangedValue() |
| 46 | + { |
| 47 | + var s12 = new SomeStructWithMultipleFieldsAndOperator(1, 2); |
| 48 | + var s13 = new SomeStructWithMultipleFieldsAndOperator(1, 3); |
| 49 | + var v1 = ImmutableWithComplexStructField.Create(someStructFieldWithOperator: s12); |
| 50 | + var v2 = v1.With(someStructFieldWithOperator: s13); |
| 51 | + Assert.NotSame(v1, v2); |
| 52 | + Assert.Equal(s13.Field2, v2.SomeStructFieldWithOperator.Field2); |
| 53 | + } |
| 54 | + |
| 55 | + [Fact] |
| 56 | + public void StructWithOperatorsRecyclesObjectWithSameValue() |
| 57 | + { |
| 58 | + var s12 = new SomeStructWithMultipleFieldsAndOperator(1, 2); |
| 59 | + var v1 = ImmutableWithComplexStructField.Create(someStructFieldWithOperator: s12); |
| 60 | + var v2 = v1.With(someStructFieldWithOperator: s12); |
| 61 | + Assert.Same(v1, v2); |
| 62 | + } |
21 | 63 | } |
22 | 64 | } |
0 commit comments