diff --git a/extra/sequences/extras/extras-tests.factor b/extra/sequences/extras/extras-tests.factor index dfee932f38..564e2d2ea0 100644 --- a/extra/sequences/extras/extras-tests.factor +++ b/extra/sequences/extras/extras-tests.factor @@ -4,7 +4,13 @@ tools.test ; IN: sequences.extras.tests [ 1 ] [ 1 2 [ ] min-by ] unit-test +[ 1 ] [ 2 1 [ ] min-by ] unit-test +[ 42.0 ] [ 42.0 1/0. [ ] min-by ] unit-test +[ 42.0 ] [ 1/0. 42.0 [ ] min-by ] unit-test [ 2 ] [ 1 2 [ ] max-by ] unit-test +[ 2 ] [ 2 1 [ ] max-by ] unit-test +[ 1/0. ] [ 42.0 1/0. [ ] max-by ] unit-test +[ 1/0. ] [ 1/0. 42.0 [ ] max-by ] unit-test [ "12345" ] [ "123" "12345" [ length ] max-by ] unit-test [ "123" ] [ "123" "12345" [ length ] min-by ] unit-test diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 8f20fcfc67..31e16c9c9d 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -28,10 +28,10 @@ IN: sequences.extras 2dup [ < ] with find drop over length or swap insert-nth ; : max-by ( obj1 obj2 quot: ( obj -- n ) -- obj1/obj2 ) - [ bi@ [ max ] keep eq? not ] curry most ; inline + [ bi@ dupd max = ] curry most ; inline : min-by ( obj1 obj2 quot: ( obj -- n ) -- obj1/obj2 ) - [ bi@ [ min ] keep eq? not ] curry most ; inline + [ bi@ dupd min = ] curry most ; inline : maximum ( seq quot: ( ... elt -- ... x ) -- elt ) [ dup ?first ] dip [ max-by ] curry reduce ; inline