// test.cpp // // Small test driver for our class list. #include using namespace std; #include "List.h" using namespace CS142; template void print(const list& ls) { // ls.test_print(); for (const T& e : ls) { cout << e << ' '; } cout << '\n'; } int main() { cout << "Testing push_back...\n"; list ls; ls.push_back(10); ls.push_back(20); cout << "10 20: "; print(ls); cout << "\nTesting back...\n"; cout << "20: " << ls.back() << endl; ls.back() = 25; cout << "10 25: "; print(ls); cout << "\nTesting constant back...\n"; const list& ls2 = ls; cout << "25: " << ls2.back() << endl; //ls2.back() = 99; // should not compile cout << "\nTesting pop_back...\n"; ls.pop_back(); cout << "10: "; print(ls); ls.pop_back(); cout << ": "; print(ls); ls.push_back(37); cout << "37: "; print(ls); cout << "\nTest destructor? (y/n) "; char answer = cin.get(); cin.get(); // '\n' if (answer == 'y') { cout << "\nOpen Task Manager to watch memory usage.\n" << "Press 'Ctrl-C' to terminate the test.\n" << "Press 'Enter' now to begin testing.\n"; cin.get(); cout << "\nTesting...\n"; while (true) list ls; } cout << "Testing iterators...\n"; ls.pop_back(); ls.push_back(10); ls.push_back(20); ls.push_back(30); cout << "10 20 30: "; print(ls); list::iterator itr = ls.begin(); cout << "20: " << *(++itr) << endl; cout << "20: " << *(itr++) << endl; cout << "30: " << *itr << endl; list> ls3; ls3.push_back({ 1, 17 }); cout << "(1, 17): (" << ls3.begin()->first << ", " << ls3.begin()->second << ")\n"; cout << "\nTesting insert...\n"; ls.insert(ls.end(), 35); itr = ls.insert(ls.begin(), 5); ++itr; ++itr; itr = ls.insert(itr, 15); cout << "5 10 15 20 30 35: "; print(ls); cout << "15: " << *itr << endl; cout << "\nTesting erase...\n"; ls.erase(itr); ls.erase(ls.begin()); ls.erase(--ls.end()); cout << "10 20 30: "; print(ls); ls.erase(ls.begin()); ls.erase(ls.begin()); ls.erase(ls.begin()); cout << ": "; print(ls); ls.push_back(10); ls.push_back(20); ls.push_back(30); cout << "10 20 30: "; print(ls); cout << "\nTesting copy constructor...\n"; list ls4 = ls; cout << "10 20 30: "; print(ls); cout << "10 20 30: "; print(ls4); ls.erase(ls.begin()); cout << "20 30: "; print(ls); cout << "10 20 30: "; print(ls4); cout << "\nTesting assignment operator...\n"; list ls5; ls5 = ls4; cout << "10 20 30: "; print(ls4); cout << "10 20 30: "; print(ls5); ls4.erase(ls4.begin()); cout << "20 30: "; print(ls4); cout << "10 20 30: "; print(ls5); return 0; }