Skip to content

Commit

Permalink
PackedBox->getUsedDepth() could incorrectly return a value of 0 in so…
Browse files Browse the repository at this point in the history
…me situations. Fixes #52
  • Loading branch information
dvdoug committed Apr 15, 2017
1 parent c9b8f55 commit bdb7c77
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 2 deletions.
3 changes: 2 additions & 1 deletion VolumePacker.php
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ public function pack()

$prevItem = $orientatedItem;

if (!$nextItem) {
if ($this->items->isEmpty()) {
$this->usedDepth += $layerDepth;
}
} else {
Expand All @@ -172,6 +172,7 @@ public function pack()
continue;
} elseif ($this->lengthLeft < min($itemToPack->getWidth(), $itemToPack->getLength()) || $layerDepth == 0) {
$this->logger->debug("doesn't fit on layer even when empty");
$this->usedDepth += $layerDepth;
continue;
}

Expand Down
40 changes: 39 additions & 1 deletion tests/PackerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -343,7 +343,7 @@ public function testPackerPacksRotatedBoxesInNewRow()
self::assertEquals(2, $packedBoxes->count());
}

public function testIssue52()
public function testIssue52A()
{
$packer = new Packer();
$packer->addBox(new TestBox('Box', 100, 50, 50, 0, 100, 50, 50, 5000));
Expand All @@ -356,6 +356,44 @@ public function testIssue52()
self::assertEquals(8, $packedBoxes->top()->getUsedDepth());
}

public function testIssue52B()
{
$packer = new Packer();
$packer->addBox(new TestBox('Box',370,375,60,140,364,374,40,3000));
$packer->addItem(new TestItem('Item 1',220,310,12,679, true));
$packer->addItem(new TestItem('Item 2',210,297,11,648, true));
$packer->addItem(new TestItem('Item 3',210,297,5,187, true));
$packer->addItem(new TestItem('Item 4',148,210,32,880, true));
$packedBoxes = $packer->pack();

self::assertEquals(1, $packedBoxes->count());
self::assertEquals(310, $packedBoxes->top()->getUsedWidth());
self::assertEquals(368, $packedBoxes->top()->getUsedLength());
self::assertEquals(32, $packedBoxes->top()->getUsedDepth());
}

public function testIssue52C()
{
$packer = new Packer();
$packer->addBox(new TestBox('Box',230,300,240,160,230,300,240,15000));
$packer->addItem(new TestItem('Item 1',210,297,4,213, true));
$packer->addItem(new TestItem('Item 2',80,285,70,199, true));
$packer->addItem(new TestItem('Item 3',80,285,70,199, true));
$packedBoxes = $packer->pack();

self::assertEquals(2, $packedBoxes->count());
$box1 = $packedBoxes->extract();
$box2 = $packedBoxes->extract();

self::assertEquals(80, $box1->getUsedWidth());
self::assertEquals(285, $box1->getUsedLength());
self::assertEquals(70, $box1->getUsedDepth());

self::assertEquals(210, $box2->getUsedWidth());
self::assertEquals(297, $box2->getUsedLength());
self::assertEquals(4, $box2->getUsedDepth());
}

/**
* @dataProvider getSamples
* @coversNothing
Expand Down

0 comments on commit bdb7c77

Please sign in to comment.