< Summary

Information
Class: Nabs.ValueObject<T>
Assembly: Nabs
File(s): /home/runner/work/Nabs/Nabs/src/Nabs/ValueObject.cs
Tag: 90_14636759620
Line coverage
100%
Covered lines: 23
Uncovered lines: 0
Coverable lines: 23
Total lines: 55
Line coverage: 100%
Branch coverage
100%
Covered branches: 20
Total branches: 20
Branch coverage: 100%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
Equals(...)100%44100%
GetHashCode()100%44100%
op_Equality(...)100%88100%
op_Inequality(...)100%11100%
Equals(...)100%44100%

File(s)

/home/runner/work/Nabs/Nabs/src/Nabs/ValueObject.cs

#LineLine coverage
 1namespace Nabs;
 2
 3public abstract class ValueObject<T> : IEquatable<T>
 4    where T : ValueObject<T>
 5{
 6    public abstract IEnumerable<object?> GetEqualityComponents();
 7
 8    public bool Equals(T? other)
 9    {
 110        if (other is null)
 111            return false;
 12
 113        if (ReferenceEquals(this, other))
 114            return true;
 15
 116        return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents());
 17    }
 18
 19    public override int GetHashCode()
 20    {
 221        return GetEqualityComponents()
 222            .Aggregate(1, (current, obj) =>
 223            {
 224                unchecked
 225                {
 226                    return current * 23 + (obj?.GetHashCode() ?? 0);
 227                }
 228            });
 29    }
 30
 31    public static bool operator ==(ValueObject<T>? left, ValueObject<T>? right)
 32    {
 133        if (left is null && right is null)
 134            return true;
 35
 136        if (left is null || right is null)
 137            return false;
 38
 139        return left.Equals(right);
 40    }
 41
 42    public static bool operator !=(ValueObject<T>? left, ValueObject<T>? right)
 43    {
 144        return !(left == right);
 45    }
 46
 47    public override bool Equals(object? obj)
 48    {
 149        if (obj == null || obj.GetType() != GetType())
 150            return false;
 51
 152        var other = (T)obj;
 153        return Equals(other);
 54    }
 55}