1--TEST-- 2SPL: Attempt to corrupt the heap while iterating 3--CREDITS-- 4Lukasz Andrzejak meltir@meltir.com 5#testfest London 2009-05-09 6--FILE-- 7<?php 8class ext_heap extends SplMaxHeap { 9 public $fail = false; 10 public function compare($val1,$val2): int { 11 if ($this->fail) 12 throw new Exception('Corrupting heap',99); 13 return 0; 14 } 15} 16 17$h = new ext_heap(); 18$h->insert(array('foobar')); 19$h->insert(array('foobar1')); 20$h->insert(array('foobar2')); 21 22try { 23 $h->fail=true; 24 foreach ($h as $value) {}; 25 echo "I should have raised an exception here"; 26} catch (Exception $e) { 27 if ($e->getCode()!=99) echo "Unexpected exception"; 28} 29 30var_dump($h); 31?> 32--EXPECTF-- 33object(ext_heap)#%d (4) { 34 ["fail"]=> 35 bool(true) 36 ["flags":"SplHeap":private]=> 37 int(0) 38 ["isCorrupted":"SplHeap":private]=> 39 bool(true) 40 ["heap":"SplHeap":private]=> 41 array(2) { 42 [0]=> 43 array(1) { 44 [0]=> 45 string(7) "foobar2" 46 } 47 [1]=> 48 array(1) { 49 [0]=> 50 string(7) "foobar1" 51 } 52 } 53} 54