diff --git a/packages/scalars/src/ArrayObject.php b/packages/scalars/src/ArrayObject.php index 573f482d7..cd33db42f 100644 --- a/packages/scalars/src/ArrayObject.php +++ b/packages/scalars/src/ArrayObject.php @@ -318,13 +318,13 @@ public function sum(): float|int */ public function avg(): float|int|null { - $sum = $this->sum(); + $count = $this->count(); - if ($sum === 0 || $sum === 0.0) { + if ($count === 0) { return null; } - return $sum / $this->count(); + return $this->sum() / $count; } /** diff --git a/packages/scalars/src/StringObject.php b/packages/scalars/src/StringObject.php index f57e5bbfb..78e20c7b1 100644 --- a/packages/scalars/src/StringObject.php +++ b/packages/scalars/src/StringObject.php @@ -149,6 +149,10 @@ public static function wrap(mixed $string = '', ?string $encoding = self::ENCODI */ public function __call(string $name, array $args): mixed { + if ($name === 'split') { + return $this->explode(...$args); + } + $class = Str::class; if (is_callable([$class, $name])) { @@ -158,7 +162,6 @@ public function __call(string $name, array $args): mixed $maps = [ 'toUpperCase' => [Utf8String::class, 'strtoupper'], 'toLowerCase' => [Utf8String::class, 'strtolower'], - 'split' => [$this, 'explode'], ]; if ($maps[$name] ?? null) { diff --git a/packages/scalars/test/ArrayObjectTest.php b/packages/scalars/test/ArrayObjectTest.php index 0bdfb55b2..40709c3df 100644 --- a/packages/scalars/test/ArrayObjectTest.php +++ b/packages/scalars/test/ArrayObjectTest.php @@ -691,11 +691,18 @@ public function searchWithClosureReturnsFalseWhenNothingMatches(): void } #[Test] - public function avgReturnsNullWhenSumIsZero(): void + public function avgReturnsNullWhenArrayIsEmpty(): void { self::assertNull(arr([])->avg()); } + #[Test] + public function avgReturnsZeroWhenSumIsZero(): void + { + self::assertSame(0, arr([1, -1])->avg()); + self::assertSame(0, arr([0, 0])->avg()); + } + #[Test] public function wrapReturnsSameInstanceWhenAlreadyWrapped(): void { diff --git a/packages/scalars/test/StringObjectTest.php b/packages/scalars/test/StringObjectTest.php index e2d7ae6a3..c9840e006 100644 --- a/packages/scalars/test/StringObjectTest.php +++ b/packages/scalars/test/StringObjectTest.php @@ -525,6 +525,15 @@ public static function explodeProvider(): array ]; } + #[Test] + public function splitSplitsStringByDelimiter(): void + { + self::assertEquals( + ['Foo', 'Bar', 'Yoo'], + (new StringObject('Foo/Bar/Yoo'))->split('/')->dump() + ); + } + #[Test] public function applyReturnsNewInstanceFromCallbackResult() {