@Test
	public void testReplaceToUnsetInline() throws Exception {
		mtf.initialize("NotepadMergeListingTest", new ProgramModifierListener() {
			@Override
			public void modifyLatest(ProgramDB program) {
				// P1 program
				FunctionManager functionMgr = program.getFunctionManager();
				try {
					Function f = functionMgr.getFunctionAt(addr(program, "0x01004132"));
					f.setInline(true);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				// P2 program
				FunctionManager functionMgr = program.getFunctionManager();
				try {
					Function f = functionMgr.getFunctionAt(addr(program, "0x01004132"));
					// Already has a "undefined4 param_1".
					Variable var = new LocalVariableImpl(null, new DWordDataType(), 8, program);
					f.addParameter(var, SourceType.USER_DEFINED);
				}
				catch (Exception e) {
					Assert.fail(e.getMessage());
				}
			}
		});

		p1 = mtf.getResultProgram();
		p2 = mtf.getPrivateProgram();
		Address entryPoint1 = addr(p1, "0x01004132");
		FunctionManager fm1 = p1.getFunctionManager();

		int txId = p1.startTransaction("Merge into Program 1");
		boolean commit = false;
		try {
			AddressSet setToDiff = new AddressSet();
			setToDiff.addRange(addr(p1, "0x01004132"), addr(p1, "0x01004132"));
			programMerge = new ProgramMergeManager(p1, p2, setToDiff);

			programMerge.setDiffFilter(new ProgramDiffFilter(
				ProgramDiffFilter.SYMBOL_DIFFS | ProgramDiffFilter.FUNCTION_DIFFS));
			programMerge.setMergeFilter(
				new ProgramMergeFilter(ProgramMergeFilter.FUNCTIONS, ProgramMergeFilter.REPLACE));
			AddressSet expectedDiffs = new AddressSet();
			expectedDiffs.addRange(addr(p1, "0x01004132"), addr(p1, "0x01004132"));
			assertEquals(expectedDiffs, programMerge.getFilteredDifferences());

			AddressSet mergeSet = new AddressSet();
			mergeSet.addRange(addr(p1, "0x01004132"), addr(p1, "0x01004132"));
			programMerge.merge(mergeSet, TaskMonitor.DUMMY);

			assertEquals(new AddressSet(), programMerge.getFilteredDifferences());

			Function f = fm1.getFunctionAt(entryPoint1);
			assertEquals("FUN_01004132", f.getName());
			assertEquals(false, f.isInline());
			assertEquals(2, f.getParameterCount());
			Parameter[] parameters = f.getParameters();
			assertTrue(parameters[0].getDataType().isEquivalent(new Undefined4DataType()));
			assertEquals("param_1", parameters[0].getName());
			assertTrue(parameters[1].getDataType().isEquivalent(new DWordDataType()));
			assertEquals("param_2", parameters[1].getName());
			commit = true;
		}
		finally {
			p1.endTransaction(txId, commit);
		}
	}
<CODE>ProgramMerge2Test</CODE> tests the <CODE>ProgramMerge</CODE> class
to verify it correctly merges various types of program differences.
The tests modify copies of the same program to cause differences
between these two programs, which can then be merged.
Ghidra/Features/Base/src/test.slow/java/ghidra/program/util/ProgramMerge2Test.java