Skip to content

Commit 2788bdf

Browse files
authored
Merge pull request #6 from dinocajic/create-calculator
Added Calculator and Calculator Unit Test
2 parents 382acc7 + 9aca004 commit 2788bdf

File tree

3 files changed

+110
-1
lines changed

3 files changed

+110
-1
lines changed

.phpunit.result.cache

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
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;}}}
1+
C:37:"PHPUnit\Runner\DefaultTestResultCache":3635:{a:2:{s:7:"defects";a:28:{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:40:"CalculatorTest::can_set_single_operation";i:4;s:43:"CalculatorTest::can_set_multiple_operations";i:4;s:77:"CalculatorTest::operations_are_ignored_if_not_instance_of_operation_interface";i:3;s:36:"CalculatorTest::can_calculate_result";i:4;s:57:"CalculatorTest::calculate_method_returns_multiple_results";i:6;}s:5:"times";a:33:{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.013;s:39:"UserTest::that_we_can_get_the_last_name";d:0.004;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.012;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.001;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.001;s:36:"DivisionTest::divides_given_operands";d:0;s:47:"DivisionTest::removes_division_by_zero_operands";d:0;s:65:"DivisionTest::no_operands_given_throws_exception_when_calculating";d:0;s:40:"CalculatorTest::can_set_single_operation";d:0;s:43:"CalculatorTest::can_set_multiple_operations";d:0;s:77:"CalculatorTest::operations_are_ignored_if_not_instance_of_operation_interface";d:0;s:36:"CalculatorTest::can_calculate_result";d:0;s:57:"CalculatorTest::calculate_method_returns_multiple_results";d:0;}}}

app/Calculator/Calculator.php

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<?php
2+
3+
namespace App\Calculator;
4+
5+
class Calculator {
6+
7+
protected $operations = [];
8+
9+
public function setOperation(OperationInterface $operation) {
10+
$this->operations[] = $operation;
11+
}
12+
13+
public function getOperations() {
14+
return $this->operations;
15+
}
16+
17+
public function setOperations(array $operations) {
18+
$filteredOperations = array_filter($operations, function($operation) {
19+
return $operation instanceof OperationInterface;
20+
});
21+
22+
$this->operations = array_merge($this->operations, $filteredOperations);
23+
}
24+
25+
public function calculate() {
26+
if (count($this->operations) > 1) {
27+
// $result = [];
28+
29+
// foreach($this->operations as $operation) {
30+
// $result[] = $operation->calculate();
31+
// }
32+
33+
// return $result;
34+
return array_map(function($operation) {
35+
return $operation->calculate();
36+
}, $this->operations);
37+
}
38+
39+
return $this->operations[0]->calculate();
40+
}
41+
}
+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
<?php
2+
3+
class CalculatorTest extends \PHPUnit\Framework\TestCase {
4+
5+
/** @test */
6+
public function can_set_single_operation() {
7+
$addition = new \App\Calculator\Addition;
8+
$addition->setOperands([5, 10]);
9+
10+
$calculator = new \App\Calculator\Calculator;
11+
$calculator->setOperation($addition);
12+
13+
$this->assertCount(1, $calculator->getOperations());
14+
}
15+
16+
/** @test */
17+
public function can_set_multiple_operations() {
18+
$addition1 = new \App\Calculator\Addition;
19+
$addition1->setOperands([5, 10]);
20+
21+
$addition2 = new \App\Calculator\Addition;
22+
$addition2->setOperands([2, 2]);
23+
24+
$calculator = new \App\Calculator\Calculator;
25+
$calculator->setOperations([$addition1, $addition2]);
26+
27+
$this->assertCount(2, $calculator->getOperations());
28+
}
29+
30+
/** @test */
31+
public function operations_are_ignored_if_not_instance_of_operation_interface() {
32+
$addition = new \App\Calculator\Addition;
33+
$addition->setOperands([5, 2]);
34+
35+
$calculator = new \App\Calculator\Calculator;
36+
$calculator->setOperations([$addition, 'cats']);
37+
38+
$this->assertCount(1, $calculator->getOperations());
39+
}
40+
41+
/** @test */
42+
public function can_calculate_result() {
43+
$addition = new \App\Calculator\Addition;
44+
$addition->setOperands([2, 5]);
45+
46+
$calculator = new \App\Calculator\Calculator;
47+
$calculator->setOperation($addition);
48+
49+
$this->assertEquals(7, $calculator->calculate());
50+
}
51+
52+
/** @test */
53+
public function calculate_method_returns_multiple_results() {
54+
$addition = new \App\Calculator\Addition;
55+
$addition->setOperands([5, 10]); // 15
56+
57+
$division = new \App\Calculator\Division;
58+
$division->setOperands([50, 2]); // 25
59+
60+
$calculator = new \App\Calculator\Calculator;
61+
$calculator->setOperations([$addition, $division]);
62+
63+
// [15, 25]
64+
$this->assertIsArray($calculator->calculate());
65+
$this->assertEquals(15, $calculator->calculate()[0]);
66+
$this->assertEquals(25, $calculator->calculate()[1]);
67+
}
68+
}

0 commit comments

Comments
 (0)