@Test
	public void testSubFilter_DeleteMultipleCharacters() throws Exception {

		startsWithFilter("t");
		assertFilteredEntireModel();
		assertRowCount(4); // matching values: two, ten, ten, ten

		// sub-filter
		startsWithFilter("te");
		assertNumberOfItemsPassedThroughFilter(4);
		assertRowCount(3); // matching values: ten, ten, ten

		// sub-filter again
		startsWithFilter("ten");
		assertNumberOfItemsPassedThroughFilter(3);
		assertRowCount(3); // matching values: ten, ten, ten

		// jump from 'ten' to 't'--should still used the filtered data for 't'
		startsWithFilter("t");

		// note: if the user is typing, no refilter will take place.  But, since we are setting a
		// new filter in this test, instead of typing, a refilter is forced.  This is why 4 items
		// pass through the filter instead of 0.
		assertNumberOfItemsPassedThroughFilter(4);
		assertRowCount(4); // matching values: two, ten, ten, ten
	}
Specifically tests the sub-filtering behavior of the {@link ThreadedTableModel}, as well
as some other more complicated filtering combinations
Ghidra/Framework/Docking/src/test.slow/java/docking/widgets/table/threaded/DefaultThreadedTableFilterTest.java