@Test
	public void testGet() throws CodeUnitInsertionException {
		assertAllUndefined(12, b.addr(0x3fff), 1,
			manager.codeUnits().get(0, b.addr(0x3fff), b.addr(0x400a), true));
		assertAllUndefined(12, b.addr(0x400a), -1,
			manager.codeUnits().get(0, b.addr(0x3fff), b.addr(0x400a), false));

		assertAllUndefined(12, b.addr(0x3fff), 1,
			manager.data().get(0, b.addr(0x3fff), b.addr(0x400a), true));
		assertAllUndefined(12, b.addr(0x400a), -1,
			manager.data().get(0, b.addr(0x3fff), b.addr(0x400a), false));

		assertEquals(List.of(),
			list(manager.definedUnits().get(0, b.addr(0x3fff), b.addr(0x400a), true)));
		assertEquals(List.of(),
			list(manager.definedUnits().get(0, b.addr(0x3fff), b.addr(0x400a), false)));

		assertEquals(List.of(),
			list(manager.instructions().get(0, b.addr(0x3fff), b.addr(0x400a), true)));
		assertEquals(List.of(),
			list(manager.instructions().get(0, b.addr(0x3fff), b.addr(0x400a), false)));

		assertEquals(List.of(),
			list(manager.definedData().get(0, b.addr(0x3fff), b.addr(0x400a), true)));
		assertEquals(List.of(),
			list(manager.definedData().get(0, b.addr(0x3fff), b.addr(0x400a), false)));

		assertAllUndefined(12, b.addr(0x3fff), 1,
			manager.undefinedData().get(0, b.addr(0x3fff), b.addr(0x400a), true));
		assertAllUndefined(12, b.addr(0x400a), -1,
			manager.undefinedData().get(0, b.addr(0x3fff), b.addr(0x400a), false));

		assertAllUndefined(4, b.addr(-0x0004), 1,
			manager.codeUnits().get(0, b.addr(-0x0004), b.addr(-0x0001), true));
		assertAllUndefined(4, b.addr(0x0003), -1,
			manager.codeUnits().get(0, b.addr(0x0000), b.addr(0x0003), false));

		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);
		}
		TraceData u3fff = manager.undefinedData().getAt(0, b.addr(0x3fff));
		TraceData u400a = manager.undefinedData().getAt(0, b.addr(0x400a));

		assertEquals(List.of(u3fff, d4000, d4004, i4008, u400a),
			list(manager.codeUnits().get(0, b.addr(0x3fff), b.addr(0x400a), true)));
		assertEquals(List.of(u400a, i4008, d4004, d4000, u3fff),
			list(manager.codeUnits().get(0, b.addr(0x3fff), b.addr(0x400a), false)));

		assertEquals(List.of(u3fff, d4000, d4004, i4008, u400a),
			list(manager.codeUnits().get(0, b.range(0x3fff, 0x400a), true)));
		assertEquals(List.of(u400a, i4008, d4004, d4000, u3fff),
			list(manager.codeUnits().get(0, b.range(0x3fff, 0x400a), false)));

		assertEquals(List.of(d4000, i4008), list(manager.codeUnits()
				.get(0,
					b.set(b.range(0x4000, 0x4002), b.range(0x4008, 0x4008)), true)));
		assertEquals(List.of(i4008, d4000), list(manager.codeUnits()
				.get(0,
					b.set(b.range(0x4000, 0x4002), b.range(0x4008, 0x4008)), false)));

		assertEquals(List.of(u3fff, d4000, d4004, i4008, u400a),
			listN(manager.codeUnits().get(0, b.addr(0x3fff), true), 5));
		assertEquals(List.of(u400a, i4008, d4004, d4000, u3fff),
			listN(manager.codeUnits().get(0, b.addr(0x400a), false), 5));
	}
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