Skip to content

Commit

Permalink
Merge pull request #44 from diegofrata/deep-equality
Browse files Browse the repository at this point in the history
Fix potential stack-overflow
  • Loading branch information
diegofrata authored Jan 3, 2023
2 parents 8df2a87 + f2a2fb3 commit c5e8fd8
Show file tree
Hide file tree
Showing 45 changed files with 726 additions and 218 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Manager : global::System.IEquatable<Manager>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.BaseEquality.Manager);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Manager? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.BaseEquality.Manager;
return
!ReferenceEquals(other, null) && base.Equals(obj)
base.Equals(other as global::Generator.Equals.Tests.Classes.BaseEquality.Person)
&& global::Generator.Equals.DefaultEqualityComparer<global::System.String>.Default.Equals(this.Department!, other.Department!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Manager? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Person : global::System.IEquatable<Person>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.BaseEquality.Person);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Person? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.BaseEquality.Person;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::System.Int32>.Default.Equals(this.Age!, other.Age!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Person? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Manager : global::System.IEquatable<Manager>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.BaseEquality.Manager);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Manager? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.BaseEquality.Manager;
return
!ReferenceEquals(other, null) && base.Equals(obj)
base.Equals(other as global::Generator.Equals.Tests.Classes.BaseEquality.Person)
&& global::Generator.Equals.DefaultEqualityComparer<global::System.String>.Default.Equals(this.Department!, other.Department!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Manager? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Person : global::System.IEquatable<Person>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.BaseEquality.Person);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Person? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.BaseEquality.Person;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::System.Int32>.Default.Equals(this.Age!, other.Age!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.BaseEquality.Person? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,20 @@ partial class Sample : global::System.IEquatable<Sample>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.CustomEquality.Sample);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.CustomEquality.Sample? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.CustomEquality.Sample;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.Tests.Classes.CustomEquality.Comparer1.Default.Equals(this.Name1!, other.Name1!)
&& global::Generator.Equals.Tests.Classes.CustomEquality.Comparer2.Instance.Equals(this.Name2!, other.Name2!)
&& new global::Generator.Equals.Tests.Classes.CustomEquality.LengthEqualityComparer().Equals(this.Name3!, other.Name3!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.CustomEquality.Sample? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Manager : global::System.IEquatable<Manager>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Manager);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Manager? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Manager;
return
!ReferenceEquals(other, null) && base.Equals(obj)
base.Equals(other as global::Generator.Equals.Tests.Classes.DeepEquality.Person)
&& global::Generator.Equals.DefaultEqualityComparer<global::System.String>.Default.Equals(this.Department!, other.Department!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Manager? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Person : global::System.IEquatable<Person>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Person);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Person? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Person;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::System.Int32>.Default.Equals(this.Age!, other.Age!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Person? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Sample : global::System.IEquatable<Sample>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Sample);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Sample? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Sample;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::Generator.Equals.Tests.Classes.DeepEquality.Person>.Default.Equals(this.Person!, other.Person!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Sample? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Manager : global::System.IEquatable<Manager>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Manager);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Manager? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Manager;
return
!ReferenceEquals(other, null) && base.Equals(obj)
base.Equals(other as global::Generator.Equals.Tests.Classes.DeepEquality.Person)
&& global::Generator.Equals.DefaultEqualityComparer<global::System.String>.Default.Equals(this.Department!, other.Department!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Manager? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Person : global::System.IEquatable<Person>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Person);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Person? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Person;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::System.Int32>.Default.Equals(this.Age!, other.Age!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Person? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Sample : global::System.IEquatable<Sample>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DeepEquality.Sample);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Sample? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DeepEquality.Sample;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::Generator.Equals.Tests.Classes.DeepEquality.Person>.Default.Equals(this.Person!, other.Person!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DeepEquality.Sample? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Sample : global::System.IEquatable<Sample>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.DictionaryEquality.Sample);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DictionaryEquality.Sample? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.DictionaryEquality.Sample;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DictionaryEqualityComparer<string, int>.Default.Equals(this.Properties!, other.Properties!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.DictionaryEquality.Sample? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
13 changes: 6 additions & 7 deletions Generator.Equals.SnapshotTests/Classes/ExplicitMode.verified.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,19 +34,18 @@ partial class Sample : global::System.IEquatable<Sample>

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public override bool Equals(object? obj)
public override bool Equals(object? obj) =>
Equals(obj as global::Generator.Equals.Tests.Classes.ExplicitMode.Sample);

/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.ExplicitMode.Sample? other)
{
var other = obj as global::Generator.Equals.Tests.Classes.ExplicitMode.Sample;
return
!ReferenceEquals(other, null) && this.GetType() == other.GetType()
&& global::Generator.Equals.DefaultEqualityComparer<global::System.Int32>.Default.Equals(this.Age!, other.Age!)
;
}
/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
public bool Equals(global::Generator.Equals.Tests.Classes.ExplicitMode.Sample? other) =>
Equals((object?) other);


/// <inheritdoc/>
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Generator.Equals", "1.0.0.0")]
Expand Down
Loading

0 comments on commit c5e8fd8

Please sign in to comment.