void TestSupportLibrary::compareStates(State firstState, State secondState) { int i; vector<Task> firstStateTaskList = firstState.getAllTasks(); vector<Task> secondStateTaskList = secondState.getAllTasks(); // Number of tasks in both states should be equal. Assert::AreEqual(firstStateTaskList.size(), secondStateTaskList.size()); for (i=0; unsigned(i)<firstStateTaskList.size(); i++) { // Every task should be equal for both states. compareTasks(firstStateTaskList[i], secondStateTaskList[i]); } // Both the user messages and the action messages from both states // should be equal. Assert::AreEqual(firstState.getUserMessage(), secondState.getUserMessage()); Assert::AreEqual(firstState.getActionMessage(), secondState.getActionMessage()); return; }
/// if ret == 0 task1 is equal to task2 else no int compareTasks(Task *task1, Task *task2){ int ret = 0; ret = taskIdListCompare(task1->myDeps, task2->myDeps); if (ret != 0) return 1; if (task1->dependsOnMe == NULL) { if (task2->dependsOnMe != NULL) { if (0 != taskIdListGetSize(task2->dependsOnMe)) { return -1; } } } else { if (task2->dependsOnMe == NULL) { if (0 != taskIdListGetSize(task1->dependsOnMe)) { return 1; } } else { ret = taskIdListCompare(task1->dependsOnMe, task2->dependsOnMe); if (ret != 0) return ret; } } if (task1->id != task2->id) { return 1; } if(task1->endedTasks != task2->endedTasks || task1->metaSize != task2->metaSize || task1->state != task2->state){ return 1; } if(memcmp(task1->metadata, task2->metadata, task1->metaSize)) return 1; // Vereify if task2->children has HashIntVoidIterator *it1 = createHashIntVoidIterator(task1->children, 0); PosHandlerIntVoid pos1 = hashIntVoidIteratorNext(it1, task1->children); while (pos1!=NULL) { Task *child1 = posGetValue(pos1); PosHandlerIntVoid pos2 = hashIntVoidGet(task2->children, posGetKey(pos1)); Task *child2 = posGetValue(pos2); ret = compareTasks(child1, child2); if (ret != 0) return ret; pos1 = hashIntVoidIteratorNext(it1, task1->children); } HashIntVoidIterator *it2 = createHashIntVoidIterator(task2->children, 0); PosHandlerIntVoid pos2 = hashIntVoidIteratorNext(it2, task2->children); while (pos2!=NULL) { Task *child2 = posGetValue(pos2); pos1 = hashIntVoidGet(task1->children, posGetKey(pos2)); Task *child1 = posGetValue(pos1); ret = compareTasks(child1, child2); if (ret != 0) return ret; pos2 = hashIntVoidIteratorNext(it2, task2->children); } return 0; }