Skip to content

Commit 35b7362

Browse files
authored
Merge pull request #1 from Spudley/master
Adding temperature conversions, plus bugfixing the calculations to support it
2 parents 64f7b9b + 43c43c9 commit 35b7362

File tree

10 files changed

+168
-6
lines changed

10 files changed

+168
-6
lines changed

src/Traits/HasFactor.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@ protected function toBaseValue($value = null)
3333
{
3434
if($value === null) $value = $this->value;
3535

36-
$value*= self::getFactor();
37-
3836
$addition = self::getAddition();
3937
if ($addition !== false) {
4038
$value+= $addition;
4139
}
4240

41+
$value*= self::getFactor();
42+
4343
return $value;
4444
}
4545
}

src/Traits/HasRelativeFactor.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ protected function fromBaseValue($baseValue)
2424

2525
$addition = self::getAddition();
2626
if ($addition !== false) {
27-
$value+= $addition;
27+
$value-= $addition;
2828
}
2929

3030
return $value;
@@ -34,13 +34,13 @@ protected function toBaseValue($value = null)
3434
{
3535
if($value === null) $value = $this->value;
3636

37-
$baseValue = $value / self::getFactor();
38-
3937
$addition = self::getAddition();
4038
if ($addition !== false) {
41-
$value-= $addition;
39+
$value+= $addition;
4240
}
4341

42+
$baseValue = $value / self::getFactor();
43+
4444
return parent::toBaseValue($baseValue);
4545
}
4646
}

src/Unit/Temperature.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit;
3+
4+
use PhpUnitConversion\Unit;
5+
use PhpUnitConversion\UnitType;
6+
7+
class Temperature extends Unit
8+
{
9+
const TYPE = UnitType::TEMPERATURE;
10+
11+
const BASE_UNIT = Temperature\Celsius::class;
12+
}

src/Unit/Temperature/Celsius.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit\Temperature;
3+
4+
use PhpUnitConversion\System\Metric;
5+
use PhpUnitConversion\Unit\Temperature;
6+
use PhpUnitConversion\Traits\BaseUnit;
7+
8+
class Celsius extends Temperature implements Metric
9+
{
10+
use BaseUnit;
11+
12+
const SYMBOL = '°C';
13+
const LABEL = 'celsius';
14+
}

src/Unit/Temperature/Fahrenheit.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit\Temperature;
3+
4+
use PhpUnitConversion\System\Imperial;
5+
use PhpUnitConversion\System\USC;
6+
use PhpUnitConversion\Unit\Temperature;
7+
use PhpUnitConversion\Traits\HasFactor;
8+
9+
class Fahrenheit extends Celsius
10+
{
11+
use HasFactor;
12+
13+
const FACTOR = 0.555555556;
14+
const ADDITION = -32;
15+
16+
const SYMBOL = '°F';
17+
const LABEL = 'farenheit';
18+
}

src/Unit/Temperature/Kelvin.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit\Temperature;
3+
4+
use PhpUnitConversion\System\Metric;
5+
use PhpUnitConversion\Unit\Temperature;
6+
use PhpUnitConversion\Traits\BaseUnit;
7+
use PhpUnitConversion\Traits\HasFactor;
8+
9+
class Kelvin extends Celsius
10+
{
11+
use HasFactor;
12+
13+
const FACTOR = 1;
14+
const ADDITION = -273.15;
15+
16+
const SYMBOL = 'K';
17+
const LABEL = 'Kelvin';
18+
}

src/Unit/Temperature/Rankine.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit\Temperature;
3+
4+
use PhpUnitConversion\System\Imperial;
5+
use PhpUnitConversion\System\USC;
6+
use PhpUnitConversion\Unit\Temperature;
7+
use PhpUnitConversion\Traits\HasRelativeFactor;
8+
9+
class Rankine extends Fahrenheit
10+
{
11+
use HasRelativeFactor;
12+
13+
const FACTOR = 1;
14+
const ADDITION = -459.67;
15+
16+
const SYMBOL = '°R';
17+
const LABEL = 'rankine';
18+
}

src/Unit/Temperature/Romer.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
namespace PhpUnitConversion\Unit\Temperature;
3+
4+
use PhpUnitConversion\System\Metric;
5+
use PhpUnitConversion\Unit\Temperature;
6+
use PhpUnitConversion\Traits\BaseUnit;
7+
use PhpUnitConversion\Traits\HasFactor;
8+
9+
class Romer extends Celsius
10+
{
11+
use HasFactor;
12+
13+
const FACTOR = 1.9047619;
14+
const ADDITION = -7.5;
15+
16+
const SYMBOL = '°Rø';
17+
const LABEL = 'Rømer';
18+
}

src/UnitType.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,5 @@ class UnitType extends Enum
1212
const AREA = 3;
1313
const VOLUME = 4;
1414
const TIME = 5;
15+
const TEMPERATURE = 6;
1516
}

tests/Unit/TemperatureTest.php

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
namespace PhpUnitConversionTest\Unit;
3+
4+
use PHPUnit\Framework\TestCase;
5+
use PhpUnitConversion\Unit\Temperature;
6+
7+
class TemperatureTest extends TestCase
8+
{
9+
public function testCelsiusToFahrenheit()
10+
{
11+
$tempUnit = new Temperature\Celsius(50);
12+
$this->assertEquals('122.0 °F', Temperature\Fahrenheit::from($tempUnit)->format(1));
13+
}
14+
15+
public function testFahrenheitToCelsius()
16+
{
17+
$tempUnit = new Temperature\Fahrenheit(50);
18+
$this->assertEquals('10.0 °C', Temperature\Celsius::from($tempUnit)->format(1));
19+
}
20+
21+
public function testCelsiusToKelvin()
22+
{
23+
$tempUnit = new Temperature\Celsius(50);
24+
$this->assertEquals('323.15 K', Temperature\Kelvin::from($tempUnit)->format(2));
25+
}
26+
27+
public function testKelvinToFahrenheit()
28+
{
29+
$tempUnit = new Temperature\Kelvin(50);
30+
$this->assertEquals('-369.67 °F', Temperature\Fahrenheit::from($tempUnit)->format(2));
31+
}
32+
33+
public function testRankineToFahrenheit()
34+
{
35+
$tempUnit = new Temperature\Rankine(50);
36+
$this->assertEquals('-409.67 °F', Temperature\Fahrenheit::from($tempUnit)->format(2));
37+
}
38+
39+
public function testFahrenheitToRankine()
40+
{
41+
$tempUnit = new Temperature\Fahrenheit(50);
42+
$this->assertEquals('509.67 °R', Temperature\Rankine::from($tempUnit)->format(2));
43+
}
44+
45+
public function testCelsiusToRankine()
46+
{
47+
$tempUnit = new Temperature\Celsius(75);
48+
$this->assertEquals('626.67 °R', Temperature\Rankine::from($tempUnit)->format(2));
49+
}
50+
51+
public function testCelsiusToRomer()
52+
{
53+
$tempUnit = new Temperature\Celsius(75);
54+
$this->assertEquals('46.875 °Rø', Temperature\Romer::from($tempUnit)->format(3));
55+
}
56+
57+
public function testRomerToRankine()
58+
{
59+
$tempUnit = new Temperature\Romer(50);
60+
$this->assertEquals('637.38 °R', Temperature\Rankine::from($tempUnit)->format(2));
61+
}
62+
63+
}

0 commit comments

Comments
 (0)