@Test
	public void testCoversIntersectsRange() throws CodeUnitInsertionException {
		AddressRange all = b.range(0, -1);

		assertTrue(coversTwoWays(manager.codeUnits(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.codeUnits(), Lifespan.ALL, all));

		assertTrue(coversTwoWays(manager.data(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.data(), Lifespan.ALL, all));

		assertFalse(coversTwoWays(manager.definedUnits(), Lifespan.ALL, all));
		assertFalse(intersectsTwoWays(manager.definedUnits(), Lifespan.ALL, all));

		assertFalse(coversTwoWays(manager.instructions(), Lifespan.ALL, all));
		assertFalse(intersectsTwoWays(manager.instructions(), Lifespan.ALL, all));

		assertFalse(coversTwoWays(manager.definedData(), Lifespan.ALL, all));
		assertFalse(intersectsTwoWays(manager.definedData(), Lifespan.ALL, all));

		assertTrue(coversTwoWays(manager.undefinedData(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.undefinedData(), Lifespan.ALL, all));

		TraceData d4000;
		TraceData d4004;
		TraceInstruction i4008;
		try (Transaction tx = b.startTransaction()) {
			d4000 = b.addData(0, b.addr(0x4000), IntegerDataType.dataType, b.buf(1, 2, 3, 4));
			d4000.setEndSnap(9);
			d4004 = b.addData(0, b.addr(0x4004), IntegerDataType.dataType, b.buf(5, 6, 7, 8));
			d4004.setEndSnap(5);
			i4008 = b.addInstruction(0, b.addr(0x4008), b.host, b.buf(0xf4, 0));
			i4008.setEndSnap(9);
		}

		assertTrue(coversTwoWays(manager.codeUnits(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.codeUnits(), Lifespan.ALL, all));

		assertFalse(coversTwoWays(manager.data(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.data(), Lifespan.ALL, all));
		assertTrue(coversTwoWays(manager.data(), Lifespan.ALL, b.range(0x0000, 0x4007)));
		assertTrue(coversTwoWays(manager.data(), Lifespan.ALL, b.range(0x400a, -0x0001)));
		assertTrue(coversTwoWays(manager.data(), Lifespan.toNow(-1), all));
		assertTrue(coversTwoWays(manager.data(), Lifespan.nowOn(10), all));
		assertFalse(
			intersectsTwoWays(manager.data(), Lifespan.span(0, 9), b.range(0x4008, 0x4009)));

		assertFalse(coversTwoWays(manager.definedUnits(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.definedUnits(), Lifespan.ALL, all));
		assertTrue(
			coversTwoWays(manager.definedUnits(), Lifespan.span(0, 5), b.range(0x4000, 0x4009)));
		assertTrue(
			coversTwoWays(manager.definedUnits(), Lifespan.span(0, 9), b.range(0x4001, 0x4003)));
		assertTrue(
			coversTwoWays(manager.definedUnits(), Lifespan.span(0, 9), b.range(0x4008, 0x4009)));
		assertFalse(
			intersectsTwoWays(manager.definedUnits(), Lifespan.ALL, b.range(0x0000, 0x3fff)));
		assertFalse(
			intersectsTwoWays(manager.definedUnits(), Lifespan.ALL, b.range(0x400a, -0x0001)));
		assertFalse(intersectsTwoWays(manager.definedUnits(), Lifespan.toNow(-1), all));
		assertFalse(intersectsTwoWays(manager.definedUnits(), Lifespan.nowOn(10), all));
		assertFalse(
			intersectsTwoWays(manager.definedUnits(), Lifespan.nowOn(6), b.range(0x4004, 0x4007)));

		assertFalse(coversTwoWays(manager.instructions(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.instructions(), Lifespan.ALL, all));
		assertTrue(
			coversTwoWays(manager.instructions(), Lifespan.span(0, 9), b.range(0x4008, 0x4009)));
		assertFalse(intersectsTwoWays(manager.instructions(), Lifespan.toNow(-1), all));
		assertFalse(intersectsTwoWays(manager.instructions(), Lifespan.nowOn(10), all));
		assertFalse(
			intersectsTwoWays(manager.instructions(), Lifespan.ALL, b.range(0x0000, 0x4007)));
		assertFalse(
			intersectsTwoWays(manager.instructions(), Lifespan.ALL, b.range(0x400a, -0x0001)));

		assertFalse(coversTwoWays(manager.definedData(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.definedData(), Lifespan.ALL, all));
		assertTrue(
			coversTwoWays(manager.definedData(), Lifespan.span(0, 5), b.range(0x4000, 0x4007)));
		assertTrue(
			coversTwoWays(manager.definedData(), Lifespan.span(0, 9), b.range(0x4001, 0x4003)));
		assertFalse(
			intersectsTwoWays(manager.definedData(), Lifespan.ALL, b.range(0x0000, 0x3fff)));
		assertFalse(
			intersectsTwoWays(manager.definedData(), Lifespan.ALL, b.range(0x4008, -0x0001)));
		assertFalse(intersectsTwoWays(manager.definedData(), Lifespan.toNow(-1), all));
		assertFalse(intersectsTwoWays(manager.definedData(), Lifespan.nowOn(10), all));
		assertFalse(
			intersectsTwoWays(manager.definedData(), Lifespan.nowOn(6), b.range(0x4004, -0x0001)));

		assertFalse(coversTwoWays(manager.undefinedData(), Lifespan.ALL, all));
		assertTrue(intersectsTwoWays(manager.undefinedData(), Lifespan.ALL, all));
		assertTrue(coversTwoWays(manager.undefinedData(), Lifespan.ALL, b.range(0x0000, 0x3fff)));
		assertTrue(coversTwoWays(manager.undefinedData(), Lifespan.ALL, b.range(0x400a, -0x0001)));
		assertTrue(coversTwoWays(manager.undefinedData(), Lifespan.toNow(-1), all));
		assertTrue(coversTwoWays(manager.undefinedData(), Lifespan.nowOn(10), all));
		assertTrue(
			coversTwoWays(manager.undefinedData(), Lifespan.nowOn(6), b.range(0x4004, 0x4007)));
		assertFalse(intersectsTwoWays(manager.undefinedData(), Lifespan.span(0, 5),
			b.range(0x4000, 0x4009)));
		assertFalse(intersectsTwoWays(manager.undefinedData(), Lifespan.span(0, 9),
			b.range(0x4001, 0x4003)));
		assertFalse(intersectsTwoWays(manager.undefinedData(), Lifespan.span(0, 9),
			b.range(0x4008, 0x4009)));
	}
This test is interesting because the pointer type def causes an update to the data type
settings <em>while the unit is still being created</em>. This will invalidate the trace's
caches. All of them, including the defined data units, which can become the cause of many
timing issues.
Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/database/listing/DBTraceCodeManagerTest.java