Skip to content

Commit 382acc7

Browse files
authored
Merge pull request #5 from dinocajic/create-division
Create division
2 parents 31aa14a + bc8a377 commit 382acc7

File tree

5 files changed

+79
-8
lines changed

5 files changed

+79
-8
lines changed

.phpunit.result.cache

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
C:37:"PHPUnit\Runner\DefaultTestResultCache":2621:{a:2:{s:7:"defects";a:20:{s:7:"Warning";i:6;s:33:"SampleTest::testTrueAssertsToTrue";i:3;s:38:"UserTest::testThatWeCanGetTheFirstName";i:3;s:37:"UserTest::testThatWeCanGetTheLastName";i:4;s:36:"UserTest::testThatFullNameIsReturned";i:4;s:40:"UserTest::testFirstAndLastNameAreTrimmed";i:3;s:34:"UserTest::testEmailAddressCanBeSet";i:4;s:48:"UserTest::testEmailVariablesContainCorrectValues";i:4;s:40:"UserTest::that_we_can_get_the_first_name";i:3;s:62:"CollectionTest::empty_instantiated_collection_returns_no_items";i:4;s:52:"CollectionTest::count_is_correct_for_items_passed_in";i:3;s:52:"CollectionTest::items_returned_match_items_passed_in";i:4;s:60:"CollectionTest::collection_is_instance_of_iterator_aggregate";i:3;s:42:"CollectionTest::collection_can_be_iterated";i:4;s:64:"CollectionTest::collection_can_be_merged_with_another_collection";i:4;s:46:"CollectionTest::can_add_to_existing_collection";i:4;s:42:"CollectionTest::returns_json_encoded_items";i:6;s:62:"CollectionTest::json_encoding_a_collection_object_returns_json";i:3;s:36:"AdditionTest::adds_up_given_operands";i:4;s:65:"AdditionTest::no_operands_given_throws_exception_when_calculating";i:4;}s:5:"times";a:25:{s:7:"Warning";d:0.607;s:33:"SampleTest::testTrueAssertsToTrue";d:0;s:38:"UserTest::testThatWeCanGetTheFirstName";d:0.001;s:37:"UserTest::testThatWeCanGetTheLastName";d:0;s:36:"UserTest::testThatFullNameIsReturned";d:0;s:40:"UserTest::testFirstAndLastNameAreTrimmed";d:0;s:34:"UserTest::testEmailAddressCanBeSet";d:0;s:48:"UserTest::testEmailVariablesContainCorrectValues";d:0.001;s:40:"UserTest::that_we_can_get_the_first_name";d:0;s:39:"UserTest::that_we_can_get_the_last_name";d:0;s:36:"UserTest::that_full_name_is_returned";d:0;s:46:"UserTest::that_first_and_last_name_are_trimmed";d:0;s:39:"UserTest::that_email_address_can_be_set";d:0;s:53:"UserTest::that_email_variables_contain_correct_values";d:0;s:62:"CollectionTest::empty_instantiated_collection_returns_no_items";d:0.006;s:52:"CollectionTest::count_is_correct_for_items_passed_in";d:0.001;s:52:"CollectionTest::items_returned_match_items_passed_in";d:0;s:60:"CollectionTest::collection_is_instance_of_iterator_aggregate";d:0;s:42:"CollectionTest::collection_can_be_iterated";d:0;s:64:"CollectionTest::collection_can_be_merged_with_another_collection";d:0;s:46:"CollectionTest::can_add_to_existing_collection";d:0;s:42:"CollectionTest::returns_json_encoded_items";d:0.001;s:62:"CollectionTest::json_encoding_a_collection_object_returns_json";d:0;s:36:"AdditionTest::adds_up_given_operands";d:0.001;s:65:"AdditionTest::no_operands_given_throws_exception_when_calculating";d:0.002;}}}
1+
C:37:"PHPUnit\Runner\DefaultTestResultCache":3005:{a:2:{s:7:"defects";a:23:{s:7:"Warning";i:6;s:33:"SampleTest::testTrueAssertsToTrue";i:3;s:38:"UserTest::testThatWeCanGetTheFirstName";i:3;s:37:"UserTest::testThatWeCanGetTheLastName";i:4;s:36:"UserTest::testThatFullNameIsReturned";i:4;s:40:"UserTest::testFirstAndLastNameAreTrimmed";i:3;s:34:"UserTest::testEmailAddressCanBeSet";i:4;s:48:"UserTest::testEmailVariablesContainCorrectValues";i:4;s:40:"UserTest::that_we_can_get_the_first_name";i:3;s:62:"CollectionTest::empty_instantiated_collection_returns_no_items";i:4;s:52:"CollectionTest::count_is_correct_for_items_passed_in";i:3;s:52:"CollectionTest::items_returned_match_items_passed_in";i:4;s:60:"CollectionTest::collection_is_instance_of_iterator_aggregate";i:3;s:42:"CollectionTest::collection_can_be_iterated";i:4;s:64:"CollectionTest::collection_can_be_merged_with_another_collection";i:4;s:46:"CollectionTest::can_add_to_existing_collection";i:4;s:42:"CollectionTest::returns_json_encoded_items";i:6;s:62:"CollectionTest::json_encoding_a_collection_object_returns_json";i:3;s:36:"AdditionTest::adds_up_given_operands";i:4;s:65:"AdditionTest::no_operands_given_throws_exception_when_calculating";i:4;s:36:"DivisionTest::divides_given_operands";i:4;s:47:"DivisionTest::removes_division_by_zero_operands";i:4;s:65:"DivisionTest::no_operands_given_throws_exception_when_calculating";i:3;}s:5:"times";a:28:{s:7:"Warning";d:0.607;s:33:"SampleTest::testTrueAssertsToTrue";d:0.001;s:38:"UserTest::testThatWeCanGetTheFirstName";d:0.001;s:37:"UserTest::testThatWeCanGetTheLastName";d:0;s:36:"UserTest::testThatFullNameIsReturned";d:0;s:40:"UserTest::testFirstAndLastNameAreTrimmed";d:0;s:34:"UserTest::testEmailAddressCanBeSet";d:0;s:48:"UserTest::testEmailVariablesContainCorrectValues";d:0.001;s:40:"UserTest::that_we_can_get_the_first_name";d:0.001;s:39:"UserTest::that_we_can_get_the_last_name";d:0;s:36:"UserTest::that_full_name_is_returned";d:0;s:46:"UserTest::that_first_and_last_name_are_trimmed";d:0;s:39:"UserTest::that_email_address_can_be_set";d:0;s:53:"UserTest::that_email_variables_contain_correct_values";d:0.001;s:62:"CollectionTest::empty_instantiated_collection_returns_no_items";d:0.009;s:52:"CollectionTest::count_is_correct_for_items_passed_in";d:0.001;s:52:"CollectionTest::items_returned_match_items_passed_in";d:0.001;s:60:"CollectionTest::collection_is_instance_of_iterator_aggregate";d:0;s:42:"CollectionTest::collection_can_be_iterated";d:0;s:64:"CollectionTest::collection_can_be_merged_with_another_collection";d:0;s:46:"CollectionTest::can_add_to_existing_collection";d:0;s:42:"CollectionTest::returns_json_encoded_items";d:0;s:62:"CollectionTest::json_encoding_a_collection_object_returns_json";d:0;s:36:"AdditionTest::adds_up_given_operands";d:0.001;s:65:"AdditionTest::no_operands_given_throws_exception_when_calculating";d:0.002;s:36:"DivisionTest::divides_given_operands";d:0.001;s:47:"DivisionTest::removes_division_by_zero_operands";d:0;s:65:"DivisionTest::no_operands_given_throws_exception_when_calculating";d:0;}}}

