\ bitnot { integer } "input-classes" set-word-prop
-: ?change-interval ( info quot -- quot' )
- over interval>> [ [ clone ] dip change-interval ] [ 2drop ] if ; inline
+: real-op ( info quot -- quot' )
+ [
+ dup class>> real classes-intersect?
+ [ clone ] [ drop real <class-info> ] if
+ ] dip
+ change-interval ; inline
{ bitnot fixnum-bitnot bignum-bitnot } [
- [ [ interval-bitnot ] ?change-interval ] "outputs" set-word-prop
+ [ [ interval-bitnot ] real-op ] "outputs" set-word-prop
] 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 )
{ fixnum bignum integer rational float real number object }
[ 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 ] [ [ { double-array double-array } declare [ - absq ] [ + ] 2map-reduce ] final-info first interval>> [0,inf] = ] unit-test