diff --git a/src/ProgressBar.php b/src/ProgressBar.php index c70929f..b8450a6 100644 --- a/src/ProgressBar.php +++ b/src/ProgressBar.php @@ -225,7 +225,7 @@ public function setMaxProgress(int|float $maxProgress): ProgressBar $this->maxProgressIsZero = true; } - $this->maxProgress = max(1, $maxProgress); + $this->maxProgress = max(0, $maxProgress); return $this; } @@ -235,6 +235,12 @@ public function setMaxProgress(int|float $maxProgress): ProgressBar */ private function setPercentage(): void { + // Handle the "0 of 0" case as fully complete (100%) without division by zero + if ($this->maxProgress == 0) { + $this->percentage = 100; + return; + } + $percentage = ($this->progress / $this->maxProgress) * 100; $this->percentage = number_format(round($percentage), 2); } diff --git a/tests/ProgressBarTest.php b/tests/ProgressBarTest.php index f688c37..4eab021 100644 --- a/tests/ProgressBarTest.php +++ b/tests/ProgressBarTest.php @@ -146,7 +146,7 @@ public function it_cannot_set_incorrect_max_progress() $progressBar = new ProgressBar(); $progressBar->setMaxProgress(-1); - $this->assertEquals(1, $progressBar->getMaxProgress()); + $this->assertEquals(0, $progressBar->getMaxProgress()); } /** @@ -155,10 +155,10 @@ public function it_cannot_set_incorrect_max_progress() public function it_can_gracefully_handle_zero_progress() { $progressBar = new ProgressBar(maxProgress: 0); - $this->assertEquals(1, $progressBar->getMaxProgress()); + $this->assertEquals(0, $progressBar->getMaxProgress()); $progressBar->tick(0); - $this->assertEquals(1, $progressBar->getProgress()); + $this->assertEquals(0, $progressBar->getProgress()); $this->assertEquals(100, $progressBar->getPercentage()); }