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;
}
Пример #2
0
/// 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;
}