protected function sort($a, $b)
 {
     if ($this->math->eq($a, $b)) {
         return 0;
     }
     if ($this->math->lessThan($a, $b)) {
         return 1;
     }
     return -1;
 }
 /**
  * @param DimensionsInterface $dimensions
  * @return Length
  */
 public function calculate(DimensionsInterface $dimensions)
 {
     $dimensions = $this->dimensionsNormalizer->normalize($dimensions);
     $value = $this->math->sum($dimensions->getLength(), $dimensions->getWidth());
     $value = $this->math->mul($value, 2);
     $perimeter = new Length();
     $perimeter->setUnit($dimensions->getUnit());
     $perimeter->setValue($value);
     return $perimeter;
 }
 /**
  * @param Dimensions $dimensions
  * @return Length
  */
 public function calculate(Dimensions $dimensions)
 {
     $dimensions = $this->dimensionsNormalizer->normalize($dimensions);
     $value = $dimensions->getLength();
     $value = $this->math->sum($value, $this->math->mul($dimensions->getWidth(), 2));
     $value = $this->math->sum($value, $this->math->mul($dimensions->getHeight(), 2));
     $girth = new Length();
     $girth->setUnit($dimensions->getUnit());
     $girth->setValue($value);
     return $girth;
 }
 /**
  * @param Dimensions $dimensions
  * @return Weight
  */
 public function calculate(Dimensions $dimensions)
 {
     $length = $this->lengthConverter->convert($dimensions->getLength(), $dimensions->getUnit(), LengthUnits::IN);
     $width = $this->lengthConverter->convert($dimensions->getWidth(), $dimensions->getUnit(), LengthUnits::IN);
     $height = $this->lengthConverter->convert($dimensions->getHeight(), $dimensions->getUnit(), LengthUnits::IN);
     $volume = $this->math->mul($length, $width);
     $volume = $this->math->mul($volume, $height);
     $value = $this->math->div($volume, $this->getFactor());
     $value = $this->math->roundUp($value, 3);
     $weight = new Weight();
     $weight->setValue($value);
     $weight->setUnit(WeightUnits::LB);
     return $weight;
 }
 /**
  * @param DimensionsInterface $dimensions
  * @return Dimensions
  */
 public function normalize(DimensionsInterface $dimensions)
 {
     $values = [$dimensions->getLength()];
     if ($this->math->greaterThan($dimensions->getWidth(), reset($values))) {
         array_unshift($values, $dimensions->getWidth());
     } else {
         $values[] = $dimensions->getWidth();
     }
     if ($this->math->greaterThan($dimensions->getHeight(), reset($values))) {
         array_unshift($values, $dimensions->getHeight());
     } else {
         $values[] = $dimensions->getHeight();
     }
     $normalized = new Dimensions();
     $normalized->setUnit($dimensions->getUnit());
     $normalized->setLength(reset($values));
     $normalized->setWidth(next($values));
     $normalized->setHeight(next($values));
     return $normalized;
 }