private void doTestFindPathsNew_MultiPaths_BackFlows_WithUI(
			FindPathsAlgorithm<TestV, TestE> algo) throws CancelledException {

		/*
		   --> v1		 		
		   |  /  \
		   -v2    v3
			    /  | \
			   v4  v5 v6 <--
			    *  |  |     |
			       |  v7    |
			       |  | \   |
			       |  v8 v9 -
			       |   * 
			       |
			      v10	
			    
			    
			Paths: v1, v3, v5, v10
		*/

		TestV v1 = v(1);
		TestV v2 = v(2);
		TestV v3 = v(3);
		TestV v4 = v(4);
		TestV v5 = v(5);
		TestV v6 = v(6);
		TestV v7 = v(7);
		TestV v8 = v(8);
		TestV v9 = v(9);
		TestV v10 = v(10);

		e(v1, v2);
		e(v1, v3);

		e(v2, v1); // back edge

		e(v3, v4);
		e(v3, v5);
		e(v3, v6);

		e(v5, v10);

		e(v6, v7);

		e(v7, v8);
		e(v7, v9);

		e(v9, v6); // back edge

		AlgorithmSteppingTaskMonitor steppingMonitor = new AlgorithmSteppingTaskMonitor();
		steppingMonitor = new AlgorithmSelfSteppingTaskMonitor(500);
		TestGraphAlgorithmSteppingViewerPanel<TestV, TestE> gp = showViewer(steppingMonitor);

		algo.setStatusListener(gp.getStatusListener());
		ListAccumulator<List<TestV>> accumulator = new ListAccumulator<>();
		algo.findPaths(g, v1, v10, accumulator, steppingMonitor);

		//Msg.debug(this, "Total status updates: " + gp.getStatusListener().getTotalStatusChanges());

		steppingMonitor.pause(); // pause this thread to view the final output

		List<List<TestV>> paths = accumulator.asList();
		assertEquals(1, paths.size());
		assertPathExists(paths, v1, v3, v5, v10);
	}
A tool, written as a junit, that allows the user to run a test and then use the UI to step
through the given graph algorithm.
Ghidra/Framework/Graph/src/test/java/ghidra/graph/GraphAlgorithmsVisualDebugger.java