@@ -21,7 +21,7 @@ const {"take-while":takeWhile,"drop-while":dropWhile,"drop-while-end":dropWhileE
21
21
const { "split-at" :splitAt , get, set} = solution ;
22
22
const { any, all, find, "find-indices" :findIndices , "find-index" :findIndex } = solution ;
23
23
const { partition, span, "minimum-by" :minimumBy , "maximum-by" :maximumBy } = solution ;
24
- const { "insret -by" :insertBy , "sort-by" :sortBy , reverse} = solution ;
24
+ const { "insert -by" :insertBy , "sort-by" :sortBy , reverse} = solution ;
25
25
const { "zip-with" :zipWith , zip, unzip} = solution ;
26
26
const { "group-by" :groupBy , "nub-by" :nubBy , "delete-by" :deleteBy , "delete-firsts-by" :deleteFirstsBy } = solution ;
27
27
const { init, last, tails, inits, slice, transpose} = solution ;
@@ -31,13 +31,14 @@ const fromInt = LC.fromIntWith(LC.config);
31
31
const toInt = LC . toIntWith ( LC . config ) ;
32
32
const fromArray = xs => xs . reduceRight ( ( z , x ) => cons ( x ) ( z ) , nil ) ;
33
33
const toArray = foldl ( z => x => [ ...z , x ] ) ( [ ] ) ;
34
+ const fromPair = ( [ fst , snd ] ) => Pair ( fst ) ( snd ) ;
35
+ const toPair = xy => xy ( fst => snd => [ fst , snd ] ) ;
36
+ const toNullable = fn => optX => optX ( null ) ( fn ) ;
34
37
35
38
const rnd = ( m , n = 0 ) => Math . random ( ) * ( n - m ) + m | 0 ;
36
39
const elements = xs => xs [ rnd ( xs . length ) ] ;
37
40
const rndArray = size => Array . from ( { length : rnd ( size ) } , ( ) => rnd ( size ) ) ;
38
41
39
- const refReplicate = length => x => Array . from ( { length } , ( ) => x ) ;
40
-
41
42
describe ( "Scott Lists" , function ( ) {
42
43
it ( "nil,cons,singleton" , ( ) => {
43
44
assert . deepEqual ( toArray ( nil ) , [ ] ) ;
@@ -56,4 +57,27 @@ describe("Scott Lists",function(){
56
57
assert . deepEqual ( toArray ( scanl ( add ) ( zero ) ( fromArray ( xs . map ( fromInt ) ) ) ) . map ( toInt ) , xs . reduce ( ( z , x ) => [ ...z , z [ z . length - 1 ] + x ] , [ 0 ] ) , `after ${ i } tests` ) ;
57
58
}
58
59
} ) ;
60
+ it ( "take,drop" , ( ) => {
61
+ for ( let i = 1 ; i <= 10 ; i ++ ) {
62
+ const n = rnd ( i ) , xs = rndArray ( i ) ;
63
+ assert . deepEqual ( toArray ( take ( fromInt ( n ) ) ( fromArray ( xs . map ( fromInt ) ) ) ) . map ( toInt ) , xs . slice ( 0 , n ) , `after ${ i } tests` ) ;
64
+ assert . deepEqual ( toArray ( drop ( fromInt ( n ) ) ( fromArray ( xs . map ( fromInt ) ) ) ) . map ( toInt ) , xs . slice ( n ) , `after ${ i } tests` ) ;
65
+ }
66
+ } ) ;
67
+ it ( "append,concat,snoc" , ( ) => {
68
+ for ( let i = 1 ; i <= 10 ; i ++ ) {
69
+ const x = rnd ( i ) , xs = rndArray ( i ) , ys = rndArray ( i ) ;
70
+ assert . deepEqual ( toArray ( append ( fromArray ( xs . map ( fromInt ) ) ) ( fromArray ( ys . map ( fromInt ) ) ) ) . map ( toInt ) , [ ...xs , ...ys ] , `after ${ i } tests` ) ;
71
+ assert . deepEqual ( toArray ( concat ( fromArray ( [ fromArray ( xs . map ( fromInt ) ) , fromArray ( ys . map ( fromInt ) ) ] ) ) ) . map ( toInt ) , [ ...xs , ...ys ] , `after ${ i } tests` ) ;
72
+ assert . deepEqual ( toArray ( snoc ( fromArray ( xs . map ( fromInt ) ) ) ( fromInt ( x ) ) ) . map ( toInt ) , [ ...xs , x ] , `after ${ i } tests` ) ;
73
+ }
74
+ } ) ;
75
+ it ( "uncons" , ( ) => {
76
+ for ( let i = 1 ; i <= 10 ; i ++ ) {
77
+ const xs = rndArray ( i ) ;
78
+ assert . deepEqual ( toNullable ( xy => toPair ( xy ) . map ( ( x , i ) => i ? toArray ( x ) . map ( toInt ) : toInt ( x ) ) ) ( uncons ( fromArray ( xs . map ( fromInt ) ) ) ) ,
79
+ xs . length ? [ xs [ 0 ] , xs . slice ( 1 ) ] : null ,
80
+ `after ${ i } tests` ) ;
81
+ }
82
+ } ) ;
59
83
} ) ;
0 commit comments