factor/basis/compiler/tests/code-heap.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