From: Florent Bruneau Date: Sat, 13 Mar 2010 21:50:15 +0000 (+0100) Subject: Add tests to cover PlHeap and PlMergeIterator. X-Git-Tag: core/1.1.0~48 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=7caf74d3c9f513c58f4c40eb73d7e354fd87697c;p=platal.git Add tests to cover PlHeap and PlMergeIterator. Signed-off-by: Florent Bruneau --- diff --git a/ut/heaptest.php b/ut/heaptest.php new file mode 100644 index 0000000..5f37ce6 --- /dev/null +++ b/ut/heaptest.php @@ -0,0 +1,202 @@ +assertEquals(0, $heap->count()); + $this->assertNull($heap->pop()); + + $heap->push(1); + $this->assertEquals(1, $heap->count()); + $this->assertEquals(1, $heap->pop()); + $this->assertEquals(0, $heap->count()); + $this->assertNull($heap->pop()); + + $heap->push(2); + $heap->push(1); + $heap->push(4); + $heap->push(3); + $this->assertEquals(4, $heap->count()); + $this->assertEquals(1, $heap->pop()); + $this->assertEquals(3, $heap->count()); + $this->assertEquals(2, $heap->pop()); + $this->assertEquals(2, $heap->count()); + $heap->push(-1); + $this->assertEquals(3, $heap->count()); + $this->assertEquals(-1, $heap->pop()); + $this->assertEquals(2, $heap->count()); + $this->assertEquals(3, $heap->pop()); + $this->assertEquals(1, $heap->count()); + $this->assertEquals(4, $heap->pop()); + $this->assertEquals(0, $heap->count()); + $this->assertNull($heap->pop()); + } + + public function testHeapIt() + { + $heap = new PlHeap(array('HeapTest', 'compare')); + $heap->push(2); + $heap->push(1); + $heap->push(4); + $heap->push(3); + + $it = $heap->iterator(); + $this->assertEquals(4, $it->total()); + + $this->assertEquals(1, $it->next()); + $this->assertTrue($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(2, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(3, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(4, $it->next()); + $this->assertFalse($it->first()); + $this->assertTrue($it->last()); + + $this->assertNull($it->next()); + $this->assertEquals(4, $heap->count()); + } + + public function testMergeSortedIterator() + { + $its = array(); + $its[] = PlIteratorUtils::fromArray(array(2, 4, 8, 16), 1, true); + $its[] = PlIteratorUtils::fromArray(array(3, 9, 27), 1, true); + $its[] = PlIteratorUtils::fromArray(array(4, 16, 32), 1, true); + $it = PlIteratorUtils::merge($its, array('HeapTest', 'compare')); + $this->assertEquals(10, $it->total()); + + $this->assertEquals(2, $it->next()); + $this->assertTrue($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(3, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(4, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(4, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(8, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(9, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(16, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(16, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(27, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(32, $it->next()); + $this->assertFalse($it->first()); + $this->assertTrue($it->last()); + + $this->assertNull($it->next()); + } + + public function testMergeUnsortedIterator() + { + $its = array(); + $its[] = PlIteratorUtils::fromArray(array(8, 4, 16, 2), 1, true); + $its[] = PlIteratorUtils::fromArray(array(3, 27, 9), 1, true); + $its[] = PlIteratorUtils::fromArray(array(32, 4, 16), 1, true); + $it = PlIteratorUtils::merge($its, array('HeapTest', 'compare'), false); + $this->assertEquals(10, $it->total()); + + $this->assertEquals(2, $it->next()); + $this->assertTrue($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(3, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(4, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(4, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(8, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(9, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(16, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(16, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(27, $it->next()); + $this->assertFalse($it->first()); + $this->assertFalse($it->last()); + + $this->assertEquals(32, $it->next()); + $this->assertFalse($it->first()); + $this->assertTrue($it->last()); + + $this->assertNull($it->next()); + } + +} + + +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +?>