Files
912-notes/thu_dsa/chp3/test_list.cpp

200 lines
4.1 KiB
C++

#include "List.h"
#include <iostream>
#include <cassert>
using std::cout;
using std::endl;
void test_constructor1();
void test_constructor2();
void test_push();
void test_pop();
void test_find();
void test_deduplicate();
void test_uniquify();
void test_search();
void test_selection_sort();
void test_insertion_sort();
int main(){
cout << "Running tests......" << endl;
test_constructor1();
test_constructor2();
test_push();
test_pop();
test_find();
test_deduplicate();
test_uniquify();
test_search();
test_selection_sort();
test_insertion_sort();
cout << "All tests passed." << endl;
system("pause");
return 0;
}
void test_constructor1(){
List<double> l;
assert(l.getSize() == 0);
assert(l.empty());
}
void test_constructor2(){
List<int> l1;
int i[] = { 5,6,8,9,7,3,4,1,2,0 };
for (int ix = 0; ix != 10; ix++)
l1.push_back(i[ix]);
List<int> l2(l1);
for (int ix = 0; ix != 10; ix++)
assert(l2[ix] == i[ix]);
List<int> l4(l1.first(), 5);
for (int ix = 0; ix != 5; ix++)
assert(l4[ix] == i[ix]);
assert(l4.getSize() == 5);
List<int> l5(l1.last(), 1);
assert(l5.getSize() == 1);
assert(l5.first()->val == 0);
List<int> l3(l1, 3, 6);
assert(l3.getSize() == 6);
for (int ix = 0; ix != 6; ix++)
assert(l3[ix] == i[3+ix]);
}
void test_push(){
List<double> l;
double d[] = { 1.2, 3.4, 5.6, 7.8, 9.0 };
for (int ix = 0; ix != 5; ix++)
l.push_back(d[ix]);
for (int ix = 0; ix != 5; ix++)
assert(l[ix] == d[ix]);
List<int> l1;
int i[] = { 5,6,8,9,7,3,4,1,2,0 };
for (int ix = 0; ix != 10; ix++)
l1.push_front(i[ix]);
for (int ix = 0; ix != 10; ix++)
assert(l1[ix] == i[9-ix]);
//test insert_before
assert(l1.insert_before(0, 12)->val == 12);
assert(l1.getSize() == 11);
assert(l1.insert_before(11, 14)->val == 14);
assert(l1.getSize() == 12);
}
void test_pop(){
List<int> l1;
int i[] = { 5,6,8,9,7,3,4,1,2,0 };
for (int ix = 0; ix != 10; ix++)
l1.push_back(i[ix]);
assert(l1.pop_back()->val == 0);
assert(l1.pop_back()->val == 2);
assert(l1.pop_front()->val == 5);
assert(l1.pop_front()->val == 6);
assert(l1.getSize() == 6);
assert(l1.pop(3)->val == 3);
assert(l1.pop(5) == nullptr);
ListNodePosi(int) p = l1.first();
assert(l1.pop(p)->val == 8);
}
void test_find(){
List<int> l1;
int i[] = { 5,6,8,9,7,3,4,1,2,0 };
for (int ix = 0; ix != 10; ix++)
l1.push_back(i[ix]);
assert(l1.find(8)->val == 8);
assert(l1.find(7)->val == 7);
assert(l1.find(12) == nullptr);
assert(l1.find(7, 5, l1.last())->val == 7);
assert(l1.find(7, 4, l1.last()) == nullptr);
}
void test_deduplicate(){
List<int> l1;
int i[] = { 5,6,8,9,7,3,4,1,2,0};
for (int ix = 0; ix != 10; ix++) {
l1.push_front(i[ix]);
l1.push_back(i[ix]);
}
assert(l1.getSize() == 20);
assert(l1.deduplicate() == 10);
assert(l1.getSize() == 10);
for (int ix = 0; ix != 10; ix++)
assert(l1[ix] == i[ix]);
}
void test_uniquify(){
List<int> l1;
int i[] = {5,8,12,14,15,19,20,22,29,36};
for (int ix = 0; ix != 10; ix++) {
l1.push_back(i[ix]);
l1.push_back(i[ix]);
}
assert(l1.getSize() == 20);
assert(l1.uniquify() == 10);
for (int ix = 0; ix != 10; ix++)
assert(l1[ix] == i[ix]);
}
void test_search(){
List<int> l1;
int i[] = { 5,8,12,14,15,19,20,22,29,36 };
for (int ix = 0; ix != 10; ix++) {
l1.push_back(i[ix]);
}
assert(l1.search(8)->val == 8);
assert(l1.search(14, 6, l1.last())->val == 14);
assert(l1.search(30, 5, l1.last())->val == 29);
assert(l1.search(1, 5, l1.last())->val == 14);
}
void test_selection_sort(){
List<int> l1;
int a[] = { 2,9,8,4,1,0,7,6,3,5 };
for (int ix = 0; ix != 10; ix++) {
l1.push_back(a[ix]);
}
l1.selection_sort(l1.first(), 5);
assert(l1[0] == 1);
assert(l1[1] == 2);
assert(l1[2] == 4);
assert(l1[3] == 8);
assert(l1[4] == 9);
l1.selection_sort();
for (int ix = 0; ix != 10; ++ix)
assert(l1[ix] == ix);
}
void test_insertion_sort(){
List<int> l1;
int a[] = { 2,9,8,4,1,0,7,6,3,5 };
for (int ix = 0; ix != 10; ix++) {
l1.push_back(a[ix]);
}
l1.insertion_sort(l1.first(), 5);
assert(l1[0] == 1);
assert(l1[1] == 2);
assert(l1[2] == 4);
assert(l1[3] == 8);
assert(l1[4] == 9);
l1.insertion_sort();
for (int ix = 0; ix != 10; ++ix)
assert(l1[ix] == ix);
}