]> gitweb.factorcode.org Git - factor.git/commitdiff
fix human sort -- wrap all elements so that integers dont get compared against string...
authorDoug Coleman <erg@jobim.local>
Tue, 26 May 2009 15:05:55 +0000 (10:05 -0500)
committerDoug Coleman <erg@jobim.local>
Tue, 26 May 2009 15:05:55 +0000 (10:05 -0500)
basis/sorting/human/human-tests.factor
basis/sorting/human/human.factor

index 20a607188cafc19d6ec06b21e34511706a99286d..68ddf8c3c9ee538e49bc9d289330b2c8864a0566 100644 (file)
@@ -1,4 +1,14 @@
-USING: sorting.human tools.test sorting.slots ;
+USING: sorting.human tools.test sorting.slots sorting ;
 IN: sorting.human.tests
 
-[ { "x1y" "x2" "x10y" } ] [ { "x1y" "x10y" "x2" } { human<=> } sort-by ] unit-test
+[ { "x1y" "x2" "x10y" } ]
+[ { "x1y" "x10y" "x2" } { human<=> } sort-by ] unit-test
+
+[ { "4dup" "nip" } ]
+[ { "4dup" "nip" } [ human<=> ] sort ] unit-test
+
+[ { "4dup" "nip" } ]
+[ { "nip" "4dup" } [ human<=> ] sort ] unit-test
+
+[ { "4dup" "4nip" "5drop" "nip" "nip2" "nipd" } ]
+[ { "nip" "4dup" "4nip" "5drop" "nip2" "nipd" } [ human<=> ] sort ] unit-test
index b3dae45a9b87d26fd94d46ed04e9439be96a1ebd..56de7f2f4832f68ca8f688f60c5d606bed53a37a 100644 (file)
@@ -6,4 +6,15 @@ IN: sorting.human
 : find-numbers ( string -- seq )
     [EBNF Result = ([0-9]+ => [[ string>number ]] | (!([0-9]) .)+)* EBNF] ;
 
-<< "human" [ find-numbers ] define-sorting >>
+! For comparing integers or sequences
+TUPLE: hybrid obj ;
+
+M: hybrid <=>
+    [ obj>> ] bi@
+    2dup [ integer? ] bi@ xor [
+        drop integer? [ +lt+ ] [ +gt+ ] if
+    ] [
+        <=>
+    ] if ;
+
+<< "human" [ find-numbers [ hybrid boa ] map ] define-sorting >>