Skip to content

Commit 8ec057a

Browse files
committed
i20 refine graph
1 parent 21adb96 commit 8ec057a

File tree

12 files changed

+254
-115
lines changed

12 files changed

+254
-115
lines changed

src/Dijkstra.NET.Benchmark/DijkstraBenchmarkBase.cs renamed to src/Dijkstra.NET.Benchmark/BenchmarkBase.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,33 +3,40 @@
33

44
namespace Dijkstra.NET.Benchmark
55
{
6-
public abstract class DijkstraBenchmarkBase
6+
public abstract class BenchmarkBase
77
{
8-
public static readonly Graph<int, string> Graph = new Graph<int, string>();
8+
public Graph<int, string> Graph { get; set; }
99

10-
private const int Nodes = 10_000_000;
10+
private const int Nodes = 1_000_000;
1111
private const int Connections = 1_000_000;
1212

13-
public static uint From { get; private set; }
14-
public static uint To { get; private set; }
13+
public static uint First { get; private set; }
14+
public static uint Last { get; private set; }
1515

16-
public void Initialise()
16+
public void InitialiseGraph()
1717
{
18+
if (Graph != null)
19+
{
20+
return;
21+
}
22+
23+
Graph = new Graph<int, string>();
24+
1825
for (int i = 0; i < Nodes; i++)
1926
Graph.AddNode(i);
2027

2128
var random = new Random();
2229

2330
for (int i = 0; i < Connections; i++)
2431
{
25-
int node1 = random.Next(0, Nodes);
26-
int node2 = random.Next(0, Nodes);
32+
int node1 = random.Next(1, Nodes);
33+
int node2 = random.Next(2, Nodes);
2734
int cost = random.Next(15, 50);
2835

2936
Graph.Connect((uint)node1, (uint)node2, cost, null);
3037
}
3138

32-
Graph.Connect(0, 5, 10000000, null);
39+
Graph.Connect(1, 5, 10000000, null);
3340
Graph.Connect(5, 121, 10000000, null);
3441
Graph.Connect(121, 115, 10000000, null);
3542
Graph.Connect(115, 300, 10000000, null);
@@ -40,8 +47,8 @@ public void Initialise()
4047
Graph.Connect(50, 21, 10000000, null);
4148
Graph.Connect(21, Nodes - 1, 10000000, null);
4249

43-
From = 0;
44-
To = Nodes - 1;
50+
First = 1;
51+
Last = Nodes - 1;
4552
}
4653
}
4754
}

src/Dijkstra.NET.Benchmark/BenchmarkIt.cs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@
33
using BenchmarkDotNet.Attributes;
44
using BenchmarkDotNet.Attributes.Jobs;
55
using BenchmarkDotNet.Engines;
6+
using Dijkstra.NET.PageRank;
67
using Dijkstra.NET.ShortestPath;
78

89
namespace Dijkstra.NET.Benchmark
910
{
1011
[SimpleJob(RunStrategy.Monitoring, launchCount: 1, warmupCount: 2, targetCount: 3)]
1112
[MemoryDiagnoser]
12-
public class BenchmarkIt
13+
public class BenchmarkIt : BenchmarkBase
1314
{
1415
public BenchmarkIt()
1516
{
@@ -19,6 +20,7 @@ public BenchmarkIt()
1920
public void Initialise()
2021
{
2122
Console.WriteLine("--- Global Setup ---");
23+
InitialiseGraph();
2224
}
2325

2426
[IterationSetup]
@@ -30,9 +32,17 @@ public void IterationSetup()
3032
[Benchmark(Baseline = true)]
3133
public int DijkstraExtensionBenchmark()
3234
{
33-
var result = DijkstraBenchmarkBase.Graph.Dijkstra(DijkstraBenchmarkBase.From, DijkstraBenchmarkBase.To);
35+
var result = Graph.Dijkstra(BenchmarkBase.First, BenchmarkBase.Last);
3436

3537
return result.GetPath().Count();
3638
}
39+
40+
[Benchmark]
41+
public double PageRankExtensionBenchmark()
42+
{
43+
var result = Graph.CalculatePageRank();
44+
45+
return result[BenchmarkBase.First];
46+
}
3747
}
3848
}

src/Dijkstra.NET.Benchmark/Dijkstra.NET.Benchmark.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@
137137
</ItemGroup>
138138
<ItemGroup>
139139
<Compile Include="BenchmarkIt.cs" />
140-
<Compile Include="DijkstraBenchmarkBase.cs" />
140+
<Compile Include="BenchmarkBase.cs" />
141141
<Compile Include="Program.cs" />
142142
<Compile Include="Properties\AssemblyInfo.cs" />
143143
</ItemGroup>

src/Dijkstra.NET.Benchmark/Program.cs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,14 @@ class Program
66
{
77
static void Main()
88
{
9+
#if DEBUG
10+
var b = new BenchmarkIt();
11+
b.Initialise();
12+
b.DijkstraExtensionBenchmark();
13+
b.PageRankExtensionBenchmark();
14+
#else
915
var summary = BenchmarkRunner.Run<BenchmarkIt>();
16+
#endif
1017
}
1118
}
12-
}
19+
}

src/Dijkstra.NET.Tests/EdgeTest.cs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,15 @@ namespace Dijkstra.NET.Tests
55
{
66
public class EdgeTest
77
{
8+
89
[Fact]
910
public void Two_Edges_Should_Be_Equal()
1011
{
11-
var a = new Edge<string, int>(new Node<string, int>(0, "node1"), 1, 1);
12-
var b = new Edge<string, int>(new Node<string, int>(0, "node2"),1, 1);
12+
var g = new Graph<string, int>() + "node1";
13+
var n = g >> 1;
14+
15+
var a = new Edge<string, int>(n, 1, 1);
16+
var b = new Edge<string, int>(n,1, 1);
1317

1418
bool act = a.Equals(b);
1519

@@ -19,8 +23,11 @@ public void Two_Edges_Should_Be_Equal()
1923
[Fact]
2024
public void Two_Edges_Should_Be_Equal_With_Null_References()
2125
{
22-
var a = new Edge<string, string>(new Node<string, string>(0, "node1"), 1, null);
23-
var b = new Edge<string, string>(new Node<string, string>(0, "node2"),1, null);
26+
var g = new Graph<string, string>() + "node1";
27+
var n = g >> 1;
28+
29+
var a = new Edge<string, string>(n, 1, null);
30+
var b = new Edge<string, string>(n,1, null);
2431

2532
bool act = a.Equals(b);
2633

@@ -30,8 +37,11 @@ public void Two_Edges_Should_Be_Equal_With_Null_References()
3037
[Fact]
3138
public void Two_Edges_Should_Be_Diffrent_With_Null_Reference()
3239
{
33-
var a = new Edge<string, string>(new Node<string, string>(0, "node1"), 1, null);
34-
var b = new Edge<string, string>(new Node<string, string>(0, "node2"),1, "a");
40+
var g = new Graph<string, string>() + "node1";
41+
var n = g >> 1;
42+
43+
var a = new Edge<string, string>(n, 1, null);
44+
var b = new Edge<string, string>(n,1, "a");
3545

3646
bool act = a.Equals(b);
3747
bool act2 = b.Equals(a);
@@ -43,8 +53,11 @@ public void Two_Edges_Should_Be_Diffrent_With_Null_Reference()
4353
[Fact]
4454
public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Parameter()
4555
{
46-
var a = new Edge<string, string>(new Node<string, string>(0, "node1"), 1, "b");
47-
var b = new Edge<string, string>(new Node<string, string>(0, "node2"),1, "a");
56+
var g = new Graph<string, string>() + "node1";
57+
var n = g >> 1;
58+
59+
var a = new Edge<string, string>(n, 1, "b");
60+
var b = new Edge<string, string>(n,1, "a");
4861

4962
bool act = a.Equals(b);
5063
bool act2 = b.Equals(a);
@@ -56,8 +69,11 @@ public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Parameter()
5669
[Fact]
5770
public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Costs()
5871
{
59-
var a = new Edge<string, string>(new Node<string, string>(0, "node1"), 3, "a");
60-
var b = new Edge<string, string>(new Node<string, string>(0, "node2"),1, "a");
72+
var g = new Graph<string, string>() + "node1";
73+
var n = g >> 1;
74+
75+
var a = new Edge<string, string>(n, 3, "a");
76+
var b = new Edge<string, string>(n,1, "a");
6177

6278
bool act = a.Equals(b);
6379
bool act2 = b.Equals(a);
@@ -69,8 +85,12 @@ public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Costs()
6985
[Fact]
7086
public void Two_Edges_Should_Be_Diffrent_With_Diffrent_Nodes()
7187
{
72-
var a = new Edge<string, string>(new Node<string, string>(0, "node1"), 1, "a");
73-
var b = new Edge<string, string>(new Node<string, string>(1, "node2"),1, "a");
88+
var g = new Graph<string, string>() + "node1" + "node2";
89+
var n1 = g >> 1;
90+
var n2 = g >> 2;
91+
92+
var a = new Edge<string, string>(n1, 1, "a");
93+
var b = new Edge<string, string>(n2,1, "a");
7494

7595
bool act = a.Equals(b);
7696
bool act2 = b.Equals(a);

0 commit comments

Comments
 (0)