41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			41 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								USING: accessors combinators.short-circuit compiler.units kernel
							 | 
						||
| 
								 | 
							
								locals math random sequences tools.memory tools.test vocabs words ;
							 | 
						||
| 
								 | 
							
								IN: compiler.tests.code-heap
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! This is a test for filling up the code heap.
							 | 
						||
| 
								 | 
							
								!
							 | 
						||
| 
								 | 
							
								! We take 100 random words and continuously run modify-code-heap with
							 | 
						||
| 
								 | 
							
								! them until the code heap fills up, prompting a compaction of it from
							 | 
						||
| 
								 | 
							
								! allot_code_block() in code_blocks.cpp. Then compaction must work
							 | 
						||
| 
								 | 
							
								! despite there being a number of uninitialized code blocks in the
							 | 
						||
| 
								 | 
							
								! heap. See #1715.
							 | 
						||
| 
								 | 
							
								: special-word? ( word -- ? )
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        [ "macro" word-prop ]
							 | 
						||
| 
								 | 
							
								        [ "no-compile" word-prop ]
							 | 
						||
| 
								 | 
							
								        [ "special" word-prop ]
							 | 
						||
| 
								 | 
							
								        [ "custom-inlining" word-prop ]
							 | 
						||
| 
								 | 
							
								    } 1|| ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: normal-words ( -- words )
							 | 
						||
| 
								 | 
							
								    all-words [ special-word? ] reject ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: random-compilation-data ( -- compiled-data )
							 | 
						||
| 
								 | 
							
								    [
							 | 
						||
| 
								 | 
							
								        normal-words 50 sample recompile
							 | 
						||
| 
								 | 
							
								    ] with-compilation-unit ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: heap-free ( -- n )
							 | 
						||
| 
								 | 
							
								    code-room total-free>> ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:: (trash-code-heap) ( data last-free -- )
							 | 
						||
| 
								 | 
							
								    data f f modify-code-heap heap-free :> new-free
							 | 
						||
| 
								 | 
							
								    last-free new-free > [ data new-free (trash-code-heap) ] when ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: trash-code-heap ( -- )
							 | 
						||
| 
								 | 
							
								    random-compilation-data heap-free (trash-code-heap) ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								{ } [
							 | 
						||
| 
								 | 
							
								    trash-code-heap
							 | 
						||
| 
								 | 
							
								] unit-test
							 |