Skip to content

Commit 4fc73ee

Browse files
committed
migrate TopologicalSortingTests
1 parent c261ac6 commit 4fc73ee

File tree

5 files changed

+140
-163
lines changed

5 files changed

+140
-163
lines changed

Package.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -690,9 +690,8 @@ let package:Package = .init(
690690
"directories",
691691
]),
692692

693-
.executableTarget(name: "TopologicalSortingTests",
693+
.testTarget(name: "TopologicalSortingTests",
694694
dependencies: [
695-
.target(name: "Testing_"),
696695
.target(name: "TopologicalSorting"),
697696
]),
698697

Sources/TopologicalSortingTests/Main.Sorting.swift

Lines changed: 0 additions & 150 deletions
This file was deleted.

Sources/TopologicalSortingTests/Main.swift

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
extension Sorting
2+
{
3+
struct TestNode:Identifiable, Equatable
4+
{
5+
let id:String
6+
7+
init(id:String)
8+
{
9+
self.id = id
10+
}
11+
}
12+
}
13+
extension Sorting.TestNode:CustomStringConvertible
14+
{
15+
var description:String { self.id }
16+
}
17+
extension Sorting.TestNode:ExpressibleByStringLiteral
18+
{
19+
init(stringLiteral:String) { self.init(id: stringLiteral) }
20+
}
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
import Testing
2+
import TopologicalSorting
3+
4+
@Suite
5+
enum Sorting
6+
{
7+
@Test
8+
static func Empty()
9+
{
10+
Self.test(nodes: [], edges: [:])
11+
}
12+
@Test
13+
static func Single()
14+
{
15+
Self.test(nodes: ["A"], edges: [:])
16+
}
17+
@Test
18+
static func Multiple()
19+
{
20+
Self.test(nodes: ["A", "B", "C"], edges: [:])
21+
}
22+
@Test
23+
static func LoopbackEdge()
24+
{
25+
Self.test(nodes: ["A", "B", "C"], edges: ["A": "A"], cyclic: true)
26+
}
27+
28+
@Test
29+
static func Circular()
30+
{
31+
Self.test(nodes: ["A", "B", "C"], edges: ["A": "B", "B": "C", "C": "A"], cyclic: true)
32+
}
33+
34+
@Test
35+
static func IgnoredEdge()
36+
{
37+
Self.test(nodes: ["A", "B", "C"], edges: ["A": "D"])
38+
}
39+
@Test
40+
static func SingleEdge()
41+
{
42+
Self.test(nodes: ["B", "A", "C"], edges: ["B": "A"])
43+
}
44+
@Test
45+
static func DuplicateEdge()
46+
{
47+
Self.test(nodes: ["B", "A", "C"], edges: ["B": "A", "B": "A"])
48+
}
49+
50+
@Test
51+
static func ConvergingStar()
52+
{
53+
Self.test(
54+
nodes: ["B", "C", "D", "A"],
55+
edges: [
56+
"B": "A",
57+
"C": "A",
58+
"D": "A",
59+
])
60+
}
61+
62+
@Test
63+
static func DivergingStar()
64+
{
65+
Self.test(
66+
nodes: ["A", "B", "C", "D"],
67+
edges: [
68+
"A": "B",
69+
"A": "C",
70+
"A": "D",
71+
])
72+
}
73+
74+
@Test
75+
static func Lips()
76+
{
77+
Self.test(
78+
nodes: ["4", "0", "1", "5", "2", "3"],
79+
edges: [
80+
"4": "0",
81+
"4": "1",
82+
"1": "3",
83+
"5": "2",
84+
"2": "3",
85+
])
86+
}
87+
88+
@Test
89+
static func LipsAsymmetric()
90+
{
91+
Self.test(
92+
nodes: ["4", "0", "5", "2", "3", "1"],
93+
edges: [
94+
"4": "0",
95+
"4": "1",
96+
"3": "1",
97+
"5": "2",
98+
"2": "3",
99+
])
100+
}
101+
}
102+
extension Sorting
103+
{
104+
private
105+
static func test(nodes:[TestNode], edges:KeyValuePairs<String, String>, cyclic:Bool = false)
106+
{
107+
let shuffled:[TestNode] = nodes.shuffled()
108+
let edges:[(String, String)] = [_].init(edges)
109+
110+
if cyclic
111+
{
112+
#expect(shuffled.sortedTopologically(by: edges.shuffled()) == nil)
113+
}
114+
else
115+
{
116+
#expect(shuffled.sortedTopologically(by: edges.shuffled()) == nodes)
117+
}
118+
}
119+
}

0 commit comments

Comments
 (0)