@Test
	public void testFirst() {
		try (Transaction tx = obj.openTransaction("AddPoints")) {
			for (Entry<IntRect, String> ent : generatePoints(rect(1, 12, 1, 12))) {
				obj.map.put(ent.getKey(), ent.getValue());
			}
		}

		//obj.tree.dump(null);

		assertEquals("Point(1,6)",
			obj.map.reduce(IntRectQuery.enclosed(rect(1, 12, 6, 6))).firstValue());
		assertEquals("Point(2,6)",
			obj.map.reduce(IntRectQuery.enclosed(rect(2, 12, 6, 6))).firstValue());
		assertEquals("Point(3,6)",
			obj.map.reduce(IntRectQuery.enclosed(rect(3, 12, 6, 6))).firstValue());
		assertEquals("Point(8,6)",
			obj.map.reduce(IntRectQuery.enclosed(rect(8, 12, 6, 6))).firstValue());
		assertEquals("Point(12,6)",
			obj.map.reduce(IntRectQuery.enclosed(rect(12, 12, 6, 6))).firstValue());

		assertEquals("Point(12,6)",
			obj.map.reduce(
				IntRectQuery.enclosed(rect(1, 12, 6, 6)).starting(Rectangle2DDirection.RIGHTMOST))
					.firstValue());
		assertEquals("Point(6,1)",
			obj.map.reduce(
				IntRectQuery.enclosed(rect(6, 6, 1, 12)).starting(Rectangle2DDirection.BOTTOMMOST))
					.firstValue());
		assertEquals("Point(6,12)",
			obj.map.reduce(
				IntRectQuery.enclosed(rect(6, 6, 1, 12)).starting(Rectangle2DDirection.TOPMOST))
					.firstValue());
	}
@throws InterruptedException maybe when Thread.sleep is uncommented
Ghidra/Debug/ProposedUtils/src/test/java/ghidra/util/database/spatial/RStarTreeMapTest.java