43 lines
1.1 KiB
Factor
43 lines
1.1 KiB
Factor
|
USING: compiler.cfg.linear-scan.ranges fry kernel sequences tools.test ;
|
||
|
IN: compiler.cfg.linear-scan.ranges.tests
|
||
|
|
||
|
: combine-ranges ( seq -- ranges )
|
||
|
V{ } clone [ '[ first2 _ add-range ] each ] keep ;
|
||
|
|
||
|
! extend-ranges?
|
||
|
{ f } [
|
||
|
10 { } extend-ranges?
|
||
|
] unit-test
|
||
|
|
||
|
! add-range
|
||
|
{
|
||
|
V{ T{ live-range { from 5 } { to 12 } } }
|
||
|
V{ T{ live-range { from 5 } { to 12 } } }
|
||
|
} [
|
||
|
{ { 5 10 } { 8 12 } } combine-ranges
|
||
|
{ { 10 12 } { 5 10 } } combine-ranges
|
||
|
] unit-test
|
||
|
|
||
|
! ranges-cover?
|
||
|
{
|
||
|
t f f t t
|
||
|
} [
|
||
|
115 { { 90 120 } { 40 50 } } combine-ranges ranges-cover?
|
||
|
50 { { 60 70 } { 20 30 } } combine-ranges ranges-cover?
|
||
|
120 { { 130 140 } { 70 80 } { 50 60 } { 44 48 } { 40 42 } }
|
||
|
combine-ranges ranges-cover?
|
||
|
135 { { 130 140 } { 70 80 } { 50 60 } { 44 48 } }
|
||
|
combine-ranges ranges-cover?
|
||
|
135 { { 130 140 } { 70 80 } { 50 60 } { 44 48 } { 40 42 } } reverse
|
||
|
combine-ranges ranges-cover?
|
||
|
] unit-test
|
||
|
|
||
|
! shorten-ranges
|
||
|
{
|
||
|
V{ T{ live-range { from 8 } { to 12 } } }
|
||
|
V{ T{ live-range { from 9 } { to 9 } } }
|
||
|
} [
|
||
|
8 { { 4 12 } } combine-ranges [ shorten-ranges ] keep
|
||
|
9 { } combine-ranges [ shorten-ranges ] keep
|
||
|
] unit-test
|