< Summary

Class:Itinero.Routing.Costs.AlternativeRouteCostFunction
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Routing/Costs/AlternativeRouteCostFunction.cs
Covered lines:15
Uncovered lines:0
Coverable lines:15
Total lines:43
Line coverage:100% (15 of 15)
Covered branches:3
Total branches:4
Branch coverage:75% (3 of 4)
Tag:224_14471318300

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
Get(...)75%4100%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Routing/Costs/AlternativeRouteCostFunction.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using Itinero.Network;
 4using Itinero.Network.Enumerators.Edges;
 5
 6namespace Itinero.Routing.Costs;
 7
 8internal class AlternativeRouteCostFunction : ICostFunction
 9{
 10    private readonly ICostFunction _originalCostFunction;
 11    private readonly Dictionary<EdgeId, int> _moreCostlyEdges;
 12    private readonly double _alreadyVisitedCostFactor;
 13
 14    /// <summary>
 15    /// Calculates the cost of the edge as specified by the originalCostFunction.
 16    /// If the edge is in moreCostlyEdges, the cost is increased.
 17    /// </summary>
 18    /// <param name="originalCostFunction"></param>
 19    /// <param name="moreCostlyEdges"></param>
 20    /// <param name="alreadyVisitedCostFactor"></param>
 221    public AlternativeRouteCostFunction(ICostFunction originalCostFunction, Dictionary<EdgeId, int> moreCostlyEdges, dou
 222    {
 223        _originalCostFunction = originalCostFunction;
 224        _moreCostlyEdges = moreCostlyEdges;
 225        _alreadyVisitedCostFactor = alreadyVisitedCostFactor;
 226    }
 27
 28    public (bool canAccess, bool canStop, double cost, double turnCost) Get(IEdgeEnumerator<RoutingNetwork> edgeEnumerat
 29        IEnumerable<(EdgeId edgeId, byte? turn)>? previousEdges = null)
 230    {
 231        previousEdges ??= ArraySegment<(EdgeId edgeId, byte? turn)>.Empty;
 32
 233        if (_moreCostlyEdges.TryGetValue(edgeEnumerator.EdgeId, out var count))
 134        {
 135            var alreadyVisitedCost = Math.Pow(_alreadyVisitedCostFactor, count);
 36
 137            var (canAccess, canStop, cost, turnCost) = _originalCostFunction.Get(edgeEnumerator, forward, previousEdges)
 138            return (canAccess, canStop, cost * alreadyVisitedCost, turnCost);
 39        }
 40
 141        return _originalCostFunction.Get(edgeEnumerator, forward, previousEdges);
 242    }
 43}

Methods/Properties

.ctor(...)
Get(...)