docs: public static void upto(BigInteger self, Number to, @ClosureParams(FirstParam.class) Closure closure) {
          if (to instanceof BigDecimal) {
              final BigDecimal one = BigDecimal.valueOf(10, 1);
              BigDecimal self1 = new BigDecimal(self);
              BigDecimal to1 = (BigDecimal) to;
              if (self1.compareTo(to1) <= 0) {
                  for (BigDecimal i = self1; i.compareTo(to1) <= 0; i = i.add(one)) {
                      closure.call(i);
                  }
              } else
                  throw new GroovyRuntimeException(
                          MessageFormat.format(
                                  "The argument ({0}) to upto() cannot be less than the value ({1}) it''s called on.",
                                  to, self));
          } else if (to instanceof BigInteger) {
              final BigInteger one = BigInteger.valueOf(1);
              BigInteger to1 = (BigInteger) to;
              if (self.compareTo(to1) <= 0) {
                  for (BigInteger i = self; i.compareTo(to1) <= 0; i = i.add(one)) {
                      closure.call(i);
                  }
              } else
                  throw new GroovyRuntimeException(
                          MessageFormat.format("The argument ({0}) to upto() cannot be less than the value ({1}) it''s called on.",
                                  to, self));
          } else {
              final BigInteger one = BigInteger.valueOf(1);
              BigInteger to1 = new BigInteger(to.toString());
              if (self.compareTo(to1) <= 0) {
                  for (BigInteger i = self; i.compareTo(to1) <= 0; i = i.add(one)) {
                      closure.call(i);
                  }
              } else
                  throw new GroovyRuntimeException(MessageFormat.format(
                          "The argument ({0}) to upto() cannot be less than the value ({1}) it''s called on.",
                          to, self));
          }
      }