/**
   * Checks the given {@link Path} against the given tests.
   *
   * <p>The available tests are:
   *
   * <table>
   *   <tr><th>d</th><td>Test if the path is a directory.</td></tr>
   *   <tr><th>e</th><td>Test if the path exists.</td></tr>
   *   <tr><th>f</th><td>Test if the path is a regular file.</td></tr>
   *   <tr><th>r</th><td>Test if the path is readable.</td></tr>
   *   <tr><th>s</th><td>Test if the path is a non-zero-length file.</td></tr>
   *   <tr><th>w</th><td>Test if the path is writable.</td></tr>
   *   <tr><th>x</th><td>Test if the path is executable or usable.</td></tr>
   *   <tr><th>z</th><td>Test if the path is a zero length file.</td></tr>
   * </table>
   *
   * @param path The {@code Path} to check.
   * @param tests The set of tests to run.
   * @return {@code false} if any test fails, otherwise {@code true}.
   * @see #testPath(Path, char)
   */
  public static boolean check(final Path path, final CharSequence tests) {
    for (int i = 0; i < tests.length(); i++) {
      FileSystemTestFailure failure = FileSystemTools.testPath(path, tests.charAt(i));
      if (failure != null) return false;
    }

    return true;
  }
 /**
  * Checks the given {@link Path} against the given tests. Unlike {@link #check(Path,
  * CharSequence)}, a test failure will throw an {@link FileSystemTestFailure}.
  *
  * @param path The {@code Path} to check.
  * @param tests The set of tests to run.
  * @see #testPath(Path, char)
  * @throws FileSystemTestFailure If any of the tests fail.
  */
 public static void require(final Path path, final CharSequence tests) {
   for (int i = 0; i < tests.length(); i++) {
     FileSystemTestFailure failure = FileSystemTools.testPath(path, tests.charAt(i));
     if (failure != null) throw failure;
   }
 }