perf(array): improve array method perf
We noticed in the Redux community’s benchmarks involving Mutative that the results for remove-related operations were not very satisfactory. https://github.com/reduxjs/redux-toolkit/issues/4793
After analyzing Mutative, we found that whenever an array uses native methods to mutate its contents, the proxy mechanism unnecessarily instantiates a draft for each potentially accessed item. This unnecessary instantiation is the main cause of the poor performance. This PR addresses that issue.
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
- Based on the benchmark comparison from
test/performance/benchmark-reducer1.mjs:
Before:
remove: vanilla (freeze: false)
1.04x faster than remove: vanilla (freeze: true)
2349.65x faster than remove: immer10 (freeze: true)
3000.06x faster than remove: mutative (freeze: true)
3272.53x faster than remove: mutative (freeze: false)
5046.97x faster than remove: immer10 (freeze: false)
After:
remove: vanilla (freeze: false)
1.05x faster than remove: vanilla (freeze: true)
1227.82x faster than remove: mutative (freeze: false)
1391.1x faster than remove: mutative (freeze: true)
2315.1x faster than remove: immer10 (freeze: true)
5021.75x faster than remove: immer10 (freeze: false)
- Based on the benchmark comparison from
test/performance/benchmark-reducer.ts:
Beforce:
[remove]immer:autoFreeze: 237.964ms
[remove]immer:autoFreeze:nextAction(10): 79.223ms
-------------------------------------------------------
[remove]mutative:autoFreeze: 110.817ms
[remove]mutative:autoFreeze:nextAction(10): 152.14ms
-------------------------------------------------------
[remove]immer:noAutoFreeze: 22.608ms
[remove]immer:noAutoFreeze:nextAction(10): 113.472ms
-------------------------------------------------------
[remove]mutative:noAutoFreeze: 13.998ms
[remove]mutative:noAutoFreeze:nextAction(10): 138.987ms
-------------------------------------------------------
[remove]vanilla: 0.133ms
[remove]vanilla:nextAction(10): 3.522ms
After:
[remove]immer:autoFreeze: 239.758ms
[remove]immer:autoFreeze:nextAction(10): 79.93ms
-------------------------------------------------------
[remove]mutative:autoFreeze: 99.946ms
[remove]mutative:autoFreeze:nextAction(10): 65.956ms
-------------------------------------------------------
[remove]immer:noAutoFreeze: 20.47ms
[remove]immer:noAutoFreeze:nextAction(10): 108.389ms
-------------------------------------------------------
[remove]mutative:noAutoFreeze: 7.869ms
[remove]mutative:noAutoFreeze:nextAction(10): 64.314ms
-------------------------------------------------------
[remove]vanilla: 0.207ms
[remove]vanilla:nextAction(10): 0.686ms
From the comparison of the two benchmark tests above, we can see that Mutative’s deletion operation performance has improved by 2–3X.
I will continue adding more test sets to ensure the correctness of immutable updates.
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 99.89% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 99.42% | 99.39% | 100% | 99.38% | 156–157 |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
This PR focuses solely on performance optimization for Array operations such as splice, shift, reverse, and unshift, while ensuring the correctness of immutable updates.
However, the optimization makes the draft getters more complex, so we are carefully considering whether to merge this PR into the main branch.
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 99.71% | 99.39% | 100% | 100% | 102 |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 99.71% | 99.39% | 100% | 100% | 102 |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 99.71% | 99.39% | 100% | 100% | 102 |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Great to see this. I have been trying to migrate from immer to mutative, and the array perf is one thing that is stopping us.
I work with large arrays (20k-30k) with enablePatches set to true. And mutative is quite slow. And most of the time it crashes the page. If you need more info, happy to be a tester.
hi @rmdort, thank you very much. I will consider refactoring this PR and merging it as soon as possible.
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 99.43% | 98.84% | 100% | 100% | 145, 147 |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 98.68% | 97.22% | 100% | 100% | 147, 153 |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 99.28% | 98.44% | 100% | 100% | 25 |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Since this breaking change will cause destructive differences in Array data patches and to ensure stability, we will add a new option enableOptimizedArray (disabled by default) for this optimization.
Once the API is stable in the future, we will consider removing this option and enable these optimizations by default.
benchmark avg (min … max) p75 / p99 (min … top 1%)
-------------------------------------------------------- -------------------------------
remove: vanilla (freeze: false) 3.83 µs/iter 3.85 µs ▃ ▃ █ ▃
(3.80 µs … 3.86 µs) 3.86 µs █▂▂█ █ ▇ ▇ ▂ █ ▂
( 1.31 kb … 1.31 kb) 1.31 kb ████▆█▆▆█▁▆▁█▁▆▆█▆█▆█
remove: immer10 (freeze: false) 22.95 ms/iter 23.15 ms ███
(22.01 ms … 24.43 ms) 23.86 ms ██████ █
(564.94 kb … 13.44 mb) 3.20 mb ██▁▁███████████▁█▁▁██
remove: mutative (freeze: false) 14.15 ms/iter 13.44 ms █
(12.15 ms … 32.34 ms) 25.90 ms ▂██
( 2.24 mb … 21.33 mb) 6.12 mb ███▅▁▂▁▁▂▁▁▁▁▁▁▂▁▁▁▁▂
remove: mutativeOptimized (freeze: false) 5.83 ms/iter 5.74 ms █
(5.42 ms … 7.26 ms) 7.15 ms ▄█▅▅
( 3.29 mb … 3.48 mb) 3.37 mb █████▂▁▁▁▂▁▁▂▁▁▁▁▅▅▂▃
remove: vanilla (freeze: true) 4.19 µs/iter 4.21 µs ▃▃ █ █
(4.15 µs … 4.30 µs) 4.25 µs ▂██▂ █ █ ▇ ▇
( 1.31 kb … 1.31 kb) 1.31 kb ████▆▆▁█▆█▆▆█▁▁▁▆█▁▁▆
remove: immer10 (freeze: true) 10.89 ms/iter 12.04 ms █
(9.89 ms … 12.52 ms) 12.43 ms █▄
( 6.24 mb … 6.58 mb) 6.31 mb ███▄▂▄▁▂▁▁▁▁▁▁▂▅▄▆█▆▅
remove: mutative (freeze: true) 13.23 ms/iter 13.48 ms ██▄
(12.57 ms … 14.90 ms) 14.41 ms ████ ▅▅▅▅ ▅
( 4.66 mb … 6.20 mb) 5.35 mb ▅██████████▅██▅▁▁▁▁▅▅
remove: mutativeOptimized (freeze: true) 5.83 ms/iter 5.77 ms ▅█▄
(5.41 ms … 7.41 ms) 7.23 ms ████
( 3.12 mb … 3.44 mb) 3.36 mb ████▃▃▃▂▁▄▁▂▁▁▁▁▃▃▇▃▄
summary
remove: vanilla (freeze: false)
1.09x faster than remove: vanilla (freeze: true)
1522.04x faster than remove: mutativeOptimized (freeze: false)
1523.26x faster than remove: mutativeOptimized (freeze: true)
2846.23x faster than remove: immer10 (freeze: true)
3457.27x faster than remove: mutative (freeze: true)
3695.97x faster than remove: mutative (freeze: false)
5996.24x faster than remove: immer10 (freeze: false)
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |
Coverage after merging perf/array into main will be
| 100.00% |
|---|
Coverage Report
| File | Stmts | Branches | Funcs | Lines | Uncovered Lines |
|---|---|---|---|---|---|
| index.ts | 100% | 100% | 100% | 100% | |
| src | |||||
| apply.ts | 100% | 100% | 100% | 100% | |
| constant.ts | 100% | 100% | 100% | 100% | |
| create.ts | 100% | 100% | 100% | 100% | |
| current.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| draftify.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| interface.ts | 100% | 100% | 100% | 100% | |
| internal.ts | 100% | 100% | 100% | 100% | |
| makeCreator.ts | 100% | 100% | 100% | 100% | |
| map.ts | 100% | 100% | 100% | 100% | |
| original.ts | 100% | 100% | 100% | 100% | |
| patch.ts | 100% | 100% | 100% | 100% | |
| rawReturn.ts | 100% | 100% | 100% | 100% | |
| set.ts | 100% | 100% | 100% | 100% | |
| unsafe.ts | 100% | 100% | 100% | 100% | |
| src/utils | |||||
| cast.ts | 100% | 100% | 100% | 100% | |
| copy.ts | 100% | 100% | 100% | 100% | |
| deepFreeze.ts | 100% | 100% | 100% | 100% | |
| draft.ts | 100% | 100% | 100% | 100% | |
| finalize.ts | 100% | 100% | 100% | 100% | |
| forEach.ts | 100% | 100% | 100% | 100% | |
| index.ts | 100% | 100% | 100% | 100% | |
| mark.ts | 100% | 100% | 100% | 100% | |
| marker.ts | 100% | 100% | 100% | 100% | |
| proto.ts | 100% | 100% | 100% | 100% | |