@@ -20,6 +20,73 @@ describe('cleanPath', () => {
2020 } )
2121} )
2222
23+ describe ( 'multiSortBy' , ( ) => {
24+ it ( 'sorts by single accessor' , ( ) => {
25+ const arr = [ { v : 3 } , { v : 1 } , { v : 2 } ]
26+ const result = multiSortBy ( arr , [ ( d ) => d . v ] )
27+ expect ( result . map ( ( d ) => d . v ) ) . toEqual ( [ 1 , 2 , 3 ] )
28+ } )
29+
30+ it ( 'sorts by multiple accessors' , ( ) => {
31+ const arr = [
32+ { a : 2 , b : 1 } ,
33+ { a : 1 , b : 2 } ,
34+ { a : 1 , b : 1 } ,
35+ ]
36+ const result = multiSortBy ( arr , [ ( d ) => d . a , ( d ) => d . b ] )
37+ expect ( result ) . toEqual ( [
38+ { a : 1 , b : 1 } ,
39+ { a : 1 , b : 2 } ,
40+ { a : 2 , b : 1 } ,
41+ ] )
42+ } )
43+
44+ it ( 'preserves original order for equal elements' , ( ) => {
45+ const arr = [
46+ { a : 1 , id : 'first' } ,
47+ { a : 1 , id : 'second' } ,
48+ { a : 1 , id : 'third' } ,
49+ ]
50+ const result = multiSortBy ( arr , [ ( d ) => d . a ] )
51+ expect ( result . map ( ( d ) => d . id ) ) . toEqual ( [ 'first' , 'second' , 'third' ] )
52+ } )
53+
54+ it ( 'handles undefined values' , ( ) => {
55+ const arr = [ { v : 1 } , { v : undefined } , { v : 2 } ]
56+ const result = multiSortBy ( arr , [ ( d ) => d . v ] )
57+ // undefined sorts to end
58+ expect ( result . map ( ( d ) => d . v ) ) . toEqual ( [ 1 , 2 , undefined ] )
59+ } )
60+
61+ it ( 'handles empty array' , ( ) => {
62+ const result = multiSortBy ( [ ] , [ ( d ) => d ] )
63+ expect ( result ) . toEqual ( [ ] )
64+ } )
65+
66+ it ( 'handles single element array' , ( ) => {
67+ const result = multiSortBy ( [ { v : 1 } ] , [ ( d ) => d . v ] )
68+ expect ( result ) . toEqual ( [ { v : 1 } ] )
69+ } )
70+
71+ it ( 'uses default accessor when none provided' , ( ) => {
72+ const arr = [ 3 , 1 , 2 ]
73+ const result = multiSortBy ( arr )
74+ expect ( result ) . toEqual ( [ 1 , 2 , 3 ] )
75+ } )
76+
77+ it ( 'sorts strings correctly' , ( ) => {
78+ const arr = [ { s : 'c' } , { s : 'a' } , { s : 'b' } ]
79+ const result = multiSortBy ( arr , [ ( d ) => d . s ] )
80+ expect ( result . map ( ( d ) => d . s ) ) . toEqual ( [ 'a' , 'b' , 'c' ] )
81+ } )
82+
83+ it ( 'handles negative numbers in accessors for reverse sort' , ( ) => {
84+ const arr = [ { v : 1 } , { v : 3 } , { v : 2 } ]
85+ const result = multiSortBy ( arr , [ ( d ) => - d . v ] )
86+ expect ( result . map ( ( d ) => d . v ) ) . toEqual ( [ 3 , 2 , 1 ] )
87+ } )
88+ } )
89+
2390describe . each ( [
2491 { nonNested : true , mode : 'experimental nonNestedPaths' } ,
2592 { nonNested : false , mode : 'default' } ,
0 commit comments