@Test
	public void testFunctionReferenceCorrelator_allFunctionMatches() throws Exception {

		//Run Exact Symbol Name Correlator (because no exact instruction matches)
		String exactSymbolNameCorrelator = "Exact Symbol Name Match";
		runTestCorrelator(exactSymbolNameCorrelator);
		Assert.assertNotEquals("vtMatchSet does not exist", null,
			getVTMatchSet(exactSymbolNameCorrelator));

		//Run the Exact Data Correlator		
		String exactDataCorrelator = "Exact Data Match";
		runTestCorrelator(exactDataCorrelator);
		Assert.assertNotEquals("vtMatchSet does not exist", null,
			getVTMatchSet(exactDataCorrelator));

		// apply all matches
		List<VTMatchSet> matchSets = session.getMatchSets();
		for (VTMatchSet ms : matchSets) {
			AcceptMatchTask task = new AcceptMatchTask(controller, (List<VTMatch>) ms.getMatches());
			runTask(task);
		}

		// Create Manual Dummy matches
		List<VTAssociationPair> associations = new ArrayList<>();
		//bob -	bob
		associations.add(
			associate(addr(srcProg, "0040063e"), addr(destProg, "080484ca"), FUNCTION));
		//frame_dummy	frame_dummy
		associations.add(
			associate(addr(srcProg, "00400600"), addr(destProg, "08048480"), FUNCTION));
		//__libc_csu_fini	__libc_csu_fini
		associations.add(
			associate(addr(srcProg, "00400860"), addr(destProg, "080486b0"), FUNCTION));
		//_init	_init
		associations.add(
			associate(addr(srcProg, "004004b0"), addr(destProg, "08048334"), FUNCTION));

		//__do_global_ctors_aux	__do_global_ctors_aux
		associations.add(
			associate(addr(srcProg, "00400900"), addr(destProg, "08048720"), FUNCTION));
		//goodbye	goodbye
		associations.add(
			associate(addr(srcProg, "00400764"), addr(destProg, "080485b7"), FUNCTION));
		//_start	_start
		associations.add(
			associate(addr(srcProg, "00400540"), addr(destProg, "080483f0"), FUNCTION));
		//main	main
		associations.add(
			associate(addr(srcProg, "0040079c"), addr(destProg, "080485f3"), FUNCTION));
		//__do_global_dtors_aux	__do_global_dtors_aux
		associations.add(
			associate(addr(srcProg, "00400590"), addr(destProg, "08048420"), FUNCTION));
		//hello	hello
		associations.add(
			associate(addr(srcProg, "00400738"), addr(destProg, "08048581"), FUNCTION));
		//__libc_csu_init	__libc_csu_init
		associations.add(
			associate(addr(srcProg, "00400870"), addr(destProg, "080486c0"), FUNCTION));
		//mypow	mypow
		associations.add(
			associate(addr(srcProg, "00400624"), addr(destProg, "080484a4"), FUNCTION));
		//_fini	_fini
		associations.add(
			associate(addr(srcProg, "00400938"), addr(destProg, "0804874c"), FUNCTION));

		/* apply the manual matches created above */
		final Collection<VTMatch> funMatches = createMatchSet(session, associations).getMatches();
		for (VTMatch match : funMatches) {

			acceptMatch(match);
		}

		//run the Combined Data and Function reference correlator		
		runTestCorrelatorWithDefaultOptions(testCorrelator);

		VTMatchSet testMatchSet = getVTMatchSet(testCorrelator);
		Assert.assertNotEquals("vtMatchSet does not exist", null, testMatchSet);

		//make a set of test match pairs
		Set<VTAssociationPair> testMatchPairs = getMatchAddressPairs(testMatchSet);

		// Construct the set of expected matches based on function matches
		Set<VTAssociationPair> expectedMatchPairs = new HashSet<>();
		expectedMatchPairs.add(associate(addr(srcProg, "00400540"), addr(destProg, "080483f0")));  // src:_start 			dst: _start
		expectedMatchPairs.add(associate(addr(srcProg, "00400938"), addr(destProg, "0804874c")));  // src:_fini 			dst: _fini
		expectedMatchPairs.add(associate(addr(srcProg, "004004b0"), addr(destProg, "08048334")));  // src:_init 			dst: _init
		expectedMatchPairs.add(associate(addr(srcProg, "0040063e"), addr(destProg, "080484ca")));  // src: bob 				dst: bob
		expectedMatchPairs.add(associate(addr(srcProg, "00400738"), addr(destProg, "08048581")));  // src: hello 			dst: hello
		expectedMatchPairs.add(associate(addr(srcProg, "00400764"), addr(destProg, "080485b7")));  // src: goodbye 			dst: goodbye
		expectedMatchPairs.add(associate(addr(srcProg, "0040079c"), addr(destProg, "080485f3")));  // src: main 			dst: main
		expectedMatchPairs.add(associate(addr(srcProg, "00400870"), addr(destProg, "080486c0")));  // src:__libc_csu_init 	dst: __libc_csu_init

		// New functions found with updated scoring method
		expectedMatchPairs.add(associate(addr(srcProg, "00400590"), addr(destProg, "08048420")));  // src: __do_global_dtors_aux		dst:__do_global_dtors_aux
		expectedMatchPairs.add(associate(addr(srcProg, "00400900"), addr(destProg, "08048720")));  // src: __do_global_ctors_aux	 	dst:__do_global_ctors_aux
		expectedMatchPairs.add(associate(addr(srcProg, "00400600"), addr(destProg, "08048480")));  // src: frame_dummy		dst: frame_dummy

		//This tests that all the expected matches are right and there are no extra
		assertMatchPairs(expectedMatchPairs, testMatchPairs);

	}
*********************************************************************************
Run the Exact Symbol Name correlator and accept all function matches, 
then run the Exact Data Match Correlator and accept all matches
then accept manually created matches
then run the Combined Data and Function reference correlator 
and test that only the expected matches are found

@throws Exception
Ghidra/Features/VersionTracking/src/test.slow/java/ghidra/feature/vt/gui/provider/VTCombinedFunctionDataReferenceCorrelator_ELF_Test.java