-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathLoopDetectionTest.cs
120 lines (102 loc) · 3.25 KB
/
LoopDetectionTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using Algorithms.LinkedLists;
using Xunit;
namespace AlgorithmsTest.LinkedLists
{
public class LoopDetectionTest
{
[Fact]
public void FirstTry_Without_Loop()
{
Node<int> first = new Node<int>(1);
Node<int> second = new Node<int>(2);
first.Next = second;
Node<int> third = new Node<int>(3);
second.Next = third;
var result = new LoopDetection().FirstTry(first);
Assert.False(result);
}
[Fact]
public void FirstTry_With_Loop()
{
Node<int> first = new Node<int>(1);
Node<int> second = new Node<int>(2);
first.Next = second;
Node<int> third = new Node<int>(3);
second.Next = third;
third.Next = second;
var result = new LoopDetection().FirstTry(first);
Assert.True(result);
}
[Fact]
public void FirstTry_With_Longer_Loop()
{
Node<int> a = new Node<int>(1);
Node<int> b = new Node<int>(2);
a.Next = b;
Node<int> c = new Node<int>(3);
b.Next = c;
Node<int> d = new Node<int>(4);
c.Next = d;
Node<int> e = new Node<int>(5);
d.Next = e;
Node<int> f = new Node<int>(6);
e.Next = f;
Node<int> g = new Node<int>(7);
f.Next = g;
Node<int> h = new Node<int>(8);
g.Next = h;
Node<int> i = new Node<int>(9);
h.Next = i;
i.Next = b;
var result = new LoopDetection().FirstTry(a);
Assert.True(result);
}
[Fact]
public void SecondTry_Without_Loop()
{
Node<int> first = new Node<int>(1);
Node<int> second = new Node<int>(2);
first.Next = second;
Node<int> third = new Node<int>(3);
second.Next = third;
var result = new LoopDetection().SecondTry(first);
Assert.False(result);
}
[Fact]
public void SecondTry_With_Loop()
{
Node<int> first = new Node<int>(1);
Node<int> second = new Node<int>(2);
first.Next = second;
Node<int> third = new Node<int>(3);
second.Next = third;
third.Next = second;
var result = new LoopDetection().SecondTry(first);
Assert.True(result);
}
[Fact]
public void SecondTry_With_Longer_Loop()
{
Node<int> a = new Node<int>(1);
Node<int> b = new Node<int>(2);
a.Next = b;
Node<int> c = new Node<int>(3);
b.Next = c;
Node<int> d = new Node<int>(4);
c.Next = d;
Node<int> e = new Node<int>(5);
d.Next = e;
Node<int> f = new Node<int>(6);
e.Next = f;
Node<int> g = new Node<int>(7);
f.Next = g;
Node<int> h = new Node<int>(8);
g.Next = h;
Node<int> i = new Node<int>(9);
h.Next = i;
i.Next = b;
var result = new LoopDetection().SecondTry(a);
Assert.True(result);
}
}
}