void unittest2 () { cout << "\nSTARTING UNIT TEST\n\n"; DLList list; try { evaluate(list.getSize() == 0); cout << "Passed TEST 1: default constructor (size) \n"; } catch (MyException e) { cout << "# FAILED TEST 1: default constructor (size) #\n"; } try { evaluate(list.toString() == ""); cout << "Passed TEST 2: toString \n"; } catch (MyException e) { cout << "# FAILED TEST 2: toString #\n"; } list.insert(10); try { evaluate(list.getSize() == 1 && list.toString() == "10"); cout << "Passed TEST 3: insert(10)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 3: insert(10)/getSize/toString #\n"; } list.insert(50); try { evaluate(list.getSize() == 2 && list.toString() == "10,50"); cout << "Passed TEST 4: insert(50)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 4: insert(50)/getSize/toString #\n"; } list.insert(30); try { evaluate(list.getSize() == 3 && list.toString() == "10,30,50"); cout << "Passed TEST 5: insert(30)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 5: insert(30)/getSize/toString #\n"; } list.insert(5); try { evaluate(list.getSize() == 4 && list.toString() == "5,10,30,50"); cout << "Passed TEST 6: insert(5)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 6: insert(5)/getSize/toString #\n"; } list.insert(55); try { evaluate(list.getSize() == 5 && list.toString() == "5,10,30,50,55"); cout << "Passed TEST 7: insert(55)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 7: insert(55)/getSize/toString #\n"; } list.insert(20); try { evaluate(list.getSize() == 6 && list.toString() == "5,10,20,30,50,55"); cout << "Passed TEST 8: insert(20)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 8: insert(20)/getSize/toString #\n"; } list.insert(40); try { evaluate(list.getSize() == 7 && list.toString() == "5,10,20,30,40,50,55"); cout << "Passed TEST 9: insert(40)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 9: insert(40)/getSize/toString #\n"; } list.insert(30); try { evaluate(list.getSize() == 8 && list.toString() == "5,10,20,30,30,40,50,55"); cout << "Passed TEST 10: insert(30)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 10: insert(30)/getSize/toString #\n"; } list.insert(5); try { evaluate(list.getSize() == 9 && list.toString() == "5,5,10,20,30,30,40,50,55"); cout << "Passed TEST 11: insert(5)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 11: insert(5)/getSize/toString #\n"; } try { evaluate(list.removeFirst(1) == false); cout << "Passed TEST 12: removeFirst(1) \n"; } catch (MyException e) { cout << "# FAILED TEST 12: removeFirst(1) #\n"; } try { evaluate(list.removeFirst(5) == true && list.getSize() == 8 && list.toString() == "5,10,20,30,30,40,50,55"); cout << "Passed TEST 13: removeFirst(5)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 13: removeFirst(5)/getSize/toString #\n"; } try { evaluate(list.removeFirst(30) == true && list.getSize() == 7 && list.toString() == "5,10,20,30,40,50,55"); cout << "Passed TEST 14: removeFirst(30)/getSize/toString \n"; } catch (MyException e){ cout << "# FAILED TEST 14: removeFirst(30)/getSize/toString #\n"; } try { evaluate(list.removeFirst(30) == true && list.getSize() == 6 && list.toString() == "5,10,20,40,50,55"); cout << "Passed TEST 15: removeFirst(30)/getSize/toString \n"; } catch (MyException e){ cout << "# FAILED TEST 15: removeFirst(30)/getSize/toString #\n"; } try { evaluate(list.removeFirst(55) == true && list.getSize() == 5 && list.toString() == "5,10,20,40,50"); cout << "Passed TEST 16: removeFirst(55)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 16: removeFirst(55)/getSize/toString #\n"; } try { evaluate(list.removeFirst(10) == true && list.getSize() == 4 && list.toString() == "5,20,40,50"); cout << "Passed TEST 17: removeFirst(10)/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 17: removeFirst(10)/getSize/toString #\n"; } list.popFront(); try { evaluate(list.getSize() == 3 && list.toString() == "20,40,50"); cout << "Passed TEST 18: removeHead/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 18: removeHead/getSize/toString #\n"; } list.popBack(); try { evaluate(list.getSize() == 2 && list.toString() == "20,40"); cout << "Passed TEST 19: removeTail/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 19: removeTail/getSize/toString #\n"; } list.clear(); try { evaluate(list.getSize() == 0 && list.toString() == ""); cout << "Passed TEST 20: clear/getSize/toString \n"; } catch (MyException e) { cout << "# FAILED TEST 20: clear/getSize/toString #\n"; } cout << "\nUNIT TEST COMPLETE\n\n"; }
void processFile(char* filename) { //set up the input file stream and attempt to open the file ifstream fin; fin.open(filename); //if the file is successfully opened if (!fin.fail()) { //create a Doubly Linked List pointer (set to NULL) DLList* list = NULL; //set up reusable string stream object, int variable, and string nextLine stringstream ss; int value = 0; string nextLine; //while loop that continues until the end of the file is reached while (!fin.eof()){ //get the next line from the file getline(fin, nextLine); //pull the first character from nextLine and make sure it is uppercase char firstCharacter = toupper(nextLine[0]); //if the character is C if (firstCharacter == 'C') { //if there is already a list, delete it first if (list != NULL) { delete list; list = NULL; } //create a new list and output success to the console list = new DLList; cout << "LIST CREATED" << endl; //if the first character is # } else if (firstCharacter == '#') { //do nothing } else { //any operation other than C requires a list instance //if there is no list instance if (list == NULL) { //output requirement to the console cout << "MUST CREATE LIST INSTANCE" << endl; } else { //if there is a list instance perform an operation based on the first character of nextLine switch(firstCharacter) { //if the character is X case 'X': //clear the list and output success to the console list->clear(); cout << "LIST CLEARED" << endl; break; //if the character is D case 'D': //delete the list, set the list pointer to NULL, and output success to the console delete list; list = NULL; cout << "LIST DELETED" << endl; break; //if the character is I case 'I': //get the integer value that follows the character ss.str(nextLine.substr(2)); ss >> value; //insert a Node into the list with the integer value from the input file as contents (ascending order) list->insert(value); //output success to the console cout << "VALUE " << value << " INSERTED" << endl; //clear the stringstream ss.clear(); break; //if the character is F case 'F': //get the integer that follows the character ss.str(nextLine.substr(2)); ss >> value; //insert a Node at the head pointer with the value from the input file as contents list->pushFront(value); //output success to the console cout << "VALUE " << value << " ADDED TO HEAD" << endl; //clear the stringstream ss.clear(); break; //if the character is B case 'B': //get the integer that follows the character ss.str(nextLine.substr(2)); ss >> value; //insert a Node at the tail pointer with the value from the input file as contents list->pushBack(value); //output success to the console cout << "VALUE " << value << " ADDED TO TAIL" << endl; //clear the stringstream ss.clear(); break; //if the character is A case 'A': //attempt to output the value of the Node a the head pointer to the console try { //output success to the console cout << "VALUE " << list->getFront() << " AT HEAD" << endl; //if the attempt is unsuccessful (head is NULL) } catch (string err) { //output failure to the console cout << err << endl; } break; //if the character is Z case 'Z': //attempt to output the value of the Node at the tail pointer to the console try { //output success to the console cout << "VALUE " << list->getBack() << " AT TAIL" << endl; //if the attempt is unsuccessful (tail is NULL) } catch (string err) { //output failure to the console cout << err << endl; } break; //if the character is T case 'T': //if the list is empty if (list->getSize() < 1) { //output failure to the console cout << "LIST EMPTY" << endl; } else { //remove the Node at the head pointer and output success to the console list->popFront(); cout << "REMOVED HEAD" << endl; } break; //if the character is K case 'K': //if the list is empty if (list->getSize() < 1) { //output failure to the console cout << "LIST EMPTY" << endl; } else { //remove the Node at the tail pointer and output success to the console list->popBack(); cout << "REMOVED TAIL" << endl; } break; //if the character is E case 'E': //get the integer that follows the character ss.str(nextLine.substr(2)); ss >> value; //attempt to remove all instances of Nodes with the integer value from the list if (list->removeAll(value) == true) { //output success to the console cout << "VALUE " << value << " ELIMINATED" << endl; } else { //output failure to the console cout << "VALUE " << value << " NOT FOUND" << endl; } //clear the stringstream ss.clear(); break; //if the character is R case 'R': //get the integer value that follows the character ss.str(nextLine.substr(2)); ss >> value; //attempt to remove the first instance of a Node with the integer value from the list if (list->removeFirst(value) == true) { //output success to the console cout << "VALUE " << value << " REMOVED" << endl; } else { //output failure to the console cout << "VALUE " << value << " NOT FOUND" << endl; } //clear the stringstream ss.clear(); break; //if the character is G case 'G': //get the integer value that follows the character ss.str(nextLine.substr(2)); ss >> value; //attempt to locate a Node with the integer value if (list->get(value) == true) { //output success to the console cout << "VALUE " << value << " FOUND" << endl; } else { //output failure to the console cout << "VALUE " << value << " NOT FOUND" << endl; } //clear the stringstream ss.clear(); break; //if the character is N case 'N': //output the number of Nodes in the list cout << "LIST SIZE IS " << list->getSize() << endl; break; //if the character is P case 'P': //if the list is empty if (list->getSize() < 1){ //output failure to the console cout << "LIST EMPTY" << endl; } else { //output the contents of every node in the list, from head to tail cout << *list << endl; } break; } } } } //close the file input stream fin.close(); } else {
int main(int argc, char *argv[]) { if(argc <= 1){ cout << "Error: No command-line argument." << endl; } else{ DLList<int> *intList = NULL; ifstream fileIn(argv[1]); if(!fileIn.good()){ cout << "Error: File could not be opened." << endl; } else{ string line; while(getline(fileIn, line)){ char operation = line[0]; //cout << operation << " : "; if(operation == '#'){ //cout << "COMMENT" << endl; } else if(operation == 'C'){ cout << "LIST CREATED" << endl; if(intList != NULL){ delete intList; } intList = new DLList<int>; } else if(intList == NULL){ cout << "MUST CREATE LIST INSTANCE" << endl; } else{ if(operation == 'X'){ cout << "LIST CLEARED" << endl; intList->clear(); } else if(operation == 'D'){ cout << "LIST DELETED" << endl; delete intList; intList = NULL; } else if(operation == 'A'){ try{ cout << "VALUE " << intList->getFront() << " AT HEAD" << endl; } catch (string e){ cout << e << endl; } } else if(operation == 'Z'){ try{ cout << "VALUE " << intList->getBack() << " AT TAIL" << endl; } catch (string e){ cout << e << endl; } } else if(operation == 'T'){ if(intList->getSize() > 0){ intList->popFront(); cout << "REMOVED HEAD" << endl; } else{ cout << "LIST EMPTY" << endl; } } else if(operation == 'K'){ if(intList->getSize() > 0){ intList->popBack(); cout << "REMOVED TAIL" << endl; } else{ cout << "LIST EMPTY" << endl; } } else if(operation == 'N'){ cout << "LIST SIZE IS " << intList->getSize() << endl; } else if(operation == 'P'){ if(intList->getSize() > 0){ cout << *intList << endl; } else{ cout << "LIST EMPTY" << endl; } } else{ string str = line.substr(2); stringstream ss(str); int value = 0; ss >> value; if(operation == 'I'){ cout << "VALUE " << value << " INSERTED" << endl; intList->insert(value); } else if(operation == 'F'){ cout << "VALUE " << value << " ADDED TO HEAD" << endl; intList->pushFront(value); } else if(operation == 'B'){ cout << "VALUE " << value << " ADDED TO TAIL" << endl; intList->pushBack(value); } else if(operation == 'E'){ if(intList->removeAll(value)){ cout << "VALUE " << value << " ELIMINATED" << endl; } else{ cout << "VALUE " << value << " NOT FOUND" << endl; } } else if(operation == 'R'){ if(intList->removeFirst(value)){ cout << "VALUE " << value << " REMOVED" << endl; } else{ cout << "VALUE " << value << " NOT FOUND" << endl; } } else if(operation == 'G'){ if(intList->get(value)){ cout << "VALUE " << value << " FOUND" << endl; } else{ cout << "VALUE " << value << " NOT FOUND" << endl; } } } } } } if(intList != NULL){ delete intList; intList = NULL; } fileIn.close(); } return 0; }
void processFile(string filename) { ifstream inputstream; DLList *list = NULL; inputstream.open(filename.c_str()); if (inputstream.fail()) { cout << "Unable to open " << filename << " for processing." << endl; } else { string nextline; while (! inputstream.eof()) { stringstream ss; int value = 0; getline(inputstream, nextline); char firstCharacter = nextline[0]; switch (toupper(firstCharacter)) { case 'C': if (list != NULL) { delete list; } list = new DLList; cout << "LIST CREATED" << endl; break; case 'T': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else if (list->getSize() > 0) { list->popFront(); cout << "REMOVED HEAD" << endl; } else { cout << "LIST EMPTY" << endl; } break; case 'I': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { ss.str(nextline.substr(2)); ss >> value; list->insert(value); cout << "VALUE " << value << " INSERTED" << endl; } break; case 'P': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else if (list->getSize() > 0) { cout << (*list) << endl; } else { cout << "LIST EMPTY" << endl; } break; case 'X': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { list->clear(); cout << "LIST CLEARED" << endl; } break; case 'D': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { delete list; list = NULL; cout << "LIST DELETED" << endl; } break; case 'F': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { ss.str(nextline.substr(2)); ss >> value; list->pushFront(value); cout << "VALUE " << value << " ADDED TO HEAD" << endl; } break; case 'B': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { ss.str(nextline.substr(2)); ss >> value; list->pushBack(value); cout << "VALUE " << value << " ADDED TO TAIL" << endl; } break; case 'A': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { try { cout << "VALUE " << list->getFront() << " AT HEAD" << endl; } catch (string e) { cout << e << endl; } } break; case 'Z': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { try { cout << "VALUE " << list->getBack() << " AT TAIL" << endl; } catch (string e) { cout << e << endl; } } break; case 'K': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else if (list->getSize() > 0) { list->popBack(); cout << "REMOVED TAIL" << endl; } else { cout << "LIST EMPTY" << endl; } break; case 'E': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { ss.str(nextline.substr(2)); ss >> value; if (list->removeAll(value) == true) { cout << "VALUE " << value << " ELIMINATED" << endl; } else { cout << "VALUE " << value << " NOT FOUND" << endl; } } break; case 'R': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { ss.str(nextline.substr(2)); ss >> value; if (list->removeFirst(value) == true) { cout << "VALUE " << value << " REMOVED" << endl; } else { cout << "VALUE " << value << " NOT FOUND" << endl; } } break; case 'G': ss.str(nextline.substr(2)); ss >> value; if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else if (list->get(value) == true) { cout << "VALUE " << value << " FOUND" << endl; } else { cout << "VALUE " << value << " NOT FOUND" << endl; } break; case 'N': if (list == NULL) { cout << "MUST CREATE LIST INSTANCE" << endl; } else { cout << "LIST SIZE IS " << list->getSize() << endl; } break; default: break; } } inputstream.close(); } }
void run_project3(string filename){ ifstream myfile(filename.c_str()); if (myfile.is_open()){ string line; string charLetter; bool doesListExist = false; DLList* list; while (getline(myfile,line)){ charLetter = line.at(0); line.erase(0,1); int newNumber = 0; stringstream converter(line); converter >> newNumber; //creating a list. if(charLetter == "C"){ if(doesListExist == false){ list = new DLList; } else if (doesListExist == true){ delete list; list = new DLList; } cout << "LIST CREATED" << endl; doesListExist = true; } //clear the list if there is a list. if(charLetter == "X" && doesListExist == true){ list->clear(); cout << "LIST CLEARED" << endl; } //delete the list if there is a list. if(charLetter == "D" && doesListExist == true){ delete list; list = NULL; cout << "LIST DELETED" << endl; doesListExist = false; } //insert a newNumber into the list if there is list. if(charLetter == "I" && doesListExist == true){ list->insert(newNumber); cout << "VALUE " << newNumber << " INSERTED" << endl; } //add a newNumber into the front of the list if there is list. if(charLetter == "F" && doesListExist == true){ list->pushFront(newNumber); cout << "VALUE " << newNumber << " ADDED TO HEAD" << endl; } //insert a newNumber into the back of the list if there is list. if(charLetter == "B" && doesListExist == true){ list->pushBack(newNumber); cout << "VALUE " << newNumber << " ADDED TO TAIL" << endl; } //get the first element in the list if there is list. if(charLetter == "A" && doesListExist == true){ try{ btassert<bool>(list->getSize() != 0); cout << "VALUE " << list->getFront() << " AT HEAD" << endl; } catch (bool b){ cout << "LIST EMPTY" << endl; } } //get the last element in the list if there is list. if(charLetter == "Z" && doesListExist == true){ try{ btassert<bool>(list->getSize() != 0); cout << "VALUE " << list->getBack() << " AT TAIL" << endl; } catch (bool b){ cout << "LIST EMPTY" << endl; } } //remove element from front of the list if there is a list. if(charLetter == "T" && doesListExist == true){ if(list->getSize() == 0){ cout << "LIST EMPTY" << endl; } else{ list->popFront(); cout << "REMOVED HEAD" << endl; } } //remove element from back of the list if there is a list. if(charLetter == "K" && doesListExist == true){ if(list->getSize() == 0){ cout << "LIST EMPTY" << endl; } else{ list->popBack(); cout << "REMOVED TAIL" << endl; } } //get an element from the list if there is a list. if(charLetter == "G" && doesListExist == true){ if(list->get(newNumber) == true){ cout << "VALUE " << newNumber << " FOUND" << endl; } else{ cout << "VALUE " << newNumber << " NOT FOUND" << endl; } } //eliminate all the same element, the element to be eliminate will be newNumber. if(charLetter == "E" && doesListExist == true){ if(list->removeAll(newNumber) == true){ cout <<"VALUE " << newNumber << " ELIMINATED" << endl; } else{ cout << "VALUE " << newNumber << " NOT FOUND" << endl; } } //remove an element from the list, the element to be remove will be newNumber. if(charLetter == "R" && doesListExist == true){ if(list->removeFirst(newNumber) == true){ cout << "VALUE " << newNumber << " REMOVED" << endl; } else{ cout << "VALUE " << newNumber << " NOT FOUND" << endl; } } //show number of element in the list. if(charLetter == "N" && doesListExist == true){ cout << "LIST SIZE IS " << list->getSize() << endl; } //print the element(s) in the list. if(charLetter == "P" && doesListExist == true){ if(list->getSize() == 0){ cout << "LIST EMPTY" << endl; } else{ cout << *list << endl; } } //display message if there is no list for an operation. if(doesListExist == false && charLetter != "#" && line != ""){ cout << "MUST CREATE LIST INSTANCE" << endl; } } myfile.close(); //delete the list if there is a list before exiting. NULL list pointer. if(doesListExist == true){ delete list; list = NULL; } }
int main(int argc, char* argv[]) { DLList* list; stringstream ss; string strValue; int intValue; if (argc != 2) { cout << "USAGE: " << argv[0] << " FILENAME" << endl; } else { string currentLine; char input; cout << "PROCESSING FILE: " << argv[1] << endl; ifstream theFile(argv[1]); if (theFile.good()) { while (getline(theFile, currentLine)) { ss.clear(); intValue = 0; strValue = ""; bool activeList = false; input = currentLine.at(0); switch (input) { case 'C': if (activeList == false) list = new DLList; else if (activeList == true) { delete list; list = new DLList; } activeList = true; cout << "LIST CREATED" << endl; break; case 'X': list->clear(); cout << "LIST CLEARED" << endl; break; case 'D': delete list; list = NULL; cout << "LIST DELETED" << endl; break; case 'I': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; cout << "VALUE " << intValue << " INSERTED" << endl; list->insert(intValue); break; case 'F': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; cout << "VALUE " << intValue << " ADDED TO HEAD" << endl; list->pushFront(intValue); break; case 'B': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; cout << "VALUE " << intValue << " ADDED TO TAIL" << endl; list->pushBack(intValue); break; case 'A': cout << "VALUE " << list->getFront() << " AT HEAD" << endl; break; case 'Z': cout << "VALUE " << list->getBack() << " AT TAIL" << endl; break; case 'T': list->popFront(); cout << "REMOVED HEAD" << endl; break; case 'K': list->popBack(); cout << "REMOVED TAIL" << endl; break; case 'E': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; if (list->removeAll(intValue)) cout << "VALUE " << intValue << " ELIMINATED" << endl; else cout << "VALUE " << intValue << " NOT FOUND" << endl; break; case 'G': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; if (list->get(intValue)) cout << "VALUE " << intValue << " FOUND" << endl; else cout << "VALUE " << intValue << " NOT FOUND" << endl; break; case 'P': cout << list->toString() << endl; break; case 'N': cout << "LIST SIZE IS " << list->getSize() << endl; break; case 'R': strValue = currentLine.substr(2); ss << strValue; ss >> intValue; if (list->removeFirst(intValue)) cout << "VALUE " << intValue << " REMOVED" << endl; else cout << "VALUE " << intValue << " NOT FOUND" << endl; break; default: cout << "UNKNOWN COMMAND" << endl; break; } } } theFile.close(); } return 0; }