summaryrefslogtreecommitdiff
path: root/ext/spl/tests/heap_corruption.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/spl/tests/heap_corruption.phpt')
-rw-r--r--ext/spl/tests/heap_corruption.phpt62
1 files changed, 62 insertions, 0 deletions
diff --git a/ext/spl/tests/heap_corruption.phpt b/ext/spl/tests/heap_corruption.phpt
new file mode 100644
index 0000000..284ee1d
--- /dev/null
+++ b/ext/spl/tests/heap_corruption.phpt
@@ -0,0 +1,62 @@
+--TEST--
+SPL: SplHeap - heap corruption via compare exception (with top element deletion)
+--CREDITS--
+Mike Sullivan <mikesul@php.net>
+#TestFest 2009 (London)
+--FILE--
+<?php
+
+class myHeap extends SplHeap
+{
+ public $allow_compare = true;
+
+ public function compare($v1, $v2)
+ {
+ if ($this->allow_compare == true)
+ {
+ if ($v1 > $v2)
+ {
+ return 1;
+ }
+ else if ($v1 < $v2)
+ {
+ return -1;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+ else
+ {
+ throw new Exception('Compare exception');
+ }
+ }
+}
+
+$heap = new myHeap();
+$heap->insert(1);
+$heap->insert(2);
+$heap->insert(3);
+$heap->insert(4);
+
+$heap->allow_compare = false;
+
+try {
+ $heap->extract();
+}
+catch (Exception $e) {
+ echo "Compare Exception: " . $e->getMessage() . PHP_EOL;
+}
+
+try {
+ $heap->top();
+}
+catch (Exception $e) {
+ echo "Corruption Exception: " . $e->getMessage() . PHP_EOL;
+}
+
+?>
+--EXPECT--
+Compare Exception: Compare exception
+Corruption Exception: Heap is corrupted, heap properties are no longer ensured. \ No newline at end of file