Task 1: Calculator init

This commit is contained in:
Oskar Grzelak
2024-07-28 20:23:08 +02:00
parent e1827b2497
commit 6a5d3ac709
10 changed files with 1806 additions and 0 deletions
+1
View File
@@ -0,0 +1 @@
{"version":1,"defects":[],"times":{"Tests\\CalculatorTest::testAdd":0.007,"Tests\\CalculatorTest::testSubtract":0,"Tests\\CalculatorTest::testMultiply":0,"Tests\\CalculatorTest::testDivide":0,"Tests\\CalculatorTest::testDivideByZero":0.001}}
+12
View File
@@ -0,0 +1,12 @@
{
"name": "oskar/task_01",
"type": "project",
"autoload": {
"psr-4": {
"App\\": "src/"
}
},
"require-dev": {
"phpunit/phpunit": "^10.5"
}
}
+1643
View File
File diff suppressed because it is too large Load Diff
+26
View File
@@ -0,0 +1,26 @@
<?php
declare(strict_types=1);
require 'vendor/autoload.php';
use App\Calculator;
use App\Operation;
try {
$calculator = new Calculator();
$result = $calculator->calculate(10, 5, Operation::ADD);
echo "Wynik dodawania: $result\n";
$result = $calculator->calculate(10, 5, Operation::SUBTRACT);
echo "Wynik odejmowania: $result\n";
$result = $calculator->calculate(10, 5, Operation::MULTIPLY);
echo "Wynik mnożenia: $result\n";
$result = $calculator->calculate(10, 5, Operation::DIVIDE);
echo "Wynik dzielenia: $result\n";
} catch (InvalidArgumentException $e) {
echo 'Błąd: ' . $e->getMessage();
}
+8
View File
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit bootstrap="vendor/autoload.php">
<testsuites>
<testsuite name="My Test Suite">
<directory>./tests</directory>
</testsuite>
</testsuites>
</phpunit>
+43
View File
@@ -0,0 +1,43 @@
<?php
declare(strict_types=1);
namespace App;
use InvalidArgumentException;
class Calculator implements CalculatorInterface
{
public function calculate(float $a, float $b, Operation $operation): float
{
return match ($operation) {
Operation::ADD => $this->add($a, $b),
Operation::SUBTRACT => $this->subtract($a, $b),
Operation::MULTIPLY => $this->multiply($a, $b),
Operation::DIVIDE => $this->divide($a, $b),
};
}
private function add(float $a, float $b): float
{
return $a + $b;
}
private function subtract(float $a, float $b): float
{
return $a - $b;
}
private function multiply(float $a, float $b): float
{
return $a * $b;
}
private function divide(float $a, float $b): float
{
if ($b === 0.0) {
throw new InvalidArgumentException('Division by zero is not allowed.');
}
return $a / $b;
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
declare(strict_types=1);
namespace App;
interface CalculatorInterface
{
public function calculate(float $a, float $b, Operation $operation): float;
}
+12
View File
@@ -0,0 +1,12 @@
<?php
declare(strict_types=1);
namespace App;
enum Operation: string {
case ADD = 'add';
case SUBTRACT = 'subtract';
case MULTIPLY = 'multiply';
case DIVIDE = 'divide';
}
+50
View File
@@ -0,0 +1,50 @@
<?php
declare(strict_types=1);
namespace Tests;
use PHPUnit\Framework\TestCase;
use App\Calculator;
use App\Operation;
use InvalidArgumentException;
class CalculatorTest extends TestCase
{
private Calculator $calculator;
protected function setUp(): void
{
$this->calculator = new Calculator();
}
public function testAdd(): void
{
$result = $this->calculator->calculate(10, 5, Operation::ADD);
$this->assertEquals(15, $result);
}
public function testSubtract(): void
{
$result = $this->calculator->calculate(10, 5, Operation::SUBTRACT);
$this->assertEquals(5, $result);
}
public function testMultiply(): void
{
$result = $this->calculator->calculate(10, 5, Operation::MULTIPLY);
$this->assertEquals(50, $result);
}
public function testDivide(): void
{
$result = $this->calculator->calculate(10, 5, Operation::DIVIDE);
$this->assertEquals(2, $result);
}
public function testDivideByZero(): void
{
$this->expectException(InvalidArgumentException::class);
$this->calculator->calculate(10, 0, Operation::DIVIDE);
}
}