Fix interval inference of abs, absq when input is a complex number
							parent
							
								
									829107902e
								
							
						
					
					
						commit
						2dc99ea05f
					
				| 
						 | 
					@ -32,16 +32,20 @@ IN: compiler.tree.propagation.known-words
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\ bitnot { integer } "input-classes" set-word-prop
 | 
					\ bitnot { integer } "input-classes" set-word-prop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: ?change-interval ( info quot -- quot' )
 | 
					: real-op ( info quot -- quot' )
 | 
				
			||||||
    over interval>> [ [ clone ] dip change-interval ] [ 2drop ] if ; inline
 | 
					    [
 | 
				
			||||||
 | 
					        dup class>> real classes-intersect?
 | 
				
			||||||
 | 
					        [ clone ] [ drop real <class-info> ] if
 | 
				
			||||||
 | 
					    ] dip
 | 
				
			||||||
 | 
					    change-interval ; inline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{ bitnot fixnum-bitnot bignum-bitnot } [
 | 
					{ bitnot fixnum-bitnot bignum-bitnot } [
 | 
				
			||||||
    [ [ interval-bitnot ] ?change-interval ] "outputs" set-word-prop
 | 
					    [ [ interval-bitnot ] real-op ] "outputs" set-word-prop
 | 
				
			||||||
] each
 | 
					] each
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\ abs [ [ interval-abs ] ?change-interval ] "outputs" set-word-prop
 | 
					\ abs [ [ interval-abs ] real-op ] "outputs" set-word-prop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\ absq [ [ interval-absq ] ?change-interval ] "outputs" set-word-prop
 | 
					\ absq [ [ interval-absq ] real-op ] "outputs" set-word-prop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: math-closure ( class -- newclass )
 | 
					: math-closure ( class -- newclass )
 | 
				
			||||||
    { fixnum bignum integer rational float real number object }
 | 
					    { fixnum bignum integer rational float real number object }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -165,6 +165,10 @@ IN: compiler.tree.propagation.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ t ] [ [ { float } declare absq ] final-info first interval>> [0,inf] = ] unit-test
 | 
					[ t ] [ [ { float } declare absq ] final-info first interval>> [0,inf] = ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ t ] [ [ { complex } declare abs ] final-info first interval>> [0,inf] = ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ t ] [ [ { complex } declare absq ] final-info first interval>> [0,inf] = ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ t ] [ [ [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
					[ t ] [ [ [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[ t ] [ [ { double-array double-array } declare [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
					[ t ] [ [ { double-array double-array } declare [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue