Skip to content

Commit 1177f3f

Browse files
committed
fix test of LinkedList
1 parent 99892c9 commit 1177f3f

File tree

2 files changed

+175
-80
lines changed

2 files changed

+175
-80
lines changed

data-structures/LinkedList/__test__/test_LinkedList.cpp

+174-77
Original file line numberDiff line numberDiff line change
@@ -2,93 +2,190 @@
22
#include <cassert>
33
#include "../include/LinkedList.h"
44

5-
void test_empty(){
5+
int main(int argc, char* argv[]) {
66
LinkedList<int> list;
77
assert(list.empty() == true);
8-
list.push_back(11);
9-
assert(list.empty() == false);
10-
list.pop_back();
11-
assert(list.empty() == true);
12-
std::cout << "empty passed!" << std::endl;
13-
}
14-
15-
void test_size(){
16-
LinkedList<int> list;
178
assert(list.size() == 0);
18-
list.push_back(2);
9+
try{
10+
list.pop_front();
11+
std::cerr << "pop_front() throw an exception FAILED!" << std::endl;
12+
} catch(const std::underflow_error &e){
13+
std::cout << "pop_front() throw an exception PASSED: " << e.what() << std::endl;
14+
}
15+
try{
16+
list.pop_back();
17+
std::cerr << "pop_back() throw an exception FAILED!" << std::endl;
18+
} catch(const std::underflow_error &e){
19+
std::cout << "pop_back() throw an exception PASSED: " << e.what() << std::endl;
20+
}
21+
list.push_front(32); // 32
22+
assert(list.empty() == false);
1923
assert(list.size() == 1);
20-
list.pop_back();
21-
assert(list.size() == 0);
22-
std::cout << "size passed!" << std::endl;
23-
}
24-
25-
//Test add functions
26-
void test(){
27-
LinkedList<int> list;
28-
list.push_front(5);
29-
list.push_front(4);
30-
list.push_front(3); // 3 4 5
31-
assert(list.size() == 3);
32-
assert(list.front() == 3);
33-
list.pop_front(); // 4 5
24+
assert(list.front() == 32);
25+
assert(list.back() == 32);
26+
assert(list.contains(32) == 0);
27+
assert(list.get_at(0) == 32);
28+
list.push_back(22); // 32 22
29+
assert(list.empty() == false);
3430
assert(list.size() == 2);
35-
assert(list.front() == 4);
36-
std::cout << "push_front passed!" << std::endl;
37-
std::cout << "pop_front passed!" << std::endl;
38-
list.push_back(2); // 4 5 2
31+
assert(list.front() == 32);
32+
assert(list.back() == 22);
33+
assert(list.contains(22) == 1);
34+
assert(list.get_at(0) == 32);
35+
list.push_front(11); // 11 32 22
36+
assert(list.empty() == false);
3937
assert(list.size() == 3);
38+
assert(list.front() == 11);
39+
assert(list.back() == 22);
40+
assert(list.contains(32) == 1);
41+
assert(list.get_at(2) == 22);
42+
try{
43+
list.push_at(4, 99);
44+
std::cerr << "push_at() throw an exception FAILED!" << std::endl;
45+
} catch(const std::out_of_range &e){
46+
std::cout << "push_at() throw an exception PASSED: " << e.what() << std::endl;
47+
}
48+
try{
49+
list.pop_at(3);
50+
std::cerr << "pop_at() throw an exception FAILED!" << std::endl;
51+
} catch(const std::out_of_range &e){
52+
std::cout << "pop_at() throw an exception PASSED: " << e.what() << std::endl;
53+
}
54+
try{
55+
list.change_at(3, 99);
56+
std::cerr << "change_at() throw an exception FAILED!" << std::endl;
57+
} catch(const std::out_of_range &e){
58+
std::cout << "change_at() throw an exception PASSED: " << e.what() << std::endl;
59+
}
60+
try{
61+
list.get_at(3);
62+
std::cerr << "get_at() throw an exception FAILED!" << std::endl;
63+
} catch(const std::out_of_range &e){
64+
std::cout << "get_at() throw an exception PASSED: " << e.what() << std::endl;
65+
}
66+
list.push_front(31); // 31 11 32 22
4067
assert(list.empty() == false);
41-
assert(list.front() == 4);
42-
assert(list.back() == 2);
43-
std::cout << "push_back passed!" << std::endl;
44-
list.push_at(1, 1); // 4 1 5 2
4568
assert(list.size() == 4);
46-
assert(list.contains(1) == 1);
47-
std::cout << "push_at passed!" << std::endl;
48-
list.pop_back(); // 4 1 5
49-
assert(list.size() == 3);
50-
assert(list.back() == 5);
51-
std::cout << "pop_back passed!" << std::endl;
52-
list.push_front(3);
53-
list.push_back(6);
54-
list.push_back(2); // 3 4 1 5 6 2
55-
list.push_at(3, 9); // 3 4 1 9 5 6 2
56-
assert(list.size() == 7);
57-
assert(list.get_at(3) == 9);
58-
list.pop_at(1); // 3 1 9 5 6 2
69+
assert(list.front() == 31);
70+
assert(list.back() == 22);
71+
assert(list.contains(22) == 3);
72+
assert(list.get_at(2) == 32);
73+
list.push_back(29); // 31 11 32 22 29
74+
assert(list.empty() == false);
75+
assert(list.size() == 5);
76+
assert(list.front() == 31);
77+
assert(list.back() == 29);
78+
assert(list.contains(11) == 1);
79+
assert(list.get_at(3) == 22);
80+
list.push_back(11); // 31 11 32 22 29 11
81+
assert(list.empty() == false);
5982
assert(list.size() == 6);
60-
assert(list.get_at(1) == 1);
61-
std::cout << "pop_at passed!" << std::endl;
62-
list.change_at(3, 4); // 3 1 9 4 6 2
83+
assert(list.front() == 31);
84+
assert(list.back() == 11);
85+
assert(list.contains(11) == 1);
86+
assert(list.get_at(4) == 29);
87+
list.change_eq_first(32, 75); // 31 11 75 22 29 11
88+
assert(list.contains(75) == 2);
89+
assert(list.get_at(2) == 75);
90+
assert(list.contains(32) == std::numeric_limits<size_t>::max());
91+
list.change_eq_all(11, 57); // 31 57 75 22 29 57
92+
assert(list.contains(57) == 1);
93+
assert(list.get_at(5) == 57);
94+
assert(list.contains(11) == std::numeric_limits<size_t>::max());
95+
list.change_at(2, 39); // 31 57 39 22 29 57
96+
assert(list.contains(39) == 2);
97+
assert(list.get_at(2) == 39);
98+
assert(list.contains(75) == std::numeric_limits<size_t>::max());
99+
list.print();
100+
list.reverse(); // 57 29 22 39 57 31
101+
assert(list.empty() == false);
63102
assert(list.size() == 6);
64-
assert(list.get_at(3) == 4);
65-
std::cout << "change_at passed!" << std::endl;
66-
list.push_back(1); // 3 1 9 4 6 2 1
67-
list.change_at(4, 5); // 3 1 9 4 5 2 1
68-
list.change_eq_all(1, 6); // 3 6 9 4 5 2 6
69-
list.change_eq_first(6, 7); // 3 7 9 4 5 2 6
70-
assert(list.size() == 7);
71-
assert(list.get_at(4) == 5);
72-
assert(list.contains(1) == -1);
73-
std::cout << "change passed!" << std::endl;
74-
list.reverse(); // 6 2 5 4 9 7 3
75-
assert(list.size() == 7);
76-
assert(list.front() == 6);
77-
assert(list.get_at(1) == 2);
78-
assert(list.get_at(2) == 5);
79-
assert(list.get_at(3) == 4);
80-
assert(list.get_at(4) == 9);
81-
assert(list.get_at(5) == 7);
82-
assert(list.get_at(6) == 3);
83-
assert(list.back() == 3);
103+
assert(list.get_at(1) == 29);
104+
assert(list.front() == 57);
105+
assert(list.back() == 31);
84106
list.print();
85-
std::cout << "reverse passed!" << std::endl;
86-
std::cout << "All test passed!" << std::endl;
87-
}
88-
89-
int main(int argc, char* argv[]) {
90-
test_empty();
91-
test_size();
92-
test();
107+
list.pop_front(); // 29 22 39 57 31
108+
assert(list.empty() == false);
109+
assert(list.size() == 5);
110+
assert(list.get_at(1) == 22);
111+
assert(list.front() == 29);
112+
assert(list.back() == 31);
113+
list.pop_back(); // 29 22 39 57
114+
assert(list.empty() == false);
115+
assert(list.size() == 4);
116+
assert(list.get_at(2) == 39);
117+
assert(list.front() == 29);
118+
assert(list.back() == 57);
119+
list.pop_at(2); // 29 22 57
120+
assert(list.empty() == false);
121+
assert(list.size() == 3);
122+
assert(list.get_at(1) == 22);
123+
assert(list.front() == 29);
124+
assert(list.back() == 57);
125+
list.pop_front();
126+
list.pop_back();
127+
list.pop_at(0); // null
128+
try{
129+
list.push_at(1, 99);
130+
std::cerr << "push_at() throw an exception FAILED!" << std::endl;
131+
} catch(const std::out_of_range &e){
132+
std::cout << "push_at() throw an exception PASSED: )" << e.what() << std::endl;
133+
}
134+
try{
135+
list.pop_at(1);
136+
std::cerr << "pop_at() throw an exception FAILED!" << std::endl;
137+
} catch(const std::out_of_range &e){
138+
std::cout << "pop_at() throw an exception PASSED: )" << e.what() << std::endl;
139+
}
140+
try{
141+
list.change_at(1, 99);
142+
std::cerr << "change_at() throw an exception FAILED!" << std::endl;
143+
} catch(const std::out_of_range &e){
144+
std::cout << "change_at() throw an exception PASSED: )" << e.what() << std::endl;
145+
}
146+
try{
147+
list.pop_front();
148+
std::cerr << "pop_front() throw an exception FAILED!" << std::endl;
149+
} catch(const std::underflow_error &e){
150+
std::cout << "pop_front() throw an exception PASSED: )" << e.what() << std::endl;
151+
}
152+
try{
153+
list.pop_back();
154+
std::cerr << "pop_back() throw an exception FAILED!" << std::endl;
155+
} catch(const std::underflow_error &e){
156+
std::cout << "pop_back() throw an exception PASSED: )" << e.what() << std::endl;
157+
}
158+
try{
159+
list.change_eq_first(1, 99);
160+
std::cerr << "change_eq_first() throw an exception FAILED!" << std::endl;
161+
} catch(const std::underflow_error &e){
162+
std::cout << "change_eq_first() throw an exception PASSED: )" << e.what() << std::endl;
163+
}
164+
try{
165+
list.change_eq_all(1, 99);
166+
std::cerr << "change_eq_all() throw an exception FAILED!" << std::endl;
167+
} catch(const std::underflow_error &e){
168+
std::cout << "change_eq_all() throw an exception PASSED: )" << e.what() << std::endl;
169+
}
170+
try{
171+
list.front();
172+
std::cerr << "front() throw an exception FAILED!" << std::endl;
173+
} catch(const std::underflow_error &e){
174+
std::cout << "front() throw an exception PASSED: )" << e.what() << std::endl;
175+
}
176+
try{
177+
list.back();
178+
std::cerr << "back() throw an exception FAILED!" << std::endl;
179+
} catch(const std::underflow_error &e){
180+
std::cout << "back() throw an exception PASSED: )" << e.what() << std::endl;
181+
}
182+
try{
183+
list.contains(99);
184+
std::cerr << "contains() throw an exception FAILED!" << std::endl;
185+
} catch(const std::underflow_error &e){
186+
std::cout << "contains() throw an exception PASSED: )" << e.what() << std::endl;
187+
}
188+
list.print();
189+
std::cout << "ALL TEST PASSED!" << std::endl;
93190
return 0;
94191
}

data-structures/LinkedList/include/LinkedList.h

+1-3
Original file line numberDiff line numberDiff line change
@@ -191,15 +191,13 @@ void LinkedList<T>::change_eq_first(const T &value, const T &new_value){
191191
}
192192
if(curr){
193193
curr->_value = new_value;
194-
} else{
195-
throw std::runtime_error("Value not found in the list");
196194
}
197195
}
198196

199197
template <typename T>
200198
void LinkedList<T>::change_eq_all(const T &value, const T &new_value){
201199
if(empty()){
202-
throw std::out_of_range("This LinkedList is empty");
200+
throw std::underflow_error("This LinkedList is empty");
203201
}
204202
_Node *curr = _head;
205203
while(curr){

0 commit comments

Comments
 (0)