Inital commit after splitting from main project
PHP Composer / build (push) Successful in 32s

This commit is contained in:
2026-07-26 17:11:40 +02:00
commit f0eea523ec
15 changed files with 6155 additions and 0 deletions
+172
View File
@@ -0,0 +1,172 @@
<?php
declare(strict_types=1);
namespace Tez\Utils\Tests\Num;
use PHPUnit\Framework\TestCase;
use Tez\Utils\Num\Num;
final class NumTest extends TestCase
{
// -------------------------------------------------------------------------
// format()
// -------------------------------------------------------------------------
public function testFormatDefaultSeparators(): void
{
self::assertSame('1,234,567.89', Num::format(1234567.891));
}
public function testFormatCustomSeparators(): void
{
self::assertSame('1.234.567,89', Num::format(1234567.891, dec: ',', thousands: '.'));
}
public function testFormatZeroDecimals(): void
{
self::assertSame('1,235', Num::format(1234.5, 0));
}
public function testFormatNegative(): void
{
self::assertSame('-1,000.00', Num::format(-1000.0));
}
public function testFormatInteger(): void
{
self::assertSame('42.00', Num::format(42));
}
// -------------------------------------------------------------------------
// bytes()
// -------------------------------------------------------------------------
public function testBytesZero(): void
{
self::assertSame('0 B', Num::bytes(0));
}
public function testBytesUnderKilobyte(): void
{
self::assertSame('1,023 B', Num::bytes(1023));
}
public function testBytesExactlyOneKilobyte(): void
{
self::assertSame('1.00 KB', Num::bytes(1024));
}
public function testBytesMegabyte(): void
{
self::assertSame('1.00 MB', Num::bytes(1048576));
}
public function testBytesGigabyte(): void
{
self::assertSame('1.00 GB', Num::bytes(1073741824));
}
public function testBytesCustomPrecision(): void
{
self::assertSame('1 KB', Num::bytes(1500, precision: 0));
}
public function testBytesPrecisionTwo(): void
{
self::assertSame('1.46 KB', Num::bytes(1500));
}
public function testBytesTerabyte(): void
{
self::assertSame('1.00 TB', Num::bytes(1024 ** 4));
}
// -------------------------------------------------------------------------
// percent()
// -------------------------------------------------------------------------
public function testPercentDefaultDecimals(): void
{
self::assertSame('12.3%', Num::percent(0.1234));
}
public function testPercentFullRatio(): void
{
self::assertSame('100.0%', Num::percent(1.0));
}
public function testPercentSmallValue(): void
{
self::assertSame('0.56%', Num::percent(0.0056, decimals: 2));
}
public function testPercentZero(): void
{
self::assertSame('0.0%', Num::percent(0.0));
}
// -------------------------------------------------------------------------
// clamp()
// -------------------------------------------------------------------------
public function testClampAboveMax(): void
{
self::assertSame(100, Num::clamp(105, 0, 100));
}
public function testClampBelowMin(): void
{
self::assertSame(0, Num::clamp(-5, 0, 100));
}
public function testClampWithinRange(): void
{
self::assertSame(50, Num::clamp(50, 0, 100));
}
public function testClampAtExactBoundary(): void
{
self::assertSame(0, Num::clamp(0, 0, 100));
self::assertSame(100, Num::clamp(100, 0, 100));
}
public function testClampFloat(): void
{
self::assertSame(0.5, Num::clamp(1.5, 0.0, 0.5));
}
// -------------------------------------------------------------------------
// roundTo()
// -------------------------------------------------------------------------
public function testRoundToNearestFiveLow(): void
{
self::assertSame(15, Num::roundTo(17, 5));
}
public function testRoundToNearestFiveHigh(): void
{
self::assertSame(20, Num::roundTo(18, 5));
}
public function testRoundToHalf(): void
{
self::assertSame(1.5, Num::roundTo(1.7, 0.5));
}
public function testRoundToExactMultiple(): void
{
self::assertSame(10, Num::roundTo(10, 5));
}
public function testRoundToOne(): void
{
self::assertSame(7, Num::roundTo(7, 1));
}
public function testRoundToZeroMultipleReturnsValue(): void
{
self::assertSame(17, Num::roundTo(17, 0));
}
}