From 67b3f5cb651f1a1ec88562af4fce465b3b106a27 Mon Sep 17 00:00:00 2001 From: Maxime Bourget Date: Sat, 8 Jun 2013 10:16:30 +0100 Subject: [PATCH] All tests pass. --- includes/splitter.inc | 17 ++++++++++------- tests/testSplitter.php | 39 +++++++++++++++++++++++---------------- 2 files changed, 33 insertions(+), 23 deletions(-) diff --git a/includes/splitter.inc b/includes/splitter.inc index 6019760..7804483 100644 --- a/includes/splitter.inc +++ b/includes/splitter.inc @@ -70,22 +70,23 @@ class Splitter { $quantity = $row['quantity']; $quantity_sent = $row['qty_sent']; - if($quantity >= $quantity_sent) return $splits; - if(($quantity-$quantity_sent) % $this->max_quantity < $this->max_quantity) return; + /* Check if the item has been fully dispatched. + * If so, there is no need to do anything. + */ + if($quantity_sent >= $quantity) return $splits; // determine the number of split needed. This will give us the lenght of a split. - $nsplit = ceiling($initial_quantity/$this->max_quantity); - if($nsplit == 1) return $splits; + $nsplit = ceil($quantity/$this->max_quantity); $period = $this->days/$nsplit; - array_push($splits, $split = new Split($start_date, $period)); - $split->quantity_dispatched = $quantity_dispatched; + array_push($splits, $split = new Split($this->start_date, $period)); + $split->quantity_dispatched = $quantity_sent; $split_quantity = min($quantity, $this->max_quantity); while($split_quantity > 0) { $split->quantity += $split_quantity; // Check if the split has been entirely dispatch or not. - if($split->$quantity_dispatched > $split->quantity) { + if($split->quantity_dispatched > $split->quantity) { //extend the split $split->extend($period); } @@ -98,6 +99,8 @@ class Splitter { $split_quantity = min($quantity, $this->max_quantity); } + // We need to remove the last split if it's empty + if($split->quantity == 0) array_pop($splits); return $splits; } diff --git a/tests/testSplitter.php b/tests/testSplitter.php index aa3fa82..2f5479e 100644 --- a/tests/testSplitter.php +++ b/tests/testSplitter.php @@ -24,28 +24,35 @@ class splitterTest extends PHPUnit_Framework_TestCase { * @depends testConstruct */ public function testSplit($splitter) { - $this->assertSplit($splitter, 5, 0, array()); - $this->assertSplit($splitter, 15, 11, array()); - $this->assertSplit($splitter, 30, 24, array()); - $this->assertSplit($splitter, 10, 0 - ,array("6 0 2013/05/01 2013/05/16" - ,"4 0 2013/05/16 2013/05/31")); - $this->assertSplit($splitter, 18, 10 - ,array(" 12 10 2013/05/01 2013/05/21" - ,"6 0 2013/05/21 2013/05/31")); + $this->assertSplit($splitter, 15, 15, array()); + $this->assertSplit($splitter, 5, 0, array("5 0 2013/05/01 2013/05/31")); + $this->assertSplit($splitter, 15, 11, array("12 11 2013/05/01 2013/05/21", + "3 0 2013/05/21 2013/05/31")); + $this->assertSplit($splitter, 31, 0, array("6 0 2013/05/01 2013/05/06", + "6 0 2013/05/06 2013/05/11", + "6 0 2013/05/11 2013/05/16", + "6 0 2013/05/16 2013/05/21", + "6 0 2013/05/21 2013/05/26", + "1 0 2013/05/26 2013/05/31",)); + $this->assertSplit($splitter, 30, 24, array("24 24 2013/05/01 2013/05/25", + "6 0 2013/05/25 2013/05/31")); + $this->assertSplit($splitter, 10, 0 ,array("6 0 2013/05/01 2013/05/16" + ,"4 0 2013/05/16 2013/05/31")); + $this->assertSplit($splitter, 18, 10 ,array("12 10 2013/05/01 2013/05/21" + ,"6 0 2013/05/21 2013/05/31")); } public function assertSplit(Splitter $splitter, $quantity, $quantity_dispatched, array $expected_splits) { $splits = $splitter->split(array('quantity' => $quantity, 'qty_sent' => $quantity_dispatched)); + //print_r($splits); if(empty($expected_splits)) return $this->assertEmpty($splits); - foreach(array_combine($expected_splits, $splits) as $ex => $split) { - $this->assertEquals(explode(" ", $ex), array($split->quantity - ,$split->quantity_dispatched - ,$split->start_date - ,$split->end_date)); - - } + $this->assertEquals(array_map(function($ex) { + return explode(" ", $ex); + }, $expected_splits) + , array_map(function ($split) { + return array($split->quantity, $split->quantity_dispatched, $split->start_date, $split->end_date); + }, $splits)); } } ?> -- 2.30.2