< Summary

Class:Itinero.Routing.Flavours.Dijkstra.Bidirectional.DijkstraAlgorithmExtensions
Assembly:Itinero
File(s):/home/runner/work/routing2/routing2/src/Itinero/Routing/Flavours/Dijkstra/Bidirectional/DijkstraAlgorithmExtensions.cs
Covered lines:28
Uncovered lines:3
Coverable lines:31
Total lines:53
Line coverage:90.3% (28 of 31)
Covered branches:11
Total branches:12
Branch coverage:91.6% (11 of 12)
Tag:232_15462506344

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
Push(...)100%10100%
GetPathToVisit(...)50%278.57%

File(s)

/home/runner/work/routing2/routing2/src/Itinero/Routing/Flavours/Dijkstra/Bidirectional/DijkstraAlgorithmExtensions.cs

#LineLine coverage
 1using System;
 2using Itinero.Routes.Paths;
 3using Itinero.Routing.Costs;
 4using Itinero.Snapping;
 5
 6namespace Itinero.Routing.Flavours.Dijkstra.Bidirectional;
 7
 8internal static class DijkstraAlgorithmExtensions
 9{
 10    public static void Push(this DijkstraAlgorithm dijkstraAlgorithm, ICostFunction costFunction, SnapPoint snapPoint,
 11        bool asOrigin)
 1812    {
 1813        var enumerator = dijkstraAlgorithm.RoutingNetwork.GetEdgeEnumerator();
 1814        var costEnumerator = new CostEdgeEnumerator(enumerator, costFunction);
 15
 1816        if (asOrigin)
 917        {
 918            var (cost, _) = costEnumerator.MoveToAndGetCost(snapPoint.EdgeId, true, true, []);
 1819            if (cost > 0) dijkstraAlgorithm.Push(snapPoint.EdgeId, true, cost * (1 - snapPoint.OffsetFactor()));
 20
 921            (cost, _) = costEnumerator.MoveToAndGetCost(snapPoint.EdgeId, false, true, []);
 1822            if (cost > 0) dijkstraAlgorithm.Push(snapPoint.EdgeId, false, cost * snapPoint.OffsetFactor());
 923        }
 24        else
 925        {
 926            var (cost, _) = costEnumerator.MoveToAndGetCost(snapPoint.EdgeId, true, false, []);
 1827            if (cost > 0) dijkstraAlgorithm.Push(snapPoint.EdgeId, true, cost * (1 - snapPoint.OffsetFactor()));
 28
 929            (cost, _) = costEnumerator.MoveToAndGetCost(snapPoint.EdgeId, false, false, []);
 1830            if (cost > 0) dijkstraAlgorithm.Push(snapPoint.EdgeId, false, cost * snapPoint.OffsetFactor());
 931        }
 1832    }
 33
 34    public static Path GetPathToVisit(this DijkstraAlgorithm dijkstraAlgorithm, uint p)
 435    {
 436        var path = new Path(dijkstraAlgorithm.RoutingNetwork);
 437        var visit = dijkstraAlgorithm.GetVisit(p);
 38
 439        while (true)
 440        {
 441            if (visit.previousPointer == uint.MaxValue)
 442            {
 443                path.Prepend(visit.edge, visit.forward);
 444                break;
 45            }
 46
 047            path.Prepend(visit.edge, visit.forward);
 048            visit = dijkstraAlgorithm.GetVisit(visit.previousPointer);
 049        }
 50
 451        return path;
 452    }
 53}

Methods/Properties

Push(...)
GetPathToVisit(...)