app/Calculator/Addition.php

+1-7
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,7 @@
44

55
use App\Calculator\Exceptions\NoOperandsException;
66

7-
class Addition implements OperationInterface {
8-
9-
private $operands = [];
10-
11-
public function setOperands(array $operands) {
12-
$this->operands = $operands;
13-
}
7+
class Addition extends OperationAbstract implements OperationInterface {
148

159
public function calculate() {
1610
if (count($this->operands) === 0) {

app/Calculator/Division.php

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
3+
namespace App\Calculator;
4+
5+
use App\Calculator\Exceptions\NoOperandsException;
6+
7+
class Division extends OperationAbstract implements OperationInterface {
8+
9+
public function calculate() {
10+
if (count($this->operands) === 0) {
11+
throw new NoOperandsException;
12+
}
13+
14+
// $result = 0;
15+
16+
// foreach($this->operands as $index => $operand) {
17+
// if ($index === 0) {
18+
// $result = $operand;
19+
// continue;
20+
// }
21+
22+
// $result = $result / $operand;
23+
// }
24+
25+
// return $result;
26+
27+
// Array filter removes any false, null or zero values
28+
return array_reduce(array_filter($this->operands), function($a, $b) {
29+
if ($a !== null && $b !== null) {
30+
return $a / $b;
31+
}
32+
33+
return $b;
34+
}, null);
35+
}
36+
}

app/Calculator/OperationAbstract.php

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace App\Calculator;
4+
5+
abstract class OperationAbstract {
6+
7+
protected $operands = [];
8+
9+
public function setOperands(array $operands) {
10+
$this->operands = $operands;
11+
}
12+
}
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
class DivisionTest extends \PHPUnit\Framework\TestCase {
4+
5+
/** @test */
6+
public function divides_given_operands() {
7+
$division = new \App\Calculator\Division;
8+
$division->setOperands([100,2]);
9+
10+
$this->assertEquals(50, $division->calculate());
11+
}
12+
13+
/** @test */
14+
public function removes_division_by_zero_operands() {
15+
$division = new \App\Calculator\Division;
16+
$division->setOperands([10, 0, 0, 5, 0]);
17+
18+
$this->assertEquals(2, $division->calculate());
19+
}
20+
21+
/** @test */
22+
public function no_operands_given_throws_exception_when_calculating() {
23+
$this->expectException(\App\Calculator\Exceptions\NoOperandsException::class);
24+
25+
$division = new \App\Calculator\Division;
26+
$division->calculate();
27+
}
28+
}
29+

0 commit comments

Comments
 (0)