docs: public static <I extends ScoreIter> double computeROCAUC(Predicate<? super I> predicate, I iter) {
      int poscnt = 0, negcnt = 0, pospre = 0, negpre = 0;
      double acc = 0.;
      while(iter.valid()) {
        // positive or negative match?
        do {
          if(predicate.test(iter)) {
            ++poscnt;
          }
          else {
            ++negcnt;
          }
          iter.advance();
        } // Loop while tied:
        while(iter.valid() && iter.tiedToPrevious());
        if(negcnt > negpre) {
          acc += (poscnt + pospre) * .5 * (negcnt - negpre);
          negpre = negcnt;
        }
        pospre = poscnt;
      }
      acc /= negcnt * (long) poscnt;
      return acc == acc ? acc : 0.5; /* Detect NaN */
    }