add support for infinity to intervals
parent
d213150834
commit
b092a4f9d5
|
@ -44,19 +44,38 @@ M: random-id-generator eval-generator ( singleton -- obj )
|
||||||
: interval-comparison ( ? str -- str )
|
: interval-comparison ( ? str -- str )
|
||||||
"from" = " >" " <" ? swap [ "= " append ] when ;
|
"from" = " >" " <" ? swap [ "= " append ] when ;
|
||||||
|
|
||||||
|
: fp-infinity? ( float -- ? )
|
||||||
|
dup float? [
|
||||||
|
double>bits -52 shift 11 2^ 1- [ bitand ] keep =
|
||||||
|
] [
|
||||||
|
drop f
|
||||||
|
] if ;
|
||||||
|
|
||||||
: where-interval ( spec obj from/to -- )
|
: where-interval ( spec obj from/to -- )
|
||||||
pick column-name>> 0%
|
over first fp-infinity? [
|
||||||
>r first2 r> interval-comparison 0%
|
3drop
|
||||||
bind# ;
|
] [
|
||||||
|
pick column-name>> 0%
|
||||||
|
>r first2 r> interval-comparison 0%
|
||||||
|
bind#
|
||||||
|
] if ;
|
||||||
|
|
||||||
: in-parens ( quot -- )
|
: in-parens ( quot -- )
|
||||||
"(" 0% call ")" 0% ; inline
|
"(" 0% call ")" 0% ; inline
|
||||||
|
|
||||||
M: interval where ( spec obj -- )
|
M: interval where ( spec obj -- )
|
||||||
[
|
dup [ from>> ] [ to>> ] bi
|
||||||
[ from>> "from" where-interval " and " 0% ]
|
[ first fp-infinity? ] bi@ and [
|
||||||
[ to>> "to" where-interval ] 2bi
|
2drop
|
||||||
] in-parens ;
|
" 1 = 1 " 0% ! dummy
|
||||||
|
] [
|
||||||
|
[
|
||||||
|
[ from>> "from" where-interval ] [
|
||||||
|
nip [ from>> ] [ to>> ] bi
|
||||||
|
[ first fp-infinity? ] bi@ or [ " and " 0% ] unless
|
||||||
|
] [ to>> "to" where-interval ] 2tri
|
||||||
|
] in-parens
|
||||||
|
] if ;
|
||||||
|
|
||||||
M: sequence where ( spec obj -- )
|
M: sequence where ( spec obj -- )
|
||||||
[
|
[
|
||||||
|
|
|
@ -293,6 +293,35 @@ TUPLE: exam id name score ;
|
||||||
}
|
}
|
||||||
] [
|
] [
|
||||||
T{ exam f T{ range f 1 3 1 } } select-tuples
|
T{ exam f T{ range f 1 3 1 } } select-tuples
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
T{ exam f 2 "Stan" 80 }
|
||||||
|
T{ exam f 3 "Kenny" 60 }
|
||||||
|
T{ exam f 4 "Cartman" 41 }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
T{ exam f T{ interval f { 2 t } { 1.0/0.0 f } } } select-tuples
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
T{ exam f 1 "Kyle" 100 }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
T{ exam f T{ interval f { -1.0/0.0 t } { 2 f } } } select-tuples
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
T{ exam f 1 "Kyle" 100 }
|
||||||
|
T{ exam f 2 "Stan" 80 }
|
||||||
|
T{ exam f 3 "Kenny" 60 }
|
||||||
|
T{ exam f 4 "Cartman" 41 }
|
||||||
|
}
|
||||||
|
] [
|
||||||
|
T{ exam f T{ interval f { -1.0/0.0 t } { 1/0. f } } } select-tuples
|
||||||
] unit-test ;
|
] unit-test ;
|
||||||
|
|
||||||
TUPLE: bignum-test id m n o ;
|
TUPLE: bignum-test id m n o ;
|
||||||
|
|
Loading…
Reference in New Issue