compiler.tree.propagation.*: new and fixed tests for the new propagation
behaviour for moddb4
parent
2f835d3666
commit
0d02ff8e40
|
@ -0,0 +1,8 @@
|
||||||
|
USING: accessors compiler.tree.builder compiler.tree.propagation
|
||||||
|
compiler.tree.propagation.inlining kernel math sequences tools.test ;
|
||||||
|
IN: compiler.tree.propagation.inlining.tests
|
||||||
|
|
||||||
|
{ t } [
|
||||||
|
[ >bignum 10 mod ] build-tree propagate
|
||||||
|
fourth dup word>> do-inlining
|
||||||
|
] unit-test
|
|
@ -0,0 +1,21 @@
|
||||||
|
USING: compiler.tree.propagation.known-words kernel math math.intervals
|
||||||
|
tools.test ;
|
||||||
|
IN: compiler.tree.propagation.known-words.tests
|
||||||
|
|
||||||
|
{
|
||||||
|
fixnum
|
||||||
|
T{ interval { from { -19 t } } { to { 19 t } } }
|
||||||
|
} [
|
||||||
|
integer
|
||||||
|
T{ interval { from { -19 t } } { to { 19 t } } }
|
||||||
|
maybe>fixnum
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{
|
||||||
|
object
|
||||||
|
T{ interval { from { -19 t } } { to { 19 t } } }
|
||||||
|
} [
|
||||||
|
object
|
||||||
|
T{ interval { from { -19 t } } { to { 19 t } } }
|
||||||
|
maybe>fixnum
|
||||||
|
] unit-test
|
|
@ -1,72 +1,39 @@
|
||||||
USING: accessors arrays assocs compiler.tree
|
USING: accessors arrays assocs compiler.tree
|
||||||
compiler.tree.propagation.constraints compiler.tree.propagation.copy
|
compiler.tree.propagation.constraints compiler.tree.propagation.copy
|
||||||
compiler.tree.propagation.info compiler.tree.propagation.simple kernel math
|
compiler.tree.propagation.info compiler.tree.propagation.simple hashtables
|
||||||
math.intervals math.private namespaces sequences system tools.test words ;
|
kernel math math.intervals math.private namespaces sequences system tools.test
|
||||||
|
words ;
|
||||||
IN: compiler.tree.propagation.simple.tests
|
IN: compiler.tree.propagation.simple.tests
|
||||||
|
|
||||||
|
: make-value-infos ( classes intervals -- seq )
|
||||||
|
[ <class/interval-info> ] 2map ;
|
||||||
|
|
||||||
: fixnum-value-infos ( -- infos )
|
: fixnum-value-infos ( -- infos )
|
||||||
{
|
{ fixnum fixnum } 56977 [a,a] 8098 [a,a] 2array make-value-infos ;
|
||||||
H{
|
|
||||||
{
|
|
||||||
1
|
|
||||||
T{ value-info-state
|
|
||||||
{ class fixnum }
|
|
||||||
{ interval
|
|
||||||
T{ interval
|
|
||||||
{ from { 56977 t } }
|
|
||||||
{ to { 56977 t } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{ literal 56977 }
|
|
||||||
{ literal? t }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{
|
|
||||||
2
|
|
||||||
T{ value-info-state
|
|
||||||
{ class fixnum }
|
|
||||||
{ interval
|
|
||||||
T{ interval
|
|
||||||
{ from { 8098 t } }
|
|
||||||
{ to { 8098 t } }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
{ literal 8098 }
|
|
||||||
{ literal? t }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
: object-value-infos ( -- infos )
|
: object-value-infos ( -- infos )
|
||||||
{
|
{ object object } { full-interval full-interval } make-value-infos ;
|
||||||
H{
|
|
||||||
{
|
: bignum-value-infos ( -- infos )
|
||||||
1
|
{ bignum bignum } full-interval 20 [a,a] 2array
|
||||||
T{ value-info-state
|
make-value-infos ;
|
||||||
{ class object }
|
|
||||||
{ interval full-interval }
|
: full-interval-and-bignum-literal ( -- infos )
|
||||||
}
|
{ object bignum } full-interval 20 [a,a] 2array
|
||||||
}
|
make-value-infos ;
|
||||||
{
|
|
||||||
2
|
: indexize ( seq -- assoc )
|
||||||
T{ value-info-state
|
[ swap 2array ] map-index ;
|
||||||
{ class object }
|
|
||||||
{ interval full-interval }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
: setup-value-infos ( value-infos -- )
|
: setup-value-infos ( value-infos -- )
|
||||||
value-infos set
|
indexize >hashtable 1array value-infos set
|
||||||
H{ { 1 1 } { 2 2 } { 3 3 } } copies set ;
|
H{ { 0 0 } { 1 1 } { 2 2 } } copies set ;
|
||||||
|
|
||||||
: #call-fixnum* ( -- node )
|
: #call-fixnum* ( -- node )
|
||||||
T{ #call { word fixnum* } { in-d V{ 1 2 } } { out-d { 3 } } } ;
|
T{ #call { word fixnum* } { in-d V{ 0 1 } } { out-d { 3 } } } ;
|
||||||
|
|
||||||
: #call-fixnum/mod ( -- node )
|
: call-outputs-quot-of-word ( inputs outputs word -- value-infos )
|
||||||
T{ #call { word fixnum/mod } { in-d V{ 1 2 } } { out-d { 4 5 } } } ;
|
<#call> dup word>> call-outputs-quot ;
|
||||||
|
|
||||||
{ } [
|
{ } [
|
||||||
fixnum-value-infos setup-value-infos
|
fixnum-value-infos setup-value-infos
|
||||||
|
@ -74,10 +41,6 @@ IN: compiler.tree.propagation.simple.tests
|
||||||
propagate-input-classes
|
propagate-input-classes
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
{ t } [
|
|
||||||
fixnum-value-infos setup-value-infos 1 value-info literal?>>
|
|
||||||
] unit-test
|
|
||||||
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
T{ value-info-state
|
T{ value-info-state
|
||||||
|
@ -97,7 +60,7 @@ IN: compiler.tree.propagation.simple.tests
|
||||||
}
|
}
|
||||||
} [
|
} [
|
||||||
fixnum-value-infos setup-value-infos
|
fixnum-value-infos setup-value-infos
|
||||||
#call-fixnum/mod dup word>> call-outputs-quot
|
V{ 0 1 } V{ 2 3 } \ fixnum/mod call-outputs-quot-of-word
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
! The result of fixnum-mod should always be a fixnum.
|
! The result of fixnum-mod should always be a fixnum.
|
||||||
|
@ -116,7 +79,36 @@ cpu x86.64? [
|
||||||
}
|
}
|
||||||
} [
|
} [
|
||||||
object-value-infos setup-value-infos
|
object-value-infos setup-value-infos
|
||||||
T{ #call { word fixnum-mod } { in-d V{ 1 2 } } { out-d { 4 } } }
|
V{ 0 1 } V{ 2 } \ fixnum-mod call-outputs-quot-of-word
|
||||||
dup word>> call-outputs-quot
|
|
||||||
] unit-test
|
] unit-test
|
||||||
] when
|
] when
|
||||||
|
|
||||||
|
! Downgrading should do its thing here.
|
||||||
|
{
|
||||||
|
{
|
||||||
|
T{ value-info-state
|
||||||
|
{ class fixnum }
|
||||||
|
{ interval
|
||||||
|
T{ interval { from { -19 t } } { to { 19 t } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} [
|
||||||
|
bignum-value-infos setup-value-infos
|
||||||
|
V{ 0 1 } V{ 2 } \ mod call-outputs-quot-of-word
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
! But not here because the argument to mod might be a real.
|
||||||
|
{
|
||||||
|
{
|
||||||
|
T{ value-info-state
|
||||||
|
{ class real }
|
||||||
|
{ interval
|
||||||
|
T{ interval { from { -20 f } } { to { 20 f } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} [
|
||||||
|
full-interval-and-bignum-literal setup-value-infos
|
||||||
|
V{ 0 1 } V{ 2 } \ mod call-outputs-quot-of-word
|
||||||
|
] unit-test
|
||||||
|
|
Loading…
Reference in New Issue