combinators: fix broken optimization that made floats work for integer keys.
parent
be173c8a43
commit
a85543a42f
|
@ -236,6 +236,7 @@ CONSTANT: case-const-2 2
|
|||
[ f ] [ { 1 1 3 7 } contiguous-range? ] unit-test
|
||||
[ t ] [ { 7 6 4 8 5 } contiguous-range? ] unit-test
|
||||
|
||||
|
||||
: test-case-7 ( obj -- str )
|
||||
{
|
||||
{ \ + [ "plus" ] }
|
||||
|
@ -324,3 +325,14 @@ DEFER: corner-case-1
|
|||
[ ( x x -- x x ) ] [
|
||||
[ { [ ] [ ] } spread ] infer
|
||||
] unit-test
|
||||
|
||||
: test-case-13 ( a -- b )
|
||||
{
|
||||
{ 5 [ 5 ] }
|
||||
{ 6 [ 6 ] }
|
||||
{ 7 [ 7 ] }
|
||||
{ 8 [ 8 ] }
|
||||
{ 9 [ 9 ] }
|
||||
} case ;
|
||||
|
||||
[ 5.0 test-case-13 ] [ no-case? ] must-fail-with
|
||||
|
|
|
@ -159,20 +159,20 @@ ERROR: no-case object ;
|
|||
: contiguous-range? ( keys -- ? )
|
||||
dup [ fixnum? ] all? [
|
||||
dup all-unique? [
|
||||
[ length ]
|
||||
[ [ supremum ] [ infimum ] bi - ]
|
||||
bi - 1 =
|
||||
[ length ] [ supremum ] [ infimum ] tri - - 1 =
|
||||
] [ drop f ] if
|
||||
] [ drop f ] if ;
|
||||
|
||||
: dispatch-case-quot ( default assoc -- quot )
|
||||
[
|
||||
\ dup ,
|
||||
dup keys [ infimum , ] [ supremum , ] bi \ between? ,
|
||||
[
|
||||
dup keys infimum , [ - >fixnum ] %
|
||||
sort-keys values [ >quotation ] map ,
|
||||
\ dispatch ,
|
||||
\ dup , \ integer? , [
|
||||
\ integer>fixnum-strict , \ dup ,
|
||||
dup keys [ infimum , ] [ supremum , ] bi \ between? ,
|
||||
[
|
||||
dup keys infimum , \ - ,
|
||||
sort-keys values [ >quotation ] map ,
|
||||
\ dispatch ,
|
||||
] [ ] make , dup , \ if ,
|
||||
] [ ] make , , \ if ,
|
||||
] [ ] make ;
|
||||
|
||||
|
|
Loading…
Reference in New Issue