Skip to content

Commit a5f4540

Browse files
committed
Upgrade SimpleGraph to NNBD
1 parent 884549d commit a5f4540

File tree

2 files changed

+72
-76
lines changed

2 files changed

+72
-76
lines changed

lib/graph/simple_graph.dart

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
// @dart=2.9
21
import 'vertex.dart';
32

43
/// A Graph Type
54
class SimpleGraph<T> {
6-
Set<Vertex<T>> _vertices;
5+
final Set<Vertex<T>> _vertices;
76

87
/// Vertices of this graph
98
List<Vertex<T>> get vertices => List<Vertex<T>>.unmodifiable(_vertices);
@@ -13,9 +12,7 @@ class SimpleGraph<T> {
1312
final bool isDigraph;
1413

1514
/// Create a new graph
16-
SimpleGraph({this.isDigraph = true}) {
17-
_vertices = <Vertex<T>>{};
18-
}
15+
SimpleGraph({this.isDigraph = true}) : _vertices = <Vertex<T>>{};
1916

2017
/// Total number of vertices for this graph
2118
int get numberOfVertices => _vertices.length;
@@ -25,7 +22,7 @@ class SimpleGraph<T> {
2522
_vertices.map((v) => v.outDegree).fold(0, (a, b) => a + b);
2623

2724
/// Adds an edge
28-
void addEdge(Vertex src, Vertex dst, [num weight = 1]) {
25+
void addEdge(Vertex<T> src, Vertex<T> dst, [num weight = 1]) {
2926
unlockVertices(<Vertex>{src, dst});
3027
if (src.key == dst.key) throw Error();
3128

@@ -59,20 +56,20 @@ class SimpleGraph<T> {
5956
bool get isEmpty => numberOfEdges == 0;
6057

6158
/// Adds a new vertex
62-
bool addVertex(Vertex vertex) => _vertices.add(vertex);
59+
bool addVertex(Vertex<T> vertex) => _vertices.add(vertex);
6360

6461
/// Removes a vertex
6562
bool removeVertex(Vertex vertex) {
6663
var edgesRemoved = vertices.contains(vertex)
6764
? [
6865
...vertex.outgoingConnections.entries.map((e) => [vertex, e.key]),
6966
...vertex.incomingVertices.map((e) => [e, vertex])
70-
].fold(true, (acc, v) => acc && removeEdge(v[0], v[1]))
67+
].fold(true, (bool acc, v) => acc && removeEdge(v[0], v[1]))
7168
: false;
7269
return edgesRemoved ? _vertices.remove(vertex) : edgesRemoved;
7370
}
7471

75-
Vertex<T> _getOrAddVertex(Vertex vertex) =>
72+
Vertex<T> _getOrAddVertex(Vertex<T> vertex) =>
7673
_vertices.add(vertex) ? vertex : vertex;
7774

7875
/// Gets an edge list for [this].

test/graph/simple_graph_test.dart

Lines changed: 66 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
// @dart=2.9
21
import 'package:test/test.dart';
32

43
import 'package:algorithms/graph/simple_graph.dart';
54
import 'package:algorithms/graph/vertex.dart';
65

76
void main() {
8-
SimpleGraph emptyGraph, simpleGraph;
9-
Vertex a, b, c, d, e, f, u, v;
7+
SimpleGraph? emptyGraph, simpleGraph;
8+
Vertex? a, b, c, d, e, f, u, v;
109

1110
void _initializeVertices() {
1211
a = Vertex('a');
@@ -31,134 +30,134 @@ void main() {
3130
*/
3231
simpleGraph = SimpleGraph();
3332

34-
simpleGraph.addEdge(a, b);
35-
simpleGraph.addEdge(a, f);
36-
simpleGraph.addEdge(b, c, 4);
37-
simpleGraph.addEdge(d, a, 2);
38-
simpleGraph.addEdge(f, e, 7);
39-
simpleGraph.addEdge(c, d);
33+
simpleGraph?.addEdge(a!, b!);
34+
simpleGraph?.addEdge(a!, f!);
35+
simpleGraph?.addEdge(b!, c!, 4);
36+
simpleGraph?.addEdge(d!, a!, 2);
37+
simpleGraph?.addEdge(f!, e!, 7);
38+
simpleGraph?.addEdge(c!, d!);
4039
});
4140

4241
test('Total number of vertices', () {
43-
expect(emptyGraph.numberOfVertices, equals(0));
44-
expect(simpleGraph.numberOfVertices, equals(6));
42+
expect(emptyGraph?.numberOfVertices, equals(0));
43+
expect(simpleGraph?.numberOfVertices, equals(6));
4544
});
4645

4746
test('Total number of edges', () {
48-
expect(emptyGraph.numberOfEdges, equals(0));
49-
expect(simpleGraph.numberOfEdges, equals(6));
47+
expect(emptyGraph?.numberOfEdges, equals(0));
48+
expect(simpleGraph?.numberOfEdges, equals(6));
5049
});
5150

5251
test('Loops are not allowed for a simple graph', () {
5352
var graph = SimpleGraph();
54-
expect(() => graph.addEdge(a, a), throwsA(isA<Error>()));
53+
expect(() => graph.addEdge(a!, a!), throwsA(isA<Error>()));
5554
});
5655

5756
test('Digraphs add connections in one way', () {
5857
var graph = SimpleGraph(isDigraph: true);
59-
graph.addEdge(u, v);
58+
graph.addEdge(u!, v!);
6059
expect(graph.numberOfEdges, equals(1));
6160
});
6261

6362
test('Non-digraphs add connections in both ways', () {
6463
var graph = SimpleGraph(isDigraph: false);
65-
graph.addEdge(u, v);
64+
graph.addEdge(u!, v!);
6665
expect(graph.numberOfEdges, equals(2));
6766
});
6867

6968
test('Checks for vertex', () {
7069
var graph = SimpleGraph();
71-
graph.addEdge(u, v);
72-
expect(graph.containsVertex(u), isTrue);
73-
expect(graph.containsVertex(v), isTrue);
74-
expect(graph.containsVertex(a), isFalse);
70+
graph.addEdge(u!, v!);
71+
expect(graph.containsVertex(u!), isTrue);
72+
expect(graph.containsVertex(v!), isTrue);
73+
expect(graph.containsVertex(a!), isFalse);
7574
});
7675

7776
test('Checks for vertex by key', () {
78-
expect(simpleGraph.containsVertex(a), isTrue);
79-
expect(simpleGraph.containsVertex(u), isFalse);
77+
expect(simpleGraph?.containsVertex(a!), isTrue);
78+
expect(simpleGraph?.containsVertex(u!), isFalse);
8079
});
8180

8281
test('Adds a new vertex', () {
83-
expect(simpleGraph.containsVertex(u), isFalse);
84-
expect(simpleGraph.addVertex(u), isTrue);
85-
expect(simpleGraph.containsVertex(u), isTrue);
82+
expect(simpleGraph?.containsVertex(u!), isFalse);
83+
expect(simpleGraph?.addVertex(u!), isTrue);
84+
expect(simpleGraph?.containsVertex(u!), isTrue);
8685
});
8786

8887
test('Does not add vertex with existing key', () {
89-
var aDuplicate = Vertex(a.key);
90-
expect(simpleGraph.numberOfVertices, equals(6));
91-
expect(simpleGraph.addVertex(a), isFalse);
92-
expect(simpleGraph.addVertex(aDuplicate), isFalse);
93-
expect(simpleGraph.numberOfVertices, equals(6));
88+
var aDuplicate = Vertex(a!.key);
89+
expect(simpleGraph?.numberOfVertices, equals(6));
90+
expect(simpleGraph?.addVertex(a!), isFalse);
91+
expect(simpleGraph?.addVertex(aDuplicate), isFalse);
92+
expect(simpleGraph?.numberOfVertices, equals(6));
9493
});
9594

9695
test('Remove a vertex from graph', () {
97-
expect(simpleGraph.numberOfVertices, equals(6));
98-
expect(simpleGraph.numberOfEdges, equals(6));
99-
expect(simpleGraph.removeVertex(a), isTrue);
100-
expect(simpleGraph.numberOfEdges, equals(3));
101-
expect(simpleGraph.numberOfVertices, equals(5));
96+
expect(simpleGraph?.numberOfVertices, equals(6));
97+
expect(simpleGraph?.numberOfEdges, equals(6));
98+
expect(simpleGraph?.removeVertex(a!), isTrue);
99+
expect(simpleGraph?.numberOfEdges, equals(3));
100+
expect(simpleGraph?.numberOfVertices, equals(5));
102101
});
103102

104103
test('Remove an isolated vertex from graph', () {
105-
expect(u.isIsolated, isTrue);
106-
expect(simpleGraph.addVertex(u), isTrue);
107-
expect(simpleGraph.numberOfVertices, equals(7));
108-
expect(simpleGraph.numberOfEdges, equals(6));
109-
expect(simpleGraph.removeVertex(u), isTrue);
110-
expect(simpleGraph.numberOfVertices, equals(6));
111-
expect(simpleGraph.numberOfEdges, equals(6));
104+
expect(u!.isIsolated, isTrue);
105+
expect(simpleGraph?.addVertex(u!), isTrue);
106+
expect(simpleGraph?.numberOfVertices, equals(7));
107+
expect(simpleGraph?.numberOfEdges, equals(6));
108+
expect(simpleGraph?.removeVertex(u!), isTrue);
109+
expect(simpleGraph?.numberOfVertices, equals(6));
110+
expect(simpleGraph?.numberOfEdges, equals(6));
112111
});
113112

114113
test('Removing a non-existent vertex has no effect', () {
115-
expect(simpleGraph.numberOfVertices, equals(6));
116-
expect(simpleGraph.numberOfEdges, equals(6));
117-
expect(simpleGraph.removeVertex(u), isFalse);
118-
expect(simpleGraph.numberOfVertices, equals(6));
119-
expect(simpleGraph.numberOfEdges, equals(6));
114+
expect(simpleGraph?.numberOfVertices, equals(6));
115+
expect(simpleGraph?.numberOfEdges, equals(6));
116+
expect(simpleGraph?.removeVertex(u!), isFalse);
117+
expect(simpleGraph?.numberOfVertices, equals(6));
118+
expect(simpleGraph?.numberOfEdges, equals(6));
120119
});
121120

122121
test('Remove an edge from graph', () {
123-
expect(simpleGraph.numberOfEdges, equals(6));
124-
expect(simpleGraph.removeEdge(a, b), isTrue);
125-
expect(simpleGraph.numberOfEdges, equals(5));
122+
expect(simpleGraph?.numberOfEdges, equals(6));
123+
expect(simpleGraph?.removeEdge(a!, b!), isTrue);
124+
expect(simpleGraph?.numberOfEdges, equals(5));
126125
});
127126

128127
test('Do no remove edge that does not exist', () {
129-
expect(simpleGraph.numberOfEdges, equals(6));
130-
expect(simpleGraph.removeEdge(a, c), isFalse);
131-
expect(simpleGraph.numberOfEdges, equals(6));
128+
expect(simpleGraph?.numberOfEdges, equals(6));
129+
expect(simpleGraph?.removeEdge(a!, c!), isFalse);
130+
expect(simpleGraph?.numberOfEdges, equals(6));
132131
});
133132

134133
test('Check for NULL graph', () {
135-
expect(emptyGraph.isNull, isTrue);
136-
expect(simpleGraph.isNull, isFalse);
134+
expect(emptyGraph?.isNull, isTrue);
135+
expect(simpleGraph?.isNull, isFalse);
137136
});
138137

139138
test('Check for singleton graph', () {
140-
expect(emptyGraph.isSingleton, isFalse);
141-
expect(simpleGraph.isSingleton, isFalse);
139+
expect(emptyGraph?.isSingleton, isFalse);
140+
expect(simpleGraph?.isSingleton, isFalse);
142141

143142
var graph = SimpleGraph();
144-
graph.addVertex(u);
143+
graph.addVertex(u!);
145144
expect(graph.isSingleton, isTrue);
146145
});
147146

148147
test('Check for empty graph', () {
149-
expect(emptyGraph.isEmpty, isTrue);
150-
expect(simpleGraph.isEmpty, isFalse);
148+
expect(emptyGraph?.isEmpty, isTrue);
149+
expect(simpleGraph?.isEmpty, isFalse);
151150

152151
var graph = SimpleGraph();
153-
graph.addVertex(u);
154-
graph.addVertex(v);
152+
graph.addVertex(u!);
153+
graph.addVertex(v!);
155154
expect(graph.isEmpty, isTrue);
156-
graph.addEdge(u, v);
155+
graph.addEdge(u!, v!);
157156
expect(graph.isEmpty, isFalse);
158157
});
159158

160159
test('Get edges of graph', () {
161-
expect(emptyGraph.edges, isEmpty);
160+
expect(emptyGraph?.edges, isEmpty);
162161
var expectedEdges = {
163162
{a, b, 1},
164163
{a, f, 1},
@@ -167,14 +166,14 @@ void main() {
167166
{f, e, 7},
168167
{c, d, 1}
169168
};
170-
expect(simpleGraph.edges.toSet(), equals(expectedEdges));
169+
expect(simpleGraph?.edges.toSet(), equals(expectedEdges));
171170
});
172171

173172
test('addConnection on a cherry picked vertex throws error', () {
174-
var vertices = simpleGraph.vertices;
173+
var vertices = simpleGraph?.vertices;
175174
var leak = Vertex('LEAK');
176175
leak.unlock();
177-
expect(() => vertices[0].addConnection(leak),
176+
expect(() => vertices![0].addConnection(leak),
178177
throwsA(isA<UnsupportedError>()));
179178
});
180179
}

0 commit comments

Comments
 (0)