@Test
	public void testGetCeiling() throws CodeUnitInsertionException {
		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);
		}

		assertUndefinedWithAddr(b.addr(0x3fff), manager.codeUnits().getCeiling(0, b.addr(0x3fff)));
		assertUndefinedWithAddr(b.addr(0x3fff), manager.data().getCeiling(0, b.addr(0x3fff)));
		assertEquals(d4000, manager.definedUnits().getCeiling(0, b.addr(0x3fff)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x3fff)));
		assertEquals(d4000, manager.definedData().getCeiling(0, b.addr(0x3fff)));
		assertUndefinedWithAddr(b.addr(0x3fff),
			manager.undefinedData().getCeiling(0, b.addr(0x3fff)));

		assertEquals(d4000, manager.codeUnits().getCeiling(0, b.addr(0x4000)));
		assertEquals(d4000, manager.data().getCeiling(0, b.addr(0x4000)));
		assertEquals(d4000, manager.definedUnits().getCeiling(0, b.addr(0x4000)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4000)));
		assertEquals(d4000, manager.definedData().getCeiling(0, b.addr(0x4000)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4000)));

		assertEquals(d4004, manager.codeUnits().getCeiling(0, b.addr(0x4001)));
		assertEquals(d4004, manager.data().getCeiling(0, b.addr(0x4001)));
		assertEquals(d4004, manager.definedUnits().getCeiling(0, b.addr(0x4001)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4001)));
		assertEquals(d4004, manager.definedData().getCeiling(0, b.addr(0x4001)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4001)));

		assertEquals(d4004, manager.codeUnits().getCeiling(0, b.addr(0x4002)));
		assertEquals(d4004, manager.data().getCeiling(0, b.addr(0x4002)));
		assertEquals(d4004, manager.definedUnits().getCeiling(0, b.addr(0x4002)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4002)));
		assertEquals(d4004, manager.definedData().getCeiling(0, b.addr(0x4002)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4002)));

		assertEquals(d4004, manager.codeUnits().getCeiling(0, b.addr(0x4003)));
		assertEquals(d4004, manager.data().getCeiling(0, b.addr(0x4003)));
		assertEquals(d4004, manager.definedUnits().getCeiling(0, b.addr(0x4003)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4003)));
		assertEquals(d4004, manager.definedData().getCeiling(0, b.addr(0x4003)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4003)));

		assertEquals(d4004, manager.codeUnits().getCeiling(0, b.addr(0x4004)));
		assertEquals(d4004, manager.data().getCeiling(0, b.addr(0x4004)));
		assertEquals(d4004, manager.definedUnits().getCeiling(0, b.addr(0x4004)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4004)));
		assertEquals(d4004, manager.definedData().getCeiling(0, b.addr(0x4004)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4004)));

		assertEquals(i4008, manager.codeUnits().getCeiling(0, b.addr(0x4005)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.data().getCeiling(0, b.addr(0x4005)));
		assertEquals(i4008, manager.definedUnits().getCeiling(0, b.addr(0x4005)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4005)));
		assertNull(manager.definedData().getCeiling(0, b.addr(0x4005)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4005)));

		assertEquals(i4008, manager.codeUnits().getCeiling(0, b.addr(0x4006)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.data().getCeiling(0, b.addr(0x4006)));
		assertEquals(i4008, manager.definedUnits().getCeiling(0, b.addr(0x4006)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4006)));
		assertNull(manager.definedData().getCeiling(0, b.addr(0x4006)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4006)));

		assertEquals(i4008, manager.codeUnits().getCeiling(0, b.addr(0x4007)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.data().getCeiling(0, b.addr(0x4007)));
		assertEquals(i4008, manager.definedUnits().getCeiling(0, b.addr(0x4007)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4007)));
		assertNull(manager.definedData().getCeiling(0, b.addr(0x4007)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4007)));

		assertEquals(i4008, manager.codeUnits().getCeiling(0, b.addr(0x4008)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.data().getCeiling(0, b.addr(0x4008)));
		assertEquals(i4008, manager.definedUnits().getCeiling(0, b.addr(0x4008)));
		assertEquals(i4008, manager.instructions().getCeiling(0, b.addr(0x4008)));
		assertNull(manager.definedData().getCeiling(0, b.addr(0x4008)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4008)));

		assertUndefinedWithAddr(b.addr(0x400a), manager.codeUnits().getCeiling(0, b.addr(0x4009)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.data().getCeiling(0, b.addr(0x4009)));
		assertNull(manager.definedUnits().getCeiling(0, b.addr(0x4009)));
		assertNull(manager.instructions().getCeiling(0, b.addr(0x4009)));
		assertNull(manager.definedData().getCeiling(0, b.addr(0x4009)));
		assertUndefinedWithAddr(b.addr(0x400a),
			manager.undefinedData().getCeiling(0, b.addr(0x4009)));

		// For the snap-6 tests, just check that the snap is heeded by view
		// Only check thoroughly the codeUnits view
		assertUndefinedWithAddr(b.addr(0x3fff), manager.codeUnits().getCeiling(0, b.addr(0x3fff)));
		assertEquals(d4000, manager.codeUnits().getCeiling(6, b.addr(0x4000)));
		assertUndefinedWithAddr(b.addr(0x4004), manager.codeUnits().getCeiling(6, b.addr(0x4001)));
		assertUndefinedWithAddr(b.addr(0x4004), manager.codeUnits().getCeiling(6, b.addr(0x4002)));
		assertUndefinedWithAddr(b.addr(0x4004), manager.codeUnits().getCeiling(6, b.addr(0x4003)));
		assertUndefinedWithAddr(b.addr(0x4004), manager.codeUnits().getCeiling(6, b.addr(0x4004)));

		assertUndefinedWithAddr(b.addr(0x4005), manager.codeUnits().getCeiling(6, b.addr(0x4005)));
		assertUndefinedWithAddr(b.addr(0x4005), manager.data().getCeiling(6, b.addr(0x4005)));
		assertEquals(i4008, manager.definedUnits().getCeiling(6, b.addr(0x4005)));
		assertEquals(i4008, manager.instructions().getCeiling(6, b.addr(0x4005)));
		assertNull(manager.definedData().getCeiling(6, b.addr(0x4005)));
		assertUndefinedWithAddr(b.addr(0x4005),
			manager.undefinedData().getCeiling(6, b.addr(0x4005)));

		assertUndefinedWithAddr(b.addr(0x4006), manager.codeUnits().getCeiling(6, b.addr(0x4006)));
		assertUndefinedWithAddr(b.addr(0x4007), manager.codeUnits().getCeiling(6, b.addr(0x4007)));
		assertEquals(i4008, manager.codeUnits().getCeiling(6, b.addr(0x4008)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.codeUnits().getCeiling(6, b.addr(0x4009)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.codeUnits().getCeiling(6, b.addr(0x400a)));

		assertUndefinedWithAddr(b.addr(0x4000), manager.codeUnits().getCeiling(10, b.addr(0x4000)));
		assertUndefinedWithAddr(b.addr(0x4001), manager.codeUnits().getCeiling(10, b.addr(0x4001)));
		assertUndefinedWithAddr(b.addr(0x4002), manager.codeUnits().getCeiling(10, b.addr(0x4002)));
		assertUndefinedWithAddr(b.addr(0x4003), manager.codeUnits().getCeiling(10, b.addr(0x4003)));
		assertUndefinedWithAddr(b.addr(0x4004), manager.codeUnits().getCeiling(10, b.addr(0x4004)));
		assertUndefinedWithAddr(b.addr(0x4005), manager.codeUnits().getCeiling(10, b.addr(0x4005)));
		assertUndefinedWithAddr(b.addr(0x4006), manager.codeUnits().getCeiling(10, b.addr(0x4006)));
		assertUndefinedWithAddr(b.addr(0x4007), manager.codeUnits().getCeiling(10, b.addr(0x4007)));
		assertUndefinedWithAddr(b.addr(0x4008), manager.codeUnits().getCeiling(10, b.addr(0x4008)));
		assertUndefinedWithAddr(b.addr(0x4009), manager.codeUnits().getCeiling(10, b.addr(0x4009)));
		assertUndefinedWithAddr(b.addr(0x400a), manager.codeUnits().getCeiling(10, b.addr(0x400a)));

		assertNull(manager.instructions().getCeiling(10, b.addr(0x3fff)));
	}
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