public static void assertListEqualUnordered(String message, List<?> expected, List<?> actual) {

		if (expected == null) {
			assertNull(actual);
			return;
		}

		List<?> expectedCopy = new ArrayList<>(expected);
		List<?> actualCopy = new ArrayList<>(actual);

		actualCopy.removeAll(expected);
		expectedCopy.removeAll(actual);

		if (actualCopy.isEmpty() && expectedCopy.isEmpty()) {
			// all expected items accounted for in the actual values
			return;
		}

		// OK, one or both lists had extra data
		if (message == null) {
			message = "\tExpected collections to be the same; " +
				"one or both collections had extra items - difference:" +
				"\n\n\n\t'Expected' unique values: " + expectedCopy +
				";\n\t'Actual' unique values:      " + actualCopy + "\n\n";
		}
		fail(message);
	}
Compares the contents of two arrays to determine if they are equal. The contents do not have
to be in the same order. If <code>message</code> is <code>null</code>, then a generic error
message will be printed.

@param message The message to print upon failure; can be null
@param expected The expected array.
@param actual The actual array.
Ghidra/Framework/Generic/src/main/java/generic/test/AbstractGTest.java