protected void assertLogicalBreakpointForMappedBookmarkAnd2TraceBreakpoints(Trace trace1,
			Trace trace2) {
		assertEquals(2, breakpointService.getAllBreakpoints().size());

		LogicalBreakpoint enLb = Unique
				.assertOne(breakpointService.getBreakpointsAt(program, addr(program, 0x00400123)));
		assertEquals(program, enLb.getProgram());
		assertEquals(addr(program, 0x00400123), enLb.getProgramLocation().getAddress());
		assertEquals(enBm, enLb.getProgramBookmark());
		assertEquals(Set.of(trace1, trace2), enLb.getMappedTraces());
		assertEquals(addr(trace1, 0x55550123), enLb.getTraceAddress(trace1));
		assertEquals(addr(trace2, 0x55551123), enLb.getTraceAddress(trace2));

		TraceBreakpoint bpt1 = Unique.assertOne(trace1.getBreakpointManager().getAllBreakpoints());
		TraceBreakpoint bpt2 = Unique.assertOne(trace2.getBreakpointManager().getAllBreakpoints());
		assertEquals(Set.of(bpt1), enLb.getTraceBreakpoints(trace1));
		assertEquals(Set.of(bpt2), enLb.getTraceBreakpoints(trace2));
		assertNotEquals(Set.of(bpt2), enLb.getTraceBreakpoints(trace1)); // Sanity check
		assertNotEquals(Set.of(bpt1), enLb.getTraceBreakpoints(trace2)); // Sanity check
		assertEquals(Set.of(bpt1, bpt2), enLb.getTraceBreakpoints());

		assertEquals(State.ENABLED, enLb.computeStateForProgram(program));
		assertEquals(State.ENABLED, enLb.computeStateForTrace(trace1));
		assertEquals(State.ENABLED, enLb.computeStateForTrace(trace2));

		LogicalBreakpoint disLb = Unique
				.assertOne(breakpointService.getBreakpointsAt(program, addr(program, 0x00400321)));
		assertEquals(program, disLb.getProgram());
		assertEquals(addr(program, 0x00400321), disLb.getProgramLocation().getAddress());
		assertEquals(disBm, disLb.getProgramBookmark());
		assertEquals(Set.of(trace1, trace2), disLb.getMappedTraces());
		assertEquals(addr(trace1, 0x55550321), disLb.getTraceAddress(trace1));
		assertEquals(addr(trace2, 0x55551321), disLb.getTraceAddress(trace2));
		assertEquals(Set.of(), disLb.getTraceBreakpoints(trace1));
		assertEquals(Set.of(), disLb.getTraceBreakpoints(trace2));
		assertEquals(Set.of(), disLb.getTraceBreakpoints());
		assertEquals(State.INEFFECTIVE_DISABLED, disLb.computeStateForProgram(program));
		assertEquals(State.NONE, disLb.computeStateForTrace(trace1));
		assertEquals(State.NONE, disLb.computeStateForTrace(trace2));
	}
Tracks the current set of logical breakpoints.

<p>
Its assertions require perfection in the sequence of events: 1) No double-adds. 2) No
double-removes. 3) No extraneous updates. At the end of each test, the current set of
breakpoints in this listener should be verified against those reported by the service.
Ghidra/Test/DebuggerIntegrationTest/src/test/java/ghidra/app/plugin/core/debug/service/breakpoint/AbstractDebuggerLogicalBreakpointServiceTest.java