1 module LinkedListDemo;
2 
3 import common;
4 
5 import hunt.collection.AbstractList;
6 import hunt.collection.ArrayList;
7 import hunt.collection.LinkedList;
8 import hunt.collection.Collections;
9 import hunt.collection.List;
10 
11 import std.stdio;
12 import std.conv;
13 import std.range;
14 
15 // http://www.java2novice.com/java-collections-and-util/arraylist/
16 class LinkedListDemo
17 {
18     void testBasicOperations()
19     {
20         LinkedList!(string) arrl = new LinkedList!(string)();
21         //adding elements to the end
22         arrl.add("First");
23         arrl.add("Second");
24         arrl.add("Third");
25         arrl.add("Random");
26         writeln("Actual LinkedList:" ~ arrl.toString());
27 
28         writeln("First Element: " ~ arrl.element());
29         writeln("First Element: " ~ arrl.getFirst());
30         writeln("First Element: " ~ arrl.peek());
31         writeln("First Element: " ~ arrl.peekFirst());
32 
33         writeln("Last Element: " ~ arrl.getLast());
34         writeln("Last Element: " ~ arrl.peekLast());
35 
36         assert(arrl.size == 4);
37         assert(arrl.getLast() == "Random");
38 
39         List!(string) list = new ArrayList!(string)();
40         list.add("one");
41         list.add("two");
42         arrl.addAll(list);
43         writeln("After Copy: " ~ arrl.toString());
44         assert(arrl.size() == 6);
45 
46         writeln("Adding element at last position...");
47         arrl.addLast("I am last");
48         writeln(arrl);
49         writeln("Adding element at last position...");
50         arrl.offerLast("I am last - 1");
51         writeln(arrl);
52         writeln("Adding element at last position...");
53         arrl.offer("I am last - 2");
54         assert(arrl.size() == 9);
55         writeln(arrl);
56 
57         assert(arrl.toString() == "[First, Second, Third, Random, one, two, I am last, I am last - 1, I am last - 2]", arrl.toString());
58 
59         // writeln("Actual LinkedList:"+arrl);
60         arrl.clear();
61         assert(arrl.size() == 0);
62         writeln("After clear LinkedList:" ~ arrl.toString());
63 
64     }
65 
66     void testRemove()
67     {
68         LinkedList!(string) arrl = new LinkedList!(string)();
69         arrl.add("First");
70         arrl.add("Second");
71         arrl.add("Third");
72         arrl.add("Random");
73         arrl.add("four");
74         arrl.add("five");
75         arrl.add("six");
76         arrl.add("seven");
77         arrl.add("eight");
78         arrl.add("nine");
79         writeln(arrl);
80         assert(arrl.size == 10);
81 
82         writeln("\nRemov() method:" ~ arrl.remove());
83         writeln("After remove() method call:");
84         writeln(arrl);
85         assert(arrl.size == 9);
86 
87         writeln("\nremove(index) method:" ~ arrl.removeAt(2).to!string());
88         writeln("After remove(index) method call:");
89         writeln(arrl);
90         assert(arrl.size == 8);
91         assert(arrl.toString() == "[Second, Third, four, five, six, seven, eight, nine]", arrl.toString());
92 
93         writeln("\nRemov(object) method:" ~ arrl.remove("six").to!string());
94         writeln("After remove(object) method call:");
95         writeln(arrl);
96         assert(arrl.size == 7, arrl.size().to!string());
97 
98         writeln("\nremoveFirst() method:" ~ arrl.removeFirst());
99         writeln("After removeFirst() method call:");
100         writeln(arrl);
101 
102         writeln("\nremoveFirstOccurrence() method:" ~ arrl.removeFirstOccurrence("eight"));
103         writeln("After removeFirstOccurrence() method call:");
104         writeln(arrl);
105 
106         writeln("\nremoveLast() method:" ~ arrl.removeLast());
107         writeln("After removeLast() method call:");
108         writeln(arrl);
109         assert(arrl.size == 4);
110         assert(arrl.toString() == "[Third, four, five, seven]", arrl.toString());
111 
112 
113         // writeln("removeLastOccurrence() method:" ~ arrl.removeLastOccurrence("five"));
114         // writeln("After removeLastOccurrence() method call:");
115         // writeln(arrl);
116     }
117 
118     void testContains()
119     {
120         LinkedList!(string) arrl = new LinkedList!(string)();
121         //adding elements to the end
122         arrl.add("First");
123         arrl.add("Second");
124         arrl.add("Third");
125         arrl.add("Random");
126         writeln("Actual LinkedList:" ~ arrl.toString());
127 
128         List!(string) list = new LinkedList!(string)();
129         list.add("Second");
130         list.add("Random");
131         writeln("Does LinkedList contains all list elements?: " ~ arrl.containsAll(list)
132                 .to!string());
133         list.add("one");
134         writeln("Does LinkedList contains all list elements?: " ~ arrl.containsAll(list)
135                 .to!string());
136     }
137 
138     void testPushPop()
139     {
140         LinkedList!(string) arrl = new LinkedList!(string)();
141         arrl.add("First");
142         arrl.add("Second");
143         arrl.add("Third");
144         arrl.add("Random");
145         writeln(arrl);
146         arrl.push("push element");
147         writeln("After push operation:");
148         writeln(arrl);
149         arrl.pop();
150         writeln("After pop operation:");
151         writeln(arrl);
152     }
153 
154     // void testSubList()
155     // {
156     //     LinkedList!(string) arrl = new LinkedList!(string)();
157     //     //adding elements to the end
158     //     arrl.add("First");
159     //     arrl.add("Second");
160     //     arrl.add("Third");
161     //     arrl.add("Random");
162     //     arrl.add("Click");
163     //     writeln("Actual LinkedList:" ~ arrl.toString());
164     //     List!(string) list = arrl.subList(2, 4);
165     //     writeln("Sub List: " ~ list.toString());
166     // }
167 
168     // void testReverse()
169     // {
170     //     LinkedList!(string) list = new LinkedList!(string)();
171     // 	list.add("Java");
172     // 	list.add("Cric");
173     // 	list.add("Play");
174     // 	list.add("Watch");
175     // 	list.add("Glass");
176     // 	Collections.reverse(list);
177     // 	writeln("Results after reverse operation:");
178     // 	foreach(string str; list){
179     // 		writeln(str);
180     // 	}
181     // }
182 
183     // void testShuffle()
184     // {
185     //     LinkedList!(string) list = new LinkedList!(string)();
186     //     list.add("Java");
187     //     list.add("Cric");
188     //     list.add("Play");
189     //     list.add("Watch");
190     //     list.add("Glass");
191     //     list.add("Movie");
192     //     list.add("Girl");
193 
194     //     Collections.shuffle(list);
195     //     writeln("Results after shuffle operation:");
196     //     foreach(string str; list){
197     //         writeln(str);
198     //     }
199 
200     //     Collections.shuffle(list);
201     //     writeln("Results after shuffle operation:");
202     //     foreach(string str; list){
203     //         writeln(str);
204     //     }
205     // }
206 
207     // void testSwap()
208     // {
209     //     LinkedList!(string) list = new LinkedList!(string)();
210     // 	list.add("Java");
211     // 	list.add("Cric");
212     // 	list.add("Play");
213     // 	list.add("Watch");
214     // 	list.add("Glass");
215     // 	list.add("Movie");
216     // 	list.add("Girl");
217 
218     // 	Collections.swap(list, 2, 5);
219     // 	writeln("Results after swap operation:");
220     // 	foreach(string str; list){
221     // 		writeln(str);
222     // 	}
223     // }
224 
225 }