Skip to content

Commit ecc6279

Browse files
committed
add optics-ts tests
1 parent 2db6477 commit ecc6279

File tree

3 files changed

+57
-11
lines changed

3 files changed

+57
-11
lines changed

package-lock.json

Lines changed: 7 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"import-path-rewrite": "github:gcanti/import-path-rewrite",
5353
"jest": "^24.3.0",
5454
"mocha": "^5.2.0",
55+
"optics-ts": "^2.1.0",
5556
"partial.lenses": "^14.17.0",
5657
"prettier": "^2.0.2",
5758
"rimraf": "^2.6.3",

perf/119.ts

Lines changed: 49 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,38 @@ import * as T from '../src/Traversal'
55
import { Traversable } from 'fp-ts/ReadonlyArray'
66
import { pipe } from 'fp-ts/function'
77
const PL = require('partial.lenses')
8+
import * as O from 'optics-ts'
89

910
/*
10-
prism into array (monocle-ts, stable APIs) x 1,140 ops/sec ±0.49% (87 runs sampled)
11-
prism into array (monocle-ts, experimental APIs) x 958 ops/sec ±3.06% (86 runs sampled)
12-
prism into array (partial.lenses) x 460,357 ops/sec ±0.46% (89 runs sampled)
13-
prism modify array (monocle-ts, stable APIs) x 1,320 ops/sec ±0.64% (86 runs sampled)
14-
prism modify array (monocle-ts, experimental APIs) x 1,423 ops/sec ±3.40% (84 runs sampled)
15-
prism modify array (partial.lenses) x 2,329 ops/sec ±0.49% (87 runs sampled)
11+
size = 5000
12+
prism into array (monocle-ts, stable APIs) x 1,123 ops/sec ±0.37% (87 runs sampled)
13+
prism into array (monocle-ts, experimental APIs) x 951 ops/sec ±2.18% (86 runs sampled)
14+
prism into array (partial.lenses) x 451,070 ops/sec ±1.17% (89 runs sampled)
15+
prism into array (optics-ts) x 10,672 ops/sec ±2.82% (84 runs sampled)
16+
prism modify array (monocle-ts, stable APIs) x 1,336 ops/sec ±0.61% (89 runs sampled)
17+
prism modify array (monocle-ts, experimental APIs) x 1,251 ops/sec ±2.06% (87 runs sampled)
18+
prism modify array (partial.lenses) x 2,191 ops/sec ±2.12% (81 runs sampled)
19+
prism modify array (optics-ts) x 3,763 ops/sec ±0.51% (92 runs sampled)
20+
21+
size = 500
22+
prism into array (monocle-ts, stable APIs) x 10,328 ops/sec ±7.12% (87 runs sampled)
23+
prism into array (monocle-ts, experimental APIs) x 9,230 ops/sec ±0.41% (91 runs sampled)
24+
prism into array (partial.lenses) x 466,256 ops/sec ±0.49% (86 runs sampled)
25+
prism into array (optics-ts) x 105,339 ops/sec ±0.45% (94 runs sampled)
26+
prism modify array (monocle-ts, stable APIs) x 13,290 ops/sec ±1.53% (82 runs sampled)
27+
prism modify array (monocle-ts, experimental APIs) x 12,911 ops/sec ±0.64% (88 runs sampled)
28+
prism modify array (partial.lenses) x 30,039 ops/sec ±0.45% (91 runs sampled)
29+
prism modify array (optics-ts) x 37,777 ops/sec ±0.46% (90 runs sampled)
30+
31+
size = 50
32+
prism into array (monocle-ts, stable APIs) x 95,180 ops/sec ±10.31% (89 runs sampled)
33+
prism into array (monocle-ts, experimental APIs) x 87,631 ops/sec ±0.39% (90 runs sampled)
34+
prism into array (partial.lenses) x 462,813 ops/sec ±0.27% (90 runs sampled)
35+
prism into array (optics-ts) x 558,323 ops/sec ±0.46% (91 runs sampled)
36+
prism modify array (monocle-ts, stable APIs) x 111,160 ops/sec ±0.63% (88 runs sampled)
37+
prism modify array (monocle-ts, experimental APIs) x 113,941 ops/sec ±0.59% (86 runs sampled)
38+
prism modify array (partial.lenses) x 200,423 ops/sec ±0.56% (87 runs sampled)
39+
prism modify array (optics-ts) x 251,464 ops/sec ±0.37% (90 runs sampled)
1640
*/
1741

1842
const suite = new Benchmark.Suite()
@@ -74,13 +98,22 @@ const traversalPartialLenses = PL.compose(
7498

7599
const foldPartialLenses = PL.compose(traversalPartialLenses, PL.valueOr(undefined))
76100

77-
const nameModified = 'Luke-' + mid + '-modified'
78-
79101
const traversalMonocleExperimentalModify = pipe(
80102
traversalMonocleExperimental,
81103
T.modify((s) => ({ ...s, name: nameModified }))
82104
)
83105

106+
const traversalOpticsTs = O.optic<typeof data>()
107+
.prop('m')
108+
.prop('n')
109+
.prop('names')
110+
.elems()
111+
// `item` here has type: `NotAnArrayType<readonly Child[]>`, not sure what it means
112+
.when((item: any) => item.id === id)
113+
114+
const nameModified = 'Luke-' + mid + '-modified'
115+
const f = (c: Child): Child => ({ ...c, name: nameModified })
116+
84117
suite
85118
.add('prism into array (monocle-ts, stable APIs)', function () {
86119
foldMonocleStable.headOption(data)
@@ -91,14 +124,20 @@ suite
91124
.add('prism into array (partial.lenses)', function () {
92125
PL.get(foldPartialLenses, data)
93126
})
127+
.add('prism into array (optics-ts)', function () {
128+
O.preview(traversalOpticsTs)(data)
129+
})
94130
.add('prism modify array (monocle-ts, stable APIs)', function () {
95-
traversalMonocleStable.modify((s) => ({ ...s, name: nameModified }))(data)
131+
traversalMonocleStable.modify(f)(data)
96132
})
97133
.add('prism modify array (monocle-ts, experimental APIs)', function () {
98134
traversalMonocleExperimentalModify(data)
99135
})
100136
.add('prism modify array (partial.lenses)', function () {
101-
PL.modify(traversalPartialLenses, (s: Child) => ({ ...s, name: nameModified }), data)
137+
PL.modify(traversalPartialLenses, f, data)
138+
})
139+
.add('prism modify array (optics-ts)', function () {
140+
O.modify(traversalOpticsTs)(f as any)(data)
102141
})
103142
.on('cycle', function (event: any) {
104143
// tslint:disable-next-line: no-console

0 commit comments

Comments
 (0)