< Summary - Combined Code Coverage

Information
Class: NLightning.Domain.Protocol.ValueObjects.BitcoinNetwork
Assembly: NLightning.Domain
File(s): /home/runner/work/nlightning/nlightning/src/NLightning.Domain/Protocol/ValueObjects/BitcoinNetwork.cs
Tag: 38_17925369700
Line coverage
94%
Covered lines: 32
Uncovered lines: 2
Coverable lines: 34
Total lines: 99
Line coverage: 94.1%
Branch coverage
83%
Covered branches: 15
Total branches: 18
Branch coverage: 83.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_CustomChainHashes()100%11100%
.cctor()100%11100%
get_Name()100%11100%
.ctor(...)100%11100%
get_ChainHash()100%88100%
ToString()100%11100%
Register(...)83.33%6.17683.33%
Unregister(...)50%22100%
op_Implicit(...)100%11100%
op_Implicit(...)100%11100%
Equals(...)50%22100%
Equals(...)100%11100%
GetHashCode()100%210%
op_Equality(...)100%11100%
op_Inequality(...)100%11100%

File(s)

/home/runner/work/nlightning/nlightning/src/NLightning.Domain/Protocol/ValueObjects/BitcoinNetwork.cs

#LineLine coverage
 1namespace NLightning.Domain.Protocol.ValueObjects;
 2
 3using Constants;
 4
 5public readonly struct BitcoinNetwork : IEquatable<BitcoinNetwork>
 6{
 967    private static Dictionary<string, ChainHash> CustomChainHashes { get; } = new();
 8
 249    public static readonly BitcoinNetwork Mainnet = new(NetworkConstants.Mainnet);
 2410    public static readonly BitcoinNetwork Testnet = new(NetworkConstants.Testnet);
 2411    public static readonly BitcoinNetwork Regtest = new(NetworkConstants.Regtest);
 2412    public static readonly BitcoinNetwork Signet = new(NetworkConstants.Signet);
 13
 118814    public string Name { get; }
 15
 16    public BitcoinNetwork(string name)
 17    {
 54018        Name = name;
 54019    }
 20
 21    public ChainHash ChainHash
 22    {
 23        get
 24        {
 20825            return Name switch
 20826            {
 15227                NetworkConstants.Mainnet => ChainConstants.Main,
 1628                NetworkConstants.Testnet => ChainConstants.Testnet,
 829                NetworkConstants.Regtest => ChainConstants.Regtest,
 3230                _ => CustomChainHashes.TryGetValue(Name.ToLowerInvariant(), out var hash)
 3231                         ? hash
 3232                         : throw new InvalidOperationException($"Chain not supported: {Name}")
 20833            };
 34        }
 35    }
 36
 837    public override string ToString() => Name;
 38
 39    /// <summary>
 40    /// Register a custom network mapping
 41    /// </summary>
 42    public void Register(string name, ChainHash chainHash)
 43    {
 4844        if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(nameof(name));
 45
 2446        if (!CustomChainHashes.TryAdd(name.ToLowerInvariant(), chainHash))
 47        {
 448            if (CustomChainHashes.ContainsKey(name.ToLowerInvariant()))
 449                throw new InvalidOperationException($"Chain hash already registered: {name}");
 50
 051            throw new InvalidOperationException($"Failed to register chain hash: {name}");
 52        }
 2053    }
 54
 55    /// <summary>
 56    /// Unregister a custom network mapping
 57    /// </summary>
 58    public static void Unregister(string name)
 59    {
 1260        if (string.IsNullOrWhiteSpace(name)) throw new ArgumentNullException(nameof(name));
 1261        CustomChainHashes.Remove(name.ToLowerInvariant());
 1262    }
 63
 64    #region Implicit Conversions
 65
 22466    public static implicit operator string(BitcoinNetwork bitcoinNetwork) => bitcoinNetwork.Name.ToLowerInvariant();
 26067    public static implicit operator BitcoinNetwork(string value) => new(value.ToLowerInvariant());
 68
 69    #endregion
 70
 71    #region Equality
 72
 73    public override bool Equals(object? obj)
 74    {
 5675        return obj is BitcoinNetwork network && ChainHash.Equals(network.ChainHash);
 76    }
 77
 78    public bool Equals(BitcoinNetwork other)
 79    {
 2880        return Name == other.Name;
 81    }
 82
 83    public override int GetHashCode()
 84    {
 085        return Name.GetHashCode();
 86    }
 87
 88    public static bool operator ==(BitcoinNetwork left, BitcoinNetwork right)
 89    {
 19690        return left.Name == right.Name;
 91    }
 92
 93    public static bool operator !=(BitcoinNetwork left, BitcoinNetwork right)
 94    {
 6895        return !(left == right);
 96    }
 97
 98    #endregion
 99}