-
Notifications
You must be signed in to change notification settings - Fork 3
/
helpers.test.js
72 lines (64 loc) · 1.47 KB
/
helpers.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import test from 'ava'
import {
flatten,
flattenBy,
isArray,
reverse,
reverseInplace,
sortBy,
memoizeWith,
id
} from './helpers'
test('flattens to single level', t => {
t.deepEqual(flatten([1, [2], [[3]]]), [1, 2, 3])
})
test('flattens to custom level', t => {
const oneLevel = x => isArray(x[0])
t.deepEqual(flattenBy(oneLevel)([1, [2], [[3]]]), [1, [2], [3]])
})
test('reverse', t => {
t.deepEqual(reverse(['a', 'b', 'c', 'd']), ['d', 'c', 'b', 'a'])
})
test('reverse inplace', t => {
const arr = ['a', 'b', 'c', 'd']
t.deepEqual(
reverseInplace(0, arr.length - 1, arr), ['d', 'c', 'b', 'a']
)
})
test('reverse inplace with offset', t => {
t.deepEqual(
reverseInplace(1, 2, ['a', 'b', 'c', 'd']), ['a', 'c', 'b', 'd']
)
t.deepEqual(
reverseInplace(1, 3, ['a', 'b', 'c', 'd']), ['a', 'd', 'c', 'b']
)
})
test('sort - sorts in place', t => {
t.deepEqual(sortBy(x => x)([1, 3, 2, 5, 4]), [1, 2, 3, 4, 5])
})
test('memoizeWith - single argument', t => {
let count = 0
const memoized = memoizeWith(id, (x) => {
++count
return x
})
t.is(memoized(1), 1)
t.is(count, 1)
t.is(memoized(1), 1)
t.is(count, 1)
t.is(memoized(2), 2)
t.is(count, 2)
})
test('memoizeWith - multi arguments', t => {
let count = 0
const memoized = memoizeWith((...x) => x, (x, y) => {
++count
return x + y
})
t.is(memoized(1, 2), 3)
t.is(count, 1)
t.is(memoized(1, 2), 3)
t.is(count, 1)
t.is(memoized(1, 3), 4)
t.is(count, 2)
})