diff options
Diffstat (limited to 'ext/spl/tests/heap_corruption.phpt')
-rw-r--r-- | ext/spl/tests/heap_corruption.phpt | 62 |
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 |