diff --git a/solver/processing.go b/solver/processing.go index f206b9e..2e6f1e4 100644 --- a/solver/processing.go +++ b/solver/processing.go @@ -98,36 +98,43 @@ func (solver *Solver) tracker() { defer solver.timeTrack(time.Now(), "Validated solutions") log.Println("Validating solutions") - // Tracking percenting an progress + // Determine if the main-loop is done + var done bool + + // Tracking progress in percentages var percentage float32 + // Tracking progress in validated solutions var track int - // Tracking the rate - var rate_start int - var rate_stop int - var rate_diff int + // Tracking the rate, starting point + var rate_start int64 + // Tracking the rate, difference between previous iterations + var rate_diff int64 // Tracking duration var timer_start = time.Now() - // Prevent division-by-zero error when establishing `rate` + // Prevent division-by-zero error when establishing `rate_diff` time.Sleep(time.Second) // Estimation how long it will take var est_fin string - for solver.iter != solver.counter { + // for solver.iter != solver.counter { // Start for-loop + for !done { // Determine how far we are. percentage = (float32(solver.counter) / (float32(solver.iter) / 100)) - if track <= int(percentage) { - // Reset the loop - rate_stop = int(solver.counter) - rate_diff = rate_stop - rate_start + + // Reset the loop + rate_diff = solver.counter - rate_start + + if track <= int(percentage) || rate_diff == 0 { // Start if-statement // Make sure something happened, making rate_start the only reliable variable - if rate_diff == 0 && int(percentage) > 1 { + if rate_diff == 0 { percentage = 100 solver.counter = solver.iter + done = true } timer_elapsed := time.Since(timer_start) @@ -142,30 +149,31 @@ func (solver *Solver) tracker() { est_fin = solver.secondsToHuman((int(solver.iter) - int(solver.counter)) / int(rate_avg)) } - // Printing the meat + // Printing the progress log.Println("Processing: " + strconv.Itoa(int(percentage)) + "% (" + strconv.Itoa(int(solver.counter)) + "/" + strconv.Itoa(int(solver.iter)) + "); Rate: " + strconv.Itoa(int(rate)) + "/sec for " + timer_elapsed.String() + "; Time left (est.): " + est_fin) + // After we are done printing, exit this for-loop + if percentage == 100 { + break + } + // Wrap up the loop or break if int(percentage) > track { track = int(percentage) } else { track = track + 1 } - rate_start = rate_stop + timer_start = time.Now() - if percentage == 100 { - break - } - - } else { - log.Println(percentage) - log.Println(solver.counter) - log.Println(rate_diff) } + + // Resert the rate counter + rate_start = solver.counter + // Sleep for a second time.Sleep(1 * time.Second) - } + } // End for-loop }