< Summary - Combined Code Coverage

Information
Class: NLightning.Domain.Channels.ValueObjects.ChannelId
Assembly: NLightning.Domain
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Domain/Channels/ValueObjects/ChannelId.cs
Tag: 36_15743069263
Line coverage
76%
Covered lines: 16
Uncovered lines: 5
Coverable lines: 21
Total lines: 81
Line coverage: 76.1%
Branch coverage
57%
Covered branches: 8
Total branches: 14
Branch coverage: 57.1%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Zero()100%11100%
.ctor(...)100%22100%
ToString()100%210%
Equals(...)50%12.1860%
Equals(...)50%4.59466.67%
GetHashCode()100%11100%
op_Implicit(...)100%11100%
op_Implicit(...)100%11100%
op_Implicit(...)100%11100%
op_Implicit(...)100%210%
op_Inequality(...)100%11100%
op_Equality(...)100%11100%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Domain/Channels/ValueObjects/ChannelId.cs

#LineLine coverage
 1namespace NLightning.Domain.Channels.ValueObjects;
 2
 3using Constants;
 4using Domain.Interfaces;
 5using Utils.Extensions;
 6
 7/// <summary>
 8/// Represents a channel id.
 9/// </summary>
 10/// <remarks>
 11/// The channel id is a unique identifier for a channel.
 12/// </remarks>
 13public readonly struct ChannelId : IEquatable<ChannelId>, IValueObject
 14{
 15    private readonly byte[] _value;
 16
 63617    public static ChannelId Zero => new byte[ChannelConstants.ChannelIdLength];
 18
 19    public ChannelId(ReadOnlySpan<byte> value)
 20    {
 88821        if (value.Length != ChannelConstants.ChannelIdLength)
 422            throw new ArgumentException($"ChannelId must be {ChannelConstants.ChannelIdLength} bytes", nameof(value));
 23
 88424        _value = value.ToArray();
 88425    }
 26
 27    #region Overrides
 28
 29    public override string ToString()
 30    {
 031        return Convert.ToHexString(_value).ToLowerInvariant();
 32    }
 33
 34    public bool Equals(ChannelId other)
 35    {
 36        // Handle null cases first
 37        // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
 38838        if (_value is null && other._value is null)
 039            return true;
 40
 41        // ReSharper disable once ConditionIsAlwaysTrueOrFalseAccordingToNullableAPIContract
 38842        if (_value is null || other._value is null)
 043            return false;
 44
 38845        return _value.SequenceEqual(other._value);
 46    }
 47
 48    public override bool Equals(object? obj)
 49    {
 4850        if (obj is null)
 051            return false;
 52
 4853        return obj is ChannelId other && Equals(other);
 54    }
 55
 56    public override int GetHashCode()
 57    {
 20458        return _value.GetByteArrayHashCode();
 59    }
 60
 61    #endregion
 62
 63    #region Implicit Conversions
 64
 6065    public static implicit operator byte[](ChannelId c) => c._value;
 14066    public static implicit operator ReadOnlyMemory<byte>(ChannelId c) => c._value;
 66867    public static implicit operator ChannelId(byte[] value) => new(value);
 068    public static implicit operator ChannelId(Span<byte> value) => new(value);
 69
 70    public static bool operator !=(ChannelId left, ChannelId right)
 71    {
 1272        return !left.Equals(right);
 73    }
 74
 75    public static bool operator ==(ChannelId left, ChannelId right)
 76    {
 2077        return left.Equals(right);
 78    }
 79
 80    #endregion
 81}