]> granicus.if.org Git - php/commitdiff
Fix clone + add tests
authorEtienne Kneuss <colder@php.net>
Sun, 3 Aug 2008 19:07:22 +0000 (19:07 +0000)
committerEtienne Kneuss <colder@php.net>
Sun, 3 Aug 2008 19:07:22 +0000 (19:07 +0000)
ext/spl/spl_heap.c
ext/spl/tests/heap_001.phpt
ext/spl/tests/heap_011.phpt [new file with mode: 0644]

index a3249171f4ded9c5be45e778cc1894623a0f86da..afa95ebaa3fb32357491c98e69c9bf902310374f 100644 (file)
@@ -397,7 +397,13 @@ static zend_object_value spl_heap_object_new_ex(zend_class_entry *class_type, sp
                intern->ce_get_iterator = other->ce_get_iterator;
 
                if (clone_orig) {
+                       int i;
                        intern->heap = spl_ptr_heap_clone(other->heap TSRMLS_CC);
+                       for (i = 0; i < intern->heap->count; ++i) {
+                               if (intern->heap->elements[i]) {
+                                       Z_ADDREF_P((zval *)intern->heap->elements[i]);
+                               }
+                       }
                } else {
                        intern->heap = other->heap;
                }
index eb189d8f4ae73d4e1ad4ee5e576adf47c4ea2fdd..da4dde8ad2ed800d2e3d92b95cee9f53bf05a85c 100644 (file)
@@ -32,7 +32,9 @@ $b = 4;
 $h->insert($b);
 $b = 5;
 
+$h2 = clone $h;
 echo $h->extract()."\n";
+echo $h2->extract()."\n";
 ?>
 ===DONE===
 <?php exit(0); ?>
@@ -47,4 +49,5 @@ Exception: Can't extract from an empty heap
 0
 --
 4
+4
 ===DONE===
diff --git a/ext/spl/tests/heap_011.phpt b/ext/spl/tests/heap_011.phpt
new file mode 100644 (file)
index 0000000..1689abf
--- /dev/null
@@ -0,0 +1,31 @@
+--TEST--
+SPL: SplHeap with overriden compare()
+--FILE--
+<?php
+class SplMinHeap2 extends SplMinHeap {
+    public function compare($a, $b) {
+        return -parent::compare($a,$b);
+    }
+}
+$h = new SplMinHeap2();
+$h->insert(1);
+$h->insert(6);
+$h->insert(5);
+$h->insert(2);
+var_dump($h->top());
+
+class SplMaxHeap2 extends SplMaxHeap {
+    public function compare($a, $b) {
+        return -parent::compare($a,$b);
+    }
+}
+$h = new SplMaxHeap2();
+$h->insert(1);
+$h->insert(6);
+$h->insert(5);
+$h->insert(2);
+var_dump($h->top());
+?>
+--EXPECT--
+int(6)
+int(1)