@@ -869,6 +869,101 @@ TEST_F(GenericFamilyTest, SortStore) {
869
869
ElementsAre (" 1.2" , " 2.20" , " 3.5" , " 10.1" , " 200" ));
870
870
}
871
871
872
+ TEST_F (GenericFamilyTest, Sort_RO) {
873
+ // Test list sort with params
874
+ Run ({" del" , " list-1" });
875
+ Run ({" lpush" , " list-1" , " 3.5" , " 1.2" , " 10.1" , " 2.20" , " 200" });
876
+ // numeric
877
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" }).GetVec (),
878
+ ElementsAre (" 1.2" , " 2.20" , " 3.5" , " 10.1" , " 200" ));
879
+ // string
880
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " ALPHA" }).GetVec (),
881
+ ElementsAre (" 1.2" , " 10.1" , " 2.20" , " 200" , " 3.5" ));
882
+ // desc numeric
883
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" }).GetVec (),
884
+ ElementsAre (" 200" , " 10.1" , " 3.5" , " 2.20" , " 1.2" ));
885
+ // desc strig
886
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" , " ALPHA" }).GetVec (),
887
+ ElementsAre (" 3.5" , " 200" , " 2.20" , " 10.1" , " 1.2" ));
888
+ // limits
889
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 0" , " 5" }).GetVec (),
890
+ ElementsAre (" 1.2" , " 2.20" , " 3.5" , " 10.1" , " 200" ));
891
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 0" , " 10" }).GetVec (),
892
+ ElementsAre (" 1.2" , " 2.20" , " 3.5" , " 10.1" , " 200" ));
893
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 2" , " 2" }).GetVec (), ElementsAre (" 3.5" , " 10.1" ));
894
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 1" , " 1" }), " 2.20" );
895
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 4" , " 2" }), " 200" );
896
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " LIMIT" , " 5" , " 2" }), ArrLen (0 ));
897
+ // limits desc
898
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" , " LIMIT" , " 0" , " 5" }).GetVec (),
899
+ ElementsAre (" 200" , " 10.1" , " 3.5" , " 2.20" , " 1.2" ));
900
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" , " LIMIT" , " 2" , " 2" }).GetVec (),
901
+ ElementsAre (" 3.5" , " 2.20" ));
902
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" , " LIMIT" , " 1" , " 1" }), " 10.1" );
903
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " DESC" , " LIMIT" , " 5" , " 2" }), ArrLen (0 ));
904
+
905
+ // Test set sort
906
+ Run ({" del" , " set-1" });
907
+ Run ({" sadd" , " set-1" , " 5.3" , " 4.4" , " 60" , " 99.9" , " 100" , " 9" });
908
+ ASSERT_THAT (Run ({" sort_ro" , " set-1" }).GetVec (),
909
+ ElementsAre (" 4.4" , " 5.3" , " 9" , " 60" , " 99.9" , " 100" ));
910
+ ASSERT_THAT (Run ({" sort_ro" , " set-1" , " ALPHA" }).GetVec (),
911
+ ElementsAre (" 100" , " 4.4" , " 5.3" , " 60" , " 9" , " 99.9" ));
912
+ ASSERT_THAT (Run ({" sort_ro" , " set-1" , " DESC" }).GetVec (),
913
+ ElementsAre (" 100" , " 99.9" , " 60" , " 9" , " 5.3" , " 4.4" ));
914
+ ASSERT_THAT (Run ({" sort_ro" , " set-1" , " DESC" , " ALPHA" }).GetVec (),
915
+ ElementsAre (" 99.9" , " 9" , " 60" , " 5.3" , " 4.4" , " 100" ));
916
+
917
+ // Test intset sort
918
+ Run ({" del" , " intset-1" });
919
+ Run ({" sadd" , " intset-1" , " 5" , " 4" , " 3" , " 2" , " 1" });
920
+ ASSERT_THAT (Run ({" sort_ro" , " intset-1" }).GetVec (), ElementsAre (" 1" , " 2" , " 3" , " 4" , " 5" ));
921
+
922
+ // Test sorted set sort
923
+ Run ({" del" , " zset-1" });
924
+ Run ({" zadd" , " zset-1" , " 0" , " 3.3" , " 0" , " 30.1" , " 0" , " 8.2" });
925
+ ASSERT_THAT (Run ({" sort_ro" , " zset-1" }).GetVec (), ElementsAre (" 3.3" , " 8.2" , " 30.1" ));
926
+ ASSERT_THAT (Run ({" sort_ro" , " zset-1" , " ALPHA" }).GetVec (), ElementsAre (" 3.3" , " 30.1" , " 8.2" ));
927
+ ASSERT_THAT (Run ({" sort_ro" , " zset-1" , " DESC" }).GetVec (), ElementsAre (" 30.1" , " 8.2" , " 3.3" ));
928
+ ASSERT_THAT (Run ({" sort_ro" , " zset-1" , " DESC" , " ALPHA" }).GetVec (),
929
+ ElementsAre (" 8.2" , " 30.1" , " 3.3" ));
930
+
931
+ // Test sort with non existent key
932
+ Run ({" del" , " list-2" });
933
+ ASSERT_THAT (Run ({" sort_ro" , " list-2" }), ArrLen (0 ));
934
+
935
+ // Test not convertible to double
936
+ Run ({" lpush" , " list-2" , " NOTADOUBLE" });
937
+ ASSERT_THAT (Run ({" sort_ro" , " list-2" }),
938
+ ErrArg (" One or more scores can't be converted into double" ));
939
+
940
+ Run ({" set" , " foo" , " bar" });
941
+ ASSERT_THAT (Run ({" sort_ro" , " foo" }), ErrArg (" WRONGTYPE " ));
942
+
943
+ Run ({" rpush" , " list-3" , " " });
944
+ ASSERT_THAT (Run ({" sort_ro" , " list-3" }), " " );
945
+
946
+ Run ({" rpush" , " list-3" , " 2" , " 0" , " " , " -0.14" , " 0.12" , " -0" , " -123123" , " 7654" });
947
+ ASSERT_THAT (Run ({" sort_ro" , " list-3" }).GetVec (),
948
+ ElementsAre (" -123123" , " -0.14" , " " , " " , " -0" , " 0" , " 0.12" , " 2" , " 7654" ));
949
+
950
+ Run ({" rpush" , " NANvalue" , " nan" });
951
+ ASSERT_THAT (Run ({" sort_ro" , " NANvalue" }),
952
+ ErrArg (" One or more scores can't be converted into double" ));
953
+
954
+ // Test store option should not work
955
+ ASSERT_THAT (Run ({" sort_ro" , " list-1" , " store" , " list-2" }), ErrArg (" syntax error" ));
956
+ }
957
+
958
+ TEST_F (GenericFamilyTest, SortROBug3636) {
959
+ Run ({" RPUSH" , " foo" , " 1.100000023841858" , " 1.100000023841858" , " 1.100000023841858" , " -15710" ,
960
+ " 1.100000023841858" , " 1.100000023841858" , " 1.100000023841858" , " -15710" , " -15710" ,
961
+ " 1.100000023841858" , " -15710" , " -15710" , " -15710" , " -15710" , " 1.100000023841858" , " -15710" ,
962
+ " -15710" });
963
+ auto resp = Run ({" SORT_RO" , " foo" , " desc" , " alpha" });
964
+ ASSERT_THAT (resp, ArrLen (17 ));
965
+ }
966
+
872
967
TEST_F (GenericFamilyTest, TimeNoKeys) {
873
968
auto resp = Run ({" time" });
874
969
EXPECT_THAT (resp, ArrLen (2 ));
0 commit comments