void SystemTest2::processUses() {
	string source = "..\\..\\Tests\\TestDesignExtractorSource.txt";
	Parser parser;
	PKB pkb;
	DesignExtractor designextractor;
	
	parser.parse(source);
	parser.buildPKB();
	designextractor.buildPKB();

	int A = pkb.getProcIndex("A").at(0);
	int B = pkb.getProcIndex("B").at(0);
	int C = pkb.getProcIndex("C").at(0);
	int D = pkb.getProcIndex("D").at(0);
	int E = pkb.getProcIndex("E").at(0);

	int x = pkb.getVarIndex("x");
	int a = pkb.getVarIndex("a");
	int w = pkb.getVarIndex("w");
	int c = pkb.getVarIndex("c");
	int b = pkb.getVarIndex("b");
	int k = pkb.getVarIndex("k");
	int loops = pkb.getVarIndex("loops");
	int newvar = pkb.getVarIndex("new");
	int yes = pkb.getVarIndex("yes");

	vector<int> usedvars = pkb.getUsedVarAtProc(A);
	sort(usedvars.begin(), usedvars.end());
	int vars[] = {x, a, w, c, b, k, loops, newvar, yes};
	vector<int> expectedvars(vars, vars + sizeof(vars) / sizeof(int) );
	sort(expectedvars.begin(), expectedvars.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars.at(0), usedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(1), usedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(2), usedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(3), usedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(4), usedvars.at(4));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(5), usedvars.at(5));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(6), usedvars.at(6));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(7), usedvars.at(7));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(8), usedvars.at(8));

	usedvars = pkb.getUsedVarAtProc(B);
	sort(usedvars.begin(), usedvars.end());
	int vars2[] = { a, c, b, k, loops, newvar, yes};
	vector<int> expectedvars2(vars2, vars2 + sizeof(vars2) / sizeof(int) );
	sort(expectedvars2.begin(), expectedvars2.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(0), usedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(1), usedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(2), usedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(3), usedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(4), usedvars.at(4));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(5), usedvars.at(5));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(6), usedvars.at(6));

	usedvars = pkb.getUsedVarAtProc(C);
	sort(usedvars.begin(), usedvars.end());
	int vars3[] = { a, c, k, loops, yes};
	vector<int> expectedvars3(vars3, vars3 + sizeof(vars3) / sizeof(int) );
	sort(expectedvars3.begin(), expectedvars3.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars3.at(0), usedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars3.at(1), usedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars3.at(2), usedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars3.at(3), usedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars3.at(4), usedvars.at(4));
}
void SystemTest2::processModifyLoopProc() {
	string source = "..\\..\\Tests\\TestDesignExtractorSource2.txt";
	Parser parser;
	PKB pkb;
	DesignExtractor designextractor;
	
	parser.parse(source);
	parser.buildPKB();
	designextractor.buildPKB();

	int A = pkb.getProcIndex("A").at(0);
	int B = pkb.getProcIndex("B").at(0);
	int C = pkb.getProcIndex("C").at(0);
	int D = pkb.getProcIndex("D").at(0);

	int x = pkb.getVarIndex("x");
	int a = pkb.getVarIndex("a");
	int c = pkb.getVarIndex("c");
	int k = pkb.getVarIndex("k");
	int loops = pkb.getVarIndex("loops");
	int j = pkb.getVarIndex("j");
	int b = pkb.getVarIndex("b");
	int fruit = pkb.getVarIndex("fruit");

	CPPUNIT_ASSERT(pkb.isCalls(C, D));
	CPPUNIT_ASSERT(pkb.isCalls(A, B));
	CPPUNIT_ASSERT(pkb.isCalls(B, C));
	CPPUNIT_ASSERT(pkb.isCalls(C, A));

	CPPUNIT_ASSERT(pkb.isCallStar(A, B));
	CPPUNIT_ASSERT(pkb.isCallStar(A, A));
	CPPUNIT_ASSERT(pkb.isCallStar(A, D));
	CPPUNIT_ASSERT(pkb.isCallStar(B, A));

	vector<int> modifiedvars = pkb.getModifiedVarAtProc(A);
	sort(modifiedvars.begin(), modifiedvars.end());
	int vars[] = {x, a, c, k, loops, j, b, fruit};
	vector<int> expectedvars(vars, vars + sizeof(vars) / sizeof(int) );
	sort(expectedvars.begin(), expectedvars.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars.at(0), modifiedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(1), modifiedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(2), modifiedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(3), modifiedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(4), modifiedvars.at(4));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(5), modifiedvars.at(5));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(6), modifiedvars.at(6));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(7), modifiedvars.at(7));

	modifiedvars = pkb.getModifiedVarAtProc(B);
	sort(modifiedvars.begin(), modifiedvars.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars.at(0), modifiedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(1), modifiedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(2), modifiedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(3), modifiedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(4), modifiedvars.at(4));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(5), modifiedvars.at(5));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(6), modifiedvars.at(6));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(7), modifiedvars.at(7));

	modifiedvars = pkb.getModifiedVarAtProc(C);
	sort(modifiedvars.begin(), modifiedvars.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars.at(0), modifiedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(1), modifiedvars.at(1));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(2), modifiedvars.at(2));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(3), modifiedvars.at(3));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(4), modifiedvars.at(4));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(5), modifiedvars.at(5));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(6), modifiedvars.at(6));
	CPPUNIT_ASSERT_EQUAL(expectedvars.at(7), modifiedvars.at(7));

	modifiedvars = pkb.getModifiedVarAtProc(D);
	sort(modifiedvars.begin(), modifiedvars.end());
	int vars2[] = {b, fruit};
	vector<int> expectedvars2(vars2, vars2 + sizeof(vars2) / sizeof(int) );
	sort(expectedvars2.begin(), expectedvars2.end());

	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(0), modifiedvars.at(0));
	CPPUNIT_ASSERT_EQUAL(expectedvars2.at(1), modifiedvars.at(1));
}