Example #1
0
 public function testSplitPercentages()
 {
     $money = new Money(1200, 'USD');
     list($first, $second, $third) = $money->split([60, 30, 10]);
     $this->assertEquals(720, $first->getAmount());
     $this->assertEquals(360, $second->getAmount());
     $this->assertEquals(120, $third->getAmount());
     $money = new Money(1200, 'USD');
     $aThird = 100 / 3;
     $twoThirds = 200 / 3;
     list($first, $second) = $money->split([$twoThirds, $aThird]);
     $this->assertEquals(800, $first->getAmount());
     $this->assertEquals(400, $second->getAmount());
     $money = new Money(100, 'USD');
     list($first, $second) = $money->split([$twoThirds, $aThird]);
     $this->assertEquals(66.67, $first->getAmount());
     $this->assertEquals(33.33, $second->getAmount());
     list($first, $second, $third) = $money->split([$aThird, $aThird, $aThird]);
     $this->assertEquals(33.33, $first->getAmount());
     $this->assertEquals(33.33, $second->getAmount());
     $this->assertEquals(33.34, $third->getAmount());
     $money = new Money(100, 'USD');
     list($first, $second) = $money->split([$twoThirds, $aThird], false);
     $this->assertEquals(66.66666666666667, $first->getAmount());
     $this->assertEquals(33.333333333333336, $second->getAmount());
     $money = new Money(100, 'JPY');
     list($first, $second) = $money->split([$twoThirds, $aThird]);
     $this->assertEquals(67, $first->getAmount());
     $this->assertEquals(33, $second->getAmount());
     list($first, $second, $third) = $money->split([$aThird, $aThird]);
     $this->assertEquals(33, $first->getAmount());
     $this->assertEquals(33, $second->getAmount());
     $this->assertEquals(34, $third->getAmount());
     $money = new Money(100, 'USD');
     list($first, $second, $third) = $money->split([$aThird, $aThird]);
     $this->assertEquals(33.33, $first->getAmount());
     $this->assertEquals(33.33, $second->getAmount());
     $this->assertEquals(33.34, $third->getAmount());
     list($first, $second, $third) = $money->split([$aThird, $aThird], false);
     $this->assertEquals(33.333333333333336, $first->getAmount());
     $this->assertEquals(33.333333333333336, $second->getAmount());
     $this->assertEquals(33.333333333333336, $third->getAmount());
     $this->expectException(InvalidArgumentException::class);
     $money->split([60, 30, 20]);
 }
Example #2
0
 /**
  * @param Money $money
  */
 private function assertCurrencyMatches(Money $money)
 {
     if ($this->currency !== $money->getCurrency()) {
         throw new DomainException('Currencies must match');
     }
 }