code: public long getStepsWithoutImprovement(){
          // depends on status: synchronize with status updates
          synchronized(statusLock){
              if(status == SearchStatus.INITIALIZING){
                  // initializing
                  return JamesConstants.INVALID_STEP_COUNT;
              } else {
                  if(stepsSinceLastImprovement == JamesConstants.INVALID_STEP_COUNT){
                      // no improvement made during current/last run, or not yet run: equal to total step count
                      return getSteps();
                  } else {
                      // running or ran before, and improvement made during current/last run
                      return stepsSinceLastImprovement;
                  }
              }
          }
      }
docs: <p>
  Get the number of consecutive steps completed during the <i>current</i> (or last) run, without finding
  any further improvement. The precise return value depends on the status of the search:
  </p>
  <ul>
  <li>
  If the search is either RUNNING or TERMINATING, but no improvements have yet been made during the current
  run, the returned value is equal to the total number of steps completed so far; else it reflects the number
  of steps completed since the last improvement during the current run.
  </li>
  <li>
  If the search is IDLE or DISPOSED, but has been run before, the number of steps without improvement observed
  during the last run, up to the point when this run completed, is returned. Before the first run, the return
  value is {@link JamesConstants#INVALID_STEP_COUNT}.
  </li>
  <li>
  While INITIALIZING the current run, {@link JamesConstants#INVALID_STEP_COUNT} is returned.
  </li>
  </ul>
  <p>
  The return value is always positive, except in those cases when {@link JamesConstants#INVALID_STEP_COUNT}
  is returned.
  </p>
  
  @return number of consecutive completed steps without finding improvements during the current (or last) run