@Test
	public void testAddDiffLocalVarsPickLatestAndMy() throws Exception {
		// 0100194b		FUN_0100194b	body:100194b-1001977
		// 01001978		FUN_01001978	body:1001978-1001ae2
		// 01001ae3		FUN_01001ae3	body:1001ae3-100219b

		// 01002950		FUN_01002950	body:1002950-100299d
		// 0100299e		FUN_0100299e	body:100299e-1002a90
		// 01002a91		FUN_01002a91	body:1002a91-1002b43

		final Variable[] latestLocal4 = new Variable[1];
		final Variable[] latestLocal8 = new Variable[1];
		final Variable[] latestLocalC = new Variable[1];
		final Variable[] myLocal4 = new Variable[1];
		final Variable[] myLocala = new Variable[1];
		final Variable[] myLocal30 = new Variable[1];

		mtf.initialize("NotepadMergeListingTest", new ProgramModifierListener() {

			@Override
			public void modifyLatest(ProgramDB program) {
				try {
					latestLocal4[0] =
						new LocalVariableImpl("local_4", new ByteDataType(), -4, program);
					latestLocal8[0] =
						new LocalVariableImpl("local_8", new Undefined4DataType(), -8, program);
					latestLocalC[0] =
						new LocalVariableImpl("local_c", new ByteDataType(), -0xc, program);

					AddressSet body1001979 =
						new AddressSet(addr(program, "0x1001979"), addr(program, "0x100199a"));
					createFunction(program, "0x1001979", "FUN_01001979", body1001979);
					Function func = getFunction(program, "0x1001979"); // has single param at 0xc?
					func.addLocalVariable(latestLocal4[0], SourceType.USER_DEFINED);
					func.addLocalVariable(latestLocal8[0], SourceType.USER_DEFINED);

					AddressSet body10029a1 =
						new AddressSet(addr(program, "0x10029a1"), addr(program, "0x10029ca"));
					createFunction(program, "0x10029a1", "FUN_010029a1", body10029a1);
					func = getFunction(program, "0x10029a1");
					func.addLocalVariable(latestLocalC[0], SourceType.USER_DEFINED);
				}
				catch (Exception e) {
					e.printStackTrace();
					Assert.fail(e.getMessage());
				}
			}

			@Override
			public void modifyPrivate(ProgramDB program) {
				try {
					myLocal4[0] = new LocalVariableImpl("local_4", new WordDataType(), -4, program);
					myLocala[0] =
						new LocalVariableImpl("local_a", new Undefined4DataType(), -0xa, program);
					myLocal30[0] =
						new LocalVariableImpl("local_30", new ByteDataType(), -0x30, program);

					AddressSet body1001979 =
						new AddressSet(addr(program, "0x1001979"), addr(program, "0x100199a"));
					createFunction(program, "0x1001979", "FUN_01001979", body1001979);
					Function func = getFunction(program, "0x1001979");
					func.addLocalVariable(myLocal4[0], SourceType.USER_DEFINED);
					func.addLocalVariable(myLocala[0], SourceType.USER_DEFINED);

					AddressSet body10029a1 =
						new AddressSet(addr(program, "0x10029a1"), addr(program, "0x10029ca"));
					createFunction(program, "0x10029a1", "FUN_010029a1", body10029a1);
					func = getFunction(program, "0x10029a1");
					func.addLocalVariable(myLocal30[0], SourceType.USER_DEFINED);
				}
				catch (Exception e) {
					e.printStackTrace();
					Assert.fail(e.getMessage());
				}
			}
		});

		executeMerge(ASK_USER);
		chooseListRadioButton(LATEST_LIST_BUTTON_NAME); // stack overlap: -0x4:1 vs. -0x4:2 @ 01001979 - pick LATEST
		chooseListRadioButton(CHECKED_OUT_LIST_BUTTON_NAME); // stack overlap: -0xa:4 vs. -0x8:4 @ 01001979 - pick CHECKED_OUT

		waitForMergeCompletion();

		AddressSet body1001979 = new AddressSet(addr("0x1001979"), addr("0x100199a"));
		checkFunction(resultProgram, "0x1001979", "FUN_01001979", body1001979);
		Function func = getFunction(resultProgram, "0x1001979");
		Variable[] vars = func.getLocalVariables();
		assertEquals(2, vars.length);
		assertEquals(latestLocal4[0], vars[0]);
		assertEquals(myLocala[0], vars[1]);

		func = getFunction(resultProgram, "0x10029a1");
		vars = func.getLocalVariables();
		assertEquals(2, vars.length);
		assertEquals(latestLocalC[0], vars[0]);
		assertEquals(myLocal30[0], vars[1]);
	}
Test the merge of the versioned program's listing.
Ghidra/Features/Base/src/test.slow/java/ghidra/app/merge/listing/FunctionMergeManagerTest.java