< Summary - Combined Code Coverage

Information
Class: NLightning.Bolt11.Models.TaggedFields.PaymentHashTaggedField
Assembly: NLightning.Bolt11
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Bolt11/Models/TaggedFields/PaymentHashTaggedField.cs
Tag: 36_15743069263
Line coverage
100%
Covered lines: 21
Uncovered lines: 0
Coverable lines: 21
Total lines: 72
Line coverage: 100%
Branch coverage
87%
Covered branches: 7
Total branches: 8
Branch coverage: 87.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_Type()100%11100%
get_Value()100%11100%
get_Length()100%11100%
.ctor(...)100%11100%
WriteToBitWriter(...)100%22100%
IsValid()50%22100%
FromBitReader(...)100%44100%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Bolt11/Models/TaggedFields/PaymentHashTaggedField.cs

#LineLine coverage
 1using NBitcoin;
 2
 3namespace NLightning.Bolt11.Models.TaggedFields;
 4
 5using Constants;
 6using Domain.Utils;
 7using Enums;
 8using Interfaces;
 9
 10/// <summary>
 11/// Tagged field for the payment hash
 12/// </summary>
 13/// <remarks>
 14/// The payment hash is a 32-byte hash used to identify a payment
 15/// </remarks>
 16/// <seealso cref="ITaggedField"/>
 17internal sealed class PaymentHashTaggedField : ITaggedField
 18{
 213219    public TaggedFieldTypes Type => TaggedFieldTypes.PaymentHash;
 60020    internal uint256 Value { get; }
 16821    public short Length => TaggedFieldConstants.HashLength;
 22
 23    /// <summary>
 24    /// Initializes a new instance of the <see cref="PaymentHashTaggedField"/> class.
 25    /// </summary>
 26    /// <param name="value">The Description Hash</param>
 19627    internal PaymentHashTaggedField(uint256 value)
 28    {
 19629        Value = value;
 19630    }
 31
 32    /// <inheritdoc/>
 33    public void WriteToBitWriter(BitWriter bitWriter)
 34    {
 5635        var data = Value.ToBytes();
 5636        if (BitConverter.IsLittleEndian)
 5637            Array.Reverse(data);
 38
 39        // Write data
 5640        bitWriter.WriteBits(data, Length * 5);
 5641    }
 42
 43    /// <inheritdoc/>
 44    public bool IsValid()
 45    {
 19646        return Value != uint256.Zero && Value != uint256.One;
 47    }
 48
 49    /// <summary>
 50    /// Reads a PaymentHashTaggedField from a BitReader
 51    /// </summary>
 52    /// <param name="bitReader">The BitReader to read from</param>
 53    /// <param name="length">The length of the field</param>
 54    /// <returns>The PaymentHashTaggedField</returns>
 55    /// <exception cref="ArgumentException">Thrown when the length is invalid</exception>
 56    internal static PaymentHashTaggedField FromBitReader(BitReader bitReader, short length)
 57    {
 7658        if (length != TaggedFieldConstants.HashLength)
 859            throw new ArgumentException(
 860                $"Invalid length for {nameof(PaymentHashTaggedField)}. Expected {TaggedFieldConstants.HashLength}, but g
 61
 62        // Read the data from the BitReader
 6863        var data = new byte[(TaggedFieldConstants.HashLength * 5 + 7) / 8];
 6864        bitReader.ReadBits(data, length * 5);
 6865        data = data[..^1];
 66
 6867        if (BitConverter.IsLittleEndian)
 6868            Array.Reverse(data);
 69
 6870        return new PaymentHashTaggedField(new uint256(data));
 71    }
 72}