< Summary

Class:Itinero.Indexes.AttributeSetEqualityComparer
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Indexes/AttributeSetEqualityComparer.cs
Covered lines:19
Uncovered lines:4
Coverable lines:23
Total lines:53
Line coverage:82.6% (19 of 23)
Covered branches:7
Total branches:10
Branch coverage:70% (7 of 10)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.cctor()100%1100%
Equals(...)62.5%871.42%
GetHashCode(...)100%2100%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Indexes/AttributeSetEqualityComparer.cs

#LineLine coverage
 1using System.Collections.Generic;
 2
 3namespace Itinero.Indexes;
 4
 5/// <summary>
 6/// An equality comparer to compare attribute sets.
 7/// </summary>
 8/// <remarks>
 9/// - Doesn't care about the order of attributes.
 10/// </remarks>
 11public class AttributeSetEqualityComparer : IEqualityComparer<IReadOnlyList<(string key, string value)>>
 12{
 13    /// <summary>
 14    /// The default comparer.
 15    /// </summary>
 116    public static readonly AttributeSetEqualityComparer Default = new();
 17
 18    /// <inheritdoc/>
 19    public bool Equals(IReadOnlyList<(string key, string value)> x,
 20        IReadOnlyList<(string key, string value)> y)
 10821    {
 10822        if (x.Count != y.Count)
 023        {
 024            return false;
 25        }
 26
 23427        for (var i = 0; i < x.Count; i++)
 928        {
 929            var xPair = x[i];
 930            var yPair = y[i];
 31
 932            if (xPair != yPair)
 033            {
 034                return false;
 35            }
 936        }
 37
 10838        return true;
 10839    }
 40
 41    /// <inheritdoc/>
 42    public int GetHashCode(IReadOnlyList<(string key, string value)> obj)
 46643    {
 46644        var hash = obj.Count.GetHashCode();
 45
 150446        foreach (var pair in obj)
 5347        {
 5348            hash ^= pair.GetHashCode();
 5349        }
 50
 46651        return hash;
 46652    }
 53}