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
73
74
75
76
77
78
79
80
81
82
83
84
|
import t from 'tap';
import {compositeFrom, input} from '#composite';
import {exposeDependency} from '#composite/control-flow';
import {withUniqueItemsOnly} from '#composite/data';
t.test(`withUniqueItemsOnly: basic behavior`, t => {
t.plan(3);
const composite = compositeFrom({
compose: false,
steps: [
withUniqueItemsOnly({
list: 'list',
}),
exposeDependency({dependency: '#list'}),
],
});
t.match(composite, {
expose: {
dependencies: ['list'],
},
});
t.same(composite.expose.compute({
list: ['apple', 'banana', 'banana', 'banana', 'apple', 'watermelon'],
}), ['apple', 'banana', 'watermelon']);
t.same(composite.expose.compute({
list: [],
}), []);
});
t.test(`withUniqueItemsOnly: output shapes & values`, t => {
t.plan(2 * 3 ** 1);
const dependencies = {
['list_dependency']:
[1, 1, 2, 3, 3, 4, 'foo', false, false, 4],
[input('list_neither')]:
[8, 8, 7, 6, 6, 5, 'bar', true, true, 5],
};
const mapLevel1 = [
['list_dependency', {
'#list_dependency': [1, 2, 3, 4, 'foo', false],
}],
[input.value([-1, -1, 'interesting', 'very', 'interesting']), {
'#uniqueItems': [-1, 'interesting', 'very'],
}],
[input('list_neither'), {
'#uniqueItems': [8, 7, 6, 5, 'bar', true],
}],
];
for (const [listInput, outputDict] of mapLevel1) {
const step = withUniqueItemsOnly({
list: listInput,
});
quickCheckOutputs(step, outputDict);
}
function quickCheckOutputs(step, outputDict) {
t.same(
Object.keys(step.toDescription().outputs),
Object.keys(outputDict));
const composite = compositeFrom({
compose: false,
steps: [step, {
dependencies: Object.keys(outputDict),
compute: dependencies => dependencies,
}],
});
t.same(
composite.expose.compute(dependencies),
outputDict);
}
});
|