-
-
Notifications
You must be signed in to change notification settings - Fork 71
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Benchmarks and performance improvements #223
Benchmarks and performance improvements #223
Conversation
…ype\shape()` example To run it: * `make install-static-analysis-dependencies` * `make benchmark`
@azjezz one big part that is relevant to me is optimizing the If you like where this is going (and before I add any more terrible things to it), I'll gladly expand the patch. |
Note:
I expect even better results when running with OPCache enabled, but don't have a local |
One failing test reports:
Comparing
I wonder if this scenario is valid? Is |
This looks good to me so far 👍
No 🤔 not sure why this is happening |
Pull Request Test Coverage Report for Build 1213779701
💛 - Coveralls |
…tyStringType` These types are among the most used ones, and therefore we need to kinda put some care into verifying their larger impact.
e43e8e4
to
68da707
Compare
Latest results can be seen in the commit message of 68da707 - overall quite happy with it, but wish I could make I've resorted to improving some of the base types, where possible. The ridiculous amount of scenarios is due to a @phpbench bug that I haven't yet investigated: it creates permutations of every benchmark scenario, because parent class / child class data providers are both considered, for some reason (parent class is supposed to only provide the signature). Note: I've only run unit tests and benchmarks. I'll fight Psalm/PHPCS another time :) |
… values passed to `ShapeType::coerce()` This is just a prototype, and we can likely do the same with `assert()` and `matches()`, but it's just to show the theory of operation. Results: ``` ./tools/phpbench/vendor/bin/phpbench run --config tools/phpbench/phpbench.json --ref=benchmark_reference PHPBench (1.1.0) running benchmarks... with configuration file: /app/tools/phpbench/phpbench.json with PHP version 8.0.9, xdebug ❌, opcache ❌ comparing [actual vs. benchmark_reference] \Psl\Tests\Benchmark\Type\ShapeTypeBench benchEmptyShapeCoercionAgainstEmptyArra.R1 I1 - [Mo0.500μs vs. Mo4.500μs] -88.89% (±0.00%) benchEmptyShapeCoercionAgainstNonEmptyA.R3 I3 - [Mo0.700μs vs. Mo6.103μs] -88.53% (±0.00%) benchComplexShapeCoercionAgainstValidSt.R3 I4 - [Mo1.603μs vs. Mo17.348μs] -90.76% (±2.99%) benchComplexShapeCoercionAgainstValidSt.R1 I3 - [Mo2.500μs vs. Mo24.120μs] -89.64% (±1.61%) Subjects: 4, Assertions: 0, Failures: 0, Errors: 0 ```
…s some array keys
…nknown_fields` is `true` Leads to some marginal improvement: ``` bash-5.1# make compare-benchmark-to-reference ./tools/phpbench/vendor/bin/phpbench run --config tools/phpbench/phpbench.json --ref=benchmark_reference PHPBench (1.1.0) running benchmarks... with configuration file: /app/tools/phpbench/phpbench.json with PHP version 8.0.9, xdebug ❌, opcache ❌ comparing [actual vs. benchmark_reference] \Psl\Tests\Benchmark\Type\ShapeTypeBench benchEmptyShapeCoercionAgainstEmptyArra.R1 I4 - [Mo0.600μs vs. Mo4.500μs] -86.67% (±0.00%) benchEmptyShapeCoercionAgainstNonEmptyA.R1 I4 - [Mo0.900μs vs. Mo6.103μs] -85.25% (±0.00%) benchComplexShapeCoercionAgainstValidSt.R1 I4 - [Mo1.500μs vs. Mo17.348μs] -91.35% (±0.00%) benchComplexShapeCoercionAgainstValidSt.R1 I1 - [Mo2.300μs vs. Mo24.120μs] -90.46% (±1.72%) Subjects: 4, Assertions: 0, Failures: 0, Errors: 0 ```
Results: ``` bash-5.1# make compare-benchmark-to-reference ./tools/phpbench/vendor/bin/phpbench run --config tools/phpbench/phpbench.json --ref=benchmark_reference PHPBench (1.1.0) running benchmarks... with configuration file: /app/tools/phpbench/phpbench.json with PHP version 8.0.9, xdebug ❌, opcache ❌ comparing [actual vs. benchmark_reference] \Psl\Tests\Benchmark\Type\StringTypeBench benchCoerce # string,string.............R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchCoerce # int,string................R2 I3 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchCoerce # instanceof Stringable (ex.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchCoerce # instanceof Stringable (im.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchCoerce # string,int................R2 I4 - [Mo0.200μs vs. Mo0.200μs] 0.00% (±0.00%) benchCoerce # int,int...................R2 I3 - [Mo0.200μs vs. Mo0.200μs] 0.00% (±0.00%) benchCoerce # instanceof Stringable (ex.R5 I4 - [Mo0.200μs vs. Mo0.200μs] 0.00% (±0.00%) benchCoerce # instanceof Stringable (im.R5 I4 - [Mo0.200μs vs. Mo0.200μs] 0.00% (±0.00%) benchCoerce # string,instanceof Stringa.R2 I1 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # int,instanceof Stringable.R2 I3 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # instanceof Stringable (ex.R2 I4 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # instanceof Stringable (im.R5 I4 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # string,instanceof Stringa.R5 I4 - [Mo0.200μs vs. Mo0.300μs] -33.33% (±0.00%) benchCoerce # int,instanceof Stringable.R2 I2 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # instanceof Stringable (ex.R2 I2 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchCoerce # instanceof Stringable (im.R2 I4 - [Mo0.200μs vs. Mo0.400μs] -50.00% (±0.00%) benchAssert.............................R2 I3 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch..............................R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) \Psl\Tests\Benchmark\Type\ShapeTypeBench benchCoerce # empty shape, empty array .R5 I4 - [Mo0.600μs vs. Mo4.439μs] -86.48% (±0.00%) benchCoerce # empty shape, empty iterab.R1 I2 - [Mo0.600μs vs. Mo4.500μs] -86.67% (±0.00%) benchCoerce # empty shape, non-empty ar.R5 I4 - [Mo0.600μs vs. Mo4.500μs] -86.67% (±0.00%) benchCoerce # empty shape, non-empty it.R1 I4 - [Mo0.700μs vs. Mo4.461μs] -84.31% (±0.00%) benchCoerce # complex shape with option.R1 I1 - [Mo0.700μs vs. Mo4.500μs] -84.45% (±0.00%) benchCoerce # complex shape with option.R1 I3 - [Mo0.600μs vs. Mo4.461μs] -86.55% (±0.00%) benchCoerce # complex shape with option.R1 I3 - [Mo0.700μs vs. Mo4.503μs] -84.46% (±0.00%) benchCoerce # complex shape with option.R1 I2 - [Mo0.600μs vs. Mo4.500μs] -86.67% (±0.00%) benchCoerce # empty shape, empty array .R1 I4 - [Mo1.203μs vs. Mo4.700μs] -74.40% (±3.95%) benchCoerce # empty shape, empty iterab.R1 I3 - [Mo1.300μs vs. Mo4.700μs] -72.34% (±0.00%) benchCoerce # empty shape, non-empty ar.R1 I2 - [Mo1.300μs vs. Mo4.603μs] -71.76% (±0.00%) benchCoerce # empty shape, non-empty it.R1 I0 - [Mo1.300μs vs. Mo4.613μs] -71.82% (±0.00%) benchCoerce # complex shape with option.R1 I4 - [Mo1.203μs vs. Mo4.757μs] -74.71% (±3.95%) benchCoerce # complex shape with option.R1 I4 - [Mo1.203μs vs. Mo4.600μs] -73.84% (±3.95%) benchCoerce # complex shape with option.R1 I4 - [Mo1.297μs vs. Mo4.700μs] -72.41% (±3.89%) benchCoerce # complex shape with option.R1 I4 - [Mo1.300μs vs. Mo4.661μs] -72.11% (±0.00%) benchCoerce # empty shape, empty array .R1 I4 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # empty shape, empty iterab.R2 I4 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # empty shape, non-empty ar.R1 I4 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # empty shape, non-empty it.R1 I0 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # complex shape with option.R1 I4 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # complex shape with option.R1 I0 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # complex shape with option.R2 I1 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # complex shape with option.R1 I0 - [Mo0.900μs vs. Mo6.100μs] -85.25% (±0.00%) benchCoerce # empty shape, empty array .R1 I4 - [Mo1.797μs vs. Mo6.593μs] -72.75% (±2.78%) benchCoerce # empty shape, empty iterab.R1 I4 - [Mo1.897μs vs. Mo6.587μs] -71.21% (±2.63%) benchCoerce # empty shape, non-empty ar.R1 I4 - [Mo1.897μs vs. Mo6.600μs] -71.26% (±2.63%) benchCoerce # empty shape, non-empty it.R1 I4 - [Mo1.897μs vs. Mo6.581μs] -71.18% (±2.63%) benchCoerce # complex shape with option.R1 I4 - [Mo1.803μs vs. Mo6.597μs] -72.66% (±2.66%) benchCoerce # complex shape with option.R1 I4 - [Mo1.897μs vs. Mo6.600μs] -71.26% (±2.63%) benchCoerce # complex shape with option.R1 I1 - [Mo1.800μs vs. Mo6.600μs] -72.73% (±0.00%) benchCoerce # complex shape with option.R1 I4 - [Mo1.900μs vs. Mo6.600μs] -71.21% (±2.13%) benchCoerce # empty shape, empty array .R1 I2 - [Mo1.400μs vs. Mo17.214μs] -91.87% (±0.00%) benchCoerce # empty shape, empty iterab.R1 I4 - [Mo1.500μs vs. Mo17.100μs] -91.23% (±0.00%) benchCoerce # empty shape, non-empty ar.R1 I4 - [Mo1.497μs vs. Mo17.345μs] -91.37% (±3.36%) benchCoerce # empty shape, non-empty it.R1 I4 - [Mo1.500μs vs. Mo17.300μs] -91.33% (±0.00%) benchCoerce # complex shape with option.R1 I1 - [Mo1.500μs vs. Mo17.107μs] -91.23% (±0.00%) benchCoerce # complex shape with option.R4 I4 - [Mo1.403μs vs. Mo17.204μs] -91.84% (±3.40%) benchCoerce # complex shape with option.R1 I4 - [Mo1.500μs vs. Mo17.092μs] -91.22% (±0.00%) benchCoerce # complex shape with option.R3 I4 - [Mo1.403μs vs. Mo17.213μs] -91.85% (±3.40%) benchCoerce # empty shape, empty array .R5 I4 - [Mo8.939μs vs. Mo17.939μs] -50.17% (±0.84%) benchCoerce # empty shape, empty iterab.R5 I4 - [Mo8.855μs vs. Mo17.987μs] -50.77% (±1.31%) benchCoerce # empty shape, non-empty ar.R5 I4 - [Mo8.845μs vs. Mo17.889μs] -50.56% (±2.07%) benchCoerce # empty shape, non-empty it.R5 I4 - [Mo8.893μs vs. Mo17.909μs] -50.34% (±1.11%) benchCoerce # complex shape with option.R5 I4 - [Mo9.097μs vs. Mo17.999μs] -49.46% (±1.50%) benchCoerce # complex shape with option.R5 I4 - [Mo9.034μs vs. Mo17.953μs] -49.68% (±1.67%) benchCoerce # complex shape with option.R5 I4 - [Mo8.909μs vs. Mo17.792μs] -49.93% (±1.14%) benchCoerce # complex shape with option.R5 I4 - [Mo8.913μs vs. Mo17.876μs] -50.14% (±0.89%) benchCoerce # empty shape, empty array .R5 I4 - [Mo2.200μs vs. Mo23.899μs] -90.79% (±1.80%) benchCoerce # empty shape, empty iterab.R5 I4 - [Mo2.300μs vs. Mo23.953μs] -90.40% (±2.75%) benchCoerce # empty shape, non-empty ar.R5 I4 - [Mo2.297μs vs. Mo24.093μs] -90.47% (±2.17%) benchCoerce # empty shape, non-empty it.R5 I4 - [Mo2.200μs vs. Mo24.014μs] -90.84% (±1.80%) benchCoerce # complex shape with option.R5 I4 - [Mo2.297μs vs. Mo24.023μs] -90.44% (±2.17%) benchCoerce # complex shape with option.R5 I4 - [Mo2.300μs vs. Mo24.013μs] -90.42% (±2.75%) benchCoerce # complex shape with option.R5 I4 - [Mo2.243μs vs. Mo23.981μs] -90.65% (±3.89%) benchCoerce # complex shape with option.R5 I4 - [Mo2.203μs vs. Mo23.945μs] -90.80% (±2.19%) benchCoerce # empty shape, empty array .R5 I4 - [Mo11.497μs vs. Mo25.261μs] -54.49% (±0.43%) benchCoerce # empty shape, empty iterab.R5 I4 - [Mo11.395μs vs. Mo25.138μs] -54.67% (±1.28%) benchCoerce # empty shape, non-empty ar.R5 I4 - [Mo11.303μs vs. Mo25.329μs] -55.37% (±0.43%) benchCoerce # empty shape, non-empty it.R5 I4 - [Mo11.400μs vs. Mo25.187μs] -54.74% (±0.78%) benchCoerce # complex shape with option.R5 I4 - [Mo11.403μs vs. Mo25.191μs] -54.73% (±1.18%) benchCoerce # complex shape with option.R3 I4 - [Mo11.487μs vs. Mo25.113μs] -54.26% (±0.70%) benchCoerce # complex shape with option.R3 I4 - [Mo11.361μs vs. Mo25.180μs] -54.88% (±0.66%) benchCoerce # complex shape with option.R3 I4 - [Mo11.303μs vs. Mo25.191μs] -55.13% (±0.43%) benchAssert # empty shape, empty array .R2 I2 - [Mo0.200μs vs. Mo4.000μs] -95.00% (±0.00%) benchAssert # empty shape, non-empty ar.R5 I4 - [Mo0.100μs vs. Mo4.000μs] -97.50% (±0.00%) benchAssert # complex shape with option.R5 I4 - [Mo0.100μs vs. Mo3.991μs] -97.49% (±0.00%) benchAssert # complex shape with option.R2 I4 - [Mo0.200μs vs. Mo3.997μs] -95.00% (±0.00%) benchAssert # empty shape, empty array .R1 I4 - [Mo0.500μs vs. Mo4.700μs] -89.36% (±0.00%) benchAssert # empty shape, non-empty ar.R1 I4 - [Mo0.500μs vs. Mo4.600μs] -89.13% (±0.00%) benchAssert # complex shape with option.R1 I4 - [Mo0.500μs vs. Mo4.600μs] -89.13% (±0.00%) benchAssert # complex shape with option.R1 I4 - [Mo0.500μs vs. Mo4.603μs] -89.14% (±0.00%) benchAssert # empty shape, empty array .R1 I4 - [Mo7.109μs vs. Mo14.130μs] -49.69% (±1.43%) benchAssert # empty shape, non-empty ar.R1 I3 - [Mo7.139μs vs. Mo13.903μs] -48.65% (±1.05%) benchAssert # complex shape with option.R1 I4 - [Mo7.091μs vs. Mo13.839μs] -48.76% (±1.44%) benchAssert # complex shape with option.R1 I4 - [Mo7.114μs vs. Mo13.800μs] -48.45% (±1.38%) benchAssert # empty shape, empty array .R1 I4 - [Mo9.139μs vs. Mo16.903μs] -45.93% (±0.82%) benchAssert # empty shape, non-empty ar.R1 I4 - [Mo9.100μs vs. Mo17.000μs] -46.47% (±0.44%) benchAssert # complex shape with option.R1 I4 - [Mo9.187μs vs. Mo17.091μs] -46.25% (±0.88%) benchAssert # complex shape with option.R1 I4 - [Mo9.200μs vs. Mo17.147μs] -46.35% (±0.44%) benchMatch # empty shape, empty array v.R5 I4 - [Mo0.300μs vs. Mo4.100μs] -92.68% (±0.00%) benchMatch # empty shape, non-empty arr.R5 I4 - [Mo0.300μs vs. Mo4.003μs] -92.51% (±0.00%) benchMatch # complex shape with optiona.R5 I4 - [Mo0.300μs vs. Mo4.100μs] -92.68% (±0.00%) benchMatch # complex shape with optiona.R5 I4 - [Mo0.300μs vs. Mo4.100μs] -92.68% (±0.00%) benchMatch # empty shape, empty array v.R5 I4 - [Mo0.500μs vs. Mo4.791μs] -89.56% (±0.00%) benchMatch # empty shape, non-empty arr.R1 I1 - [Mo0.500μs vs. Mo4.797μs] -89.58% (±0.00%) benchMatch # complex shape with optiona.R1 I2 - [Mo0.500μs vs. Mo4.757μs] -89.49% (±0.00%) benchMatch # complex shape with optiona.R1 I4 - [Mo0.500μs vs. Mo4.761μs] -89.50% (±0.00%) benchMatch # empty shape, empty array v.R1 I4 - [Mo7.203μs vs. Mo13.861μs] -48.03% (±1.87%) benchMatch # empty shape, non-empty arr.R1 I4 - [Mo7.187μs vs. Mo13.956μs] -48.50% (±1.12%) benchMatch # complex shape with optiona.R1 I4 - [Mo7.100μs vs. Mo14.039μs] -49.42% (±0.89%) benchMatch # complex shape with optiona.R3 I4 - [Mo7.114μs vs. Mo13.903μs] -48.83% (±1.38%) benchMatch # empty shape, empty array v.R3 I4 - [Mo9.200μs vs. Mo17.248μs] -46.66% (±0.87%) benchMatch # empty shape, non-empty arr.R1 I4 - [Mo9.197μs vs. Mo17.261μs] -46.72% (±0.53%) benchMatch # complex shape with optiona.R1 I4 - [Mo9.247μs vs. Mo17.081μs] -45.87% (±1.44%) benchMatch # complex shape with optiona.R1 I4 - [Mo9.203μs vs. Mo17.114μs] -46.22% (±0.53%) \Psl\Tests\Benchmark\Type\VecTypeBench benchCoerce # mixed, empty array,mixed,.R1 I4 - [Mo1.000μs vs. Mo1.303μs] -23.27% (±0.00%) benchCoerce # mixed, empty iterable,mix.R1 I0 - [Mo1.000μs vs. Mo1.300μs] -23.08% (±0.00%) benchCoerce # mixed, non-empty array,mi.R1 I0 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, non-empty iterable.R2 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, large array,mixed,.R1 I0 - [Mo1.000μs vs. Mo1.300μs] -23.08% (±0.00%) benchCoerce # mixed, large iterable,mix.R1 I0 - [Mo1.000μs vs. Mo1.397μs] -28.40% (±0.00%) benchCoerce # int, empty array,mixed, e.R1 I1 - [Mo1.000μs vs. Mo1.303μs] -23.27% (±0.00%) benchCoerce # int, empty iterable,mixed.R1 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, non-empty array,mixe.R1 I4 - [Mo1.000μs vs. Mo1.303μs] -23.27% (±0.00%) benchCoerce # int, non-empty iterable,m.R1 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, empty array,mixed,.R1 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, empty iterable,mix.R1 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, non-empty array,mi.R5 I4 - [Mo1.000μs vs. Mo1.403μs] -28.74% (±0.00%) benchCoerce # mixed, non-empty iterable.R1 I0 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, large array,mixed,.R2 I1 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, large iterable,mix.R2 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # int, empty array,mixed, e.R2 I4 - [Mo1.000μs vs. Mo1.497μs] -33.19% (±0.00%) benchCoerce # int, empty iterable,mixed.R1 I0 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, non-empty array,mixe.R1 I4 - [Mo1.000μs vs. Mo1.403μs] -28.74% (±0.00%) benchCoerce # int, non-empty iterable,m.R1 I2 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, empty array,mixed,.R1 I4 - [Mo1.300μs vs. Mo1.600μs] -18.75% (±0.00%) benchCoerce # mixed, empty iterable,mix.R1 I4 - [Mo1.300μs vs. Mo1.600μs] -18.75% (±0.00%) benchCoerce # mixed, non-empty array,mi.R1 I4 - [Mo1.203μs vs. Mo1.503μs] -19.96% (±3.95%) benchCoerce # mixed, non-empty iterable.R1 I4 - [Mo1.300μs vs. Mo1.600μs] -18.76% (±0.00%) benchCoerce # mixed, large array,mixed,.R1 I0 - [Mo1.200μs vs. Mo1.697μs] -29.27% (±0.00%) benchCoerce # mixed, large iterable,mix.R3 I4 - [Mo1.300μs vs. Mo1.603μs] -18.92% (±0.00%) benchCoerce # int, empty array,mixed, n.R3 I4 - [Mo1.203μs vs. Mo1.597μs] -24.64% (±3.95%) benchCoerce # int, empty iterable,mixed.R1 I1 - [Mo1.300μs vs. Mo1.603μs] -18.92% (±0.00%) benchCoerce # int, non-empty array,mixe.R1 I2 - [Mo1.300μs vs. Mo1.603μs] -18.92% (±0.00%) benchCoerce # int, non-empty iterable,m.R1 I4 - [Mo1.203μs vs. Mo1.597μs] -24.64% (±3.95%) benchCoerce # mixed, empty array,mixed,.R1 I2 - [Mo1.500μs vs. Mo1.900μs] -21.04% (±0.00%) benchCoerce # mixed, empty iterable,mix.R1 I4 - [Mo1.497μs vs. Mo1.900μs] -21.22% (±3.36%) benchCoerce # mixed, non-empty array,mi.R1 I4 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # mixed, non-empty iterable.R1 I4 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # mixed, large array,mixed,.R1 I4 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # mixed, large iterable,mix.R1 I1 - [Mo1.500μs vs. Mo1.800μs] -16.67% (±0.00%) benchCoerce # int, empty array,mixed, n.R1 I4 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # int, empty iterable,mixed.R1 I4 - [Mo1.500μs vs. Mo1.803μs] -16.82% (±0.00%) benchCoerce # int, non-empty array,mixe.R1 I3 - [Mo1.500μs vs. Mo1.900μs] -21.04% (±0.00%) benchCoerce # int, non-empty iterable,m.R1 I4 - [Mo1.500μs vs. Mo1.803μs] -16.82% (±0.00%) benchCoerce # mixed, empty array,mixed,.R1 I4 - [Mo6.700μs vs. Mo7.197μs] -6.90% (±0.60%) benchCoerce # mixed, empty iterable,mix.R1 I4 - [Mo6.752μs vs. Mo7.187μs] -6.05% (±1.61%) benchCoerce # mixed, non-empty array,mi.R1 I4 - [Mo6.703μs vs. Mo7.103μs] -5.64% (±2.54%) benchCoerce # mixed, non-empty iterable.R1 I4 - [Mo6.797μs vs. Mo7.079μs] -3.99% (±0.72%) benchCoerce # mixed, large array,mixed,.R1 I4 - [Mo6.700μs vs. Mo7.171μs] -6.57% (±0.60%) benchCoerce # mixed, large iterable,mix.R1 I4 - [Mo6.700μs vs. Mo7.200μs] -6.94% (±0.60%) benchCoerce # int, empty array,mixed, l.R1 I4 - [Mo6.787μs vs. Mo7.197μs] -5.69% (±1.19%) benchCoerce # int, empty iterable,mixed.R1 I4 - [Mo6.700μs vs. Mo7.200μs] -6.94% (±0.94%) benchCoerce # int, non-empty array,mixe.R1 I4 - [Mo6.797μs vs. Mo7.200μs] -5.60% (±0.72%) benchCoerce # int, non-empty iterable,m.R2 I3 - [Mo6.700μs vs. Mo7.043μs] -4.87% (±0.60%) benchCoerce # mixed, empty array,mixed,.R2 I4 - [Mo9.352μs vs. Mo9.823μs] -4.79% (±1.17%) benchCoerce # mixed, empty iterable,mix.R2 I4 - [Mo9.396μs vs. Mo9.873μs] -4.83% (±2.14%) benchCoerce # mixed, non-empty array,mi.R2 I4 - [Mo9.451μs vs. Mo9.786μs] -3.42% (±2.25%) benchCoerce # mixed, non-empty iterable.R2 I4 - [Mo9.493μs vs. Mo9.814μs] -3.27% (±1.04%) benchCoerce # mixed, large array,mixed,.R2 I4 - [Mo9.352μs vs. Mo9.700μs] -3.59% (±1.96%) benchCoerce # mixed, large iterable,mix.R1 I0 - [Mo9.491μs vs. Mo9.797μs] -3.12% (±1.08%) benchCoerce # int, empty array,mixed, l.R1 I0 - [Mo9.497μs vs. Mo9.839μs] -3.48% (±1.44%) benchCoerce # int, empty iterable,mixed.R1 I4 - [Mo9.300μs vs. Mo9.797μs] -5.07% (±0.43%) benchCoerce # int, non-empty array,mixe.R1 I4 - [Mo9.400μs vs. Mo9.752μs] -3.61% (±0.95%) benchCoerce # int, non-empty iterable,m.R1 I4 - [Mo9.303μs vs. Mo9.910μs] -6.12% (±0.52%) benchCoerce # mixed, empty array,int, e.R5 I4 - [Mo1.000μs vs. Mo1.303μs] -23.27% (±0.00%) benchCoerce # mixed, empty iterable,int.R5 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, non-empty array,in.R5 I4 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchCoerce # mixed, non-empty iterable.R5 I4 - [Mo1.000μs vs. Mo1.303μs] -23.27% (±0.00%) benchCoerce # mixed, large array,int, e.R5 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # mixed, large iterable,int.R5 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, empty array,int, emp.R5 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, empty iterable,int, .R1 I1 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, non-empty array,int,.R1 I4 - [Mo1.000μs vs. Mo1.397μs] -28.40% (±0.00%) benchCoerce # int, non-empty iterable,i.R1 I4 - [Mo1.000μs vs. Mo1.397μs] -28.40% (±0.00%) benchCoerce # mixed, empty array,int, e.R1 I1 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, empty iterable,int.R1 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, non-empty array,in.R1 I4 - [Mo1.000μs vs. Mo1.497μs] -33.19% (±0.00%) benchCoerce # mixed, non-empty iterable.R1 I0 - [Mo1.000μs vs. Mo1.403μs] -28.74% (±0.00%) benchCoerce # mixed, large array,int, e.R2 I3 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, large iterable,int.R2 I4 - [Mo1.000μs vs. Mo1.400μs] -28.57% (±0.00%) benchCoerce # int, empty array,int, emp.R1 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # int, empty iterable,int, .R1 I3 - [Mo1.000μs vs. Mo1.497μs] -33.19% (±0.00%) benchCoerce # int, non-empty array,int,.R1 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # int, non-empty iterable,i.R2 I4 - [Mo1.000μs vs. Mo1.500μs] -33.33% (±0.00%) benchCoerce # mixed, empty array,int, n.R4 I4 - [Mo1.203μs vs. Mo1.603μs] -24.95% (±3.95%) benchCoerce # mixed, empty iterable,int.R1 I1 - [Mo1.200μs vs. Mo1.603μs] -25.16% (±0.00%) benchCoerce # mixed, non-empty array,in.R1 I1 - [Mo1.300μs vs. Mo1.597μs] -18.58% (±0.00%) benchCoerce # mixed, non-empty iterable.R5 I4 - [Mo1.297μs vs. Mo1.597μs] -18.79% (±3.89%) benchCoerce # mixed, large array,int, n.R3 I2 - [Mo1.297μs vs. Mo1.603μs] -19.13% (±3.89%) benchCoerce # mixed, large iterable,int.R5 I4 - [Mo1.203μs vs. Mo1.600μs] -24.79% (±3.95%) benchCoerce # int, empty array,int, non.R5 I4 - [Mo1.203μs vs. Mo1.600μs] -24.80% (±3.95%) benchCoerce # int, empty iterable,int, .R1 I1 - [Mo1.300μs vs. Mo1.600μs] -18.76% (±0.00%) benchCoerce # int, non-empty array,int,.R1 I3 - [Mo1.300μs vs. Mo1.600μs] -18.75% (±0.00%) benchCoerce # int, non-empty iterable,i.R1 I4 - [Mo1.300μs vs. Mo1.500μs] -13.33% (±0.00%) benchCoerce # mixed, empty array,int, n.R1 I4 - [Mo1.500μs vs. Mo1.900μs] -21.06% (±0.00%) benchCoerce # mixed, empty iterable,int.R5 I4 - [Mo1.500μs vs. Mo1.900μs] -21.04% (±0.00%) benchCoerce # mixed, non-empty array,in.R5 I4 - [Mo1.500μs vs. Mo1.903μs] -21.19% (±0.00%) benchCoerce # mixed, non-empty iterable.R5 I4 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # mixed, large array,int, n.R5 I4 - [Mo1.500μs vs. Mo1.803μs] -16.82% (±0.00%) benchCoerce # mixed, large iterable,int.R1 I0 - [Mo1.500μs vs. Mo1.897μs] -20.91% (±0.00%) benchCoerce # int, empty array,int, non.R5 I4 - [Mo1.500μs vs. Mo1.900μs] -21.05% (±0.00%) benchCoerce # int, empty iterable,int, .R1 I2 - [Mo1.500μs vs. Mo1.803μs] -16.82% (±0.00%) benchCoerce # int, non-empty array,int,.R1 I3 - [Mo1.500μs vs. Mo1.800μs] -16.68% (±0.00%) benchCoerce # int, non-empty iterable,i.R1 I4 - [Mo1.500μs vs. Mo1.900μs] -21.05% (±0.00%) benchAssert # mixed, empty array,mixed,.R1 I3 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchAssert # mixed, non-empty array,mi.R5 I4 - [Mo1.000μs vs. Mo1.397μs] -28.40% (±0.00%) benchAssert # mixed, large array,mixed,.R1 I0 - [Mo1.000μs vs. Mo1.297μs] -22.88% (±0.00%) benchAssert # int, empty array,mixed, e.R1 I0 - [Mo0.900μs vs. Mo1.200μs] -25.00% (±0.00%) benchAssert # int, non-empty array,mixe.R1 I4 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchAssert # mixed, empty array,mixed,.R1 I3 - [Mo1.400μs vs. Mo1.600μs] -12.51% (±0.00%) benchAssert # mixed, non-empty array,mi.R2 I4 - [Mo1.400μs vs. Mo1.603μs] -12.68% (±0.00%) benchAssert # mixed, large array,mixed,.R1 I1 - [Mo1.397μs vs. Mo1.697μs] -17.68% (±3.60%) benchAssert # int, empty array,mixed, n.R1 I2 - [Mo1.400μs vs. Mo1.700μs] -17.64% (±0.00%) benchAssert # int, non-empty array,mixe.R1 I4 - [Mo1.400μs vs. Mo1.600μs] -12.50% (±0.00%) benchAssert # mixed, empty array,mixed,.R1 I4 - [Mo8.200μs vs. Mo8.597μs] -4.61% (±0.49%) benchAssert # mixed, non-empty array,mi.R1 I2 - [Mo8.207μs vs. Mo8.697μs] -5.63% (±1.18%) benchAssert # mixed, large array,mixed,.R1 I4 - [Mo8.213μs vs. Mo8.609μs] -4.60% (±0.97%) benchAssert # int, empty array,mixed, l.R1 I4 - [Mo8.200μs vs. Mo8.639μs] -5.08% (±0.00%) benchAssert # int, non-empty array,mixe.R1 I4 - [Mo8.200μs vs. Mo8.579μs] -4.42% (±0.49%) benchAssert # mixed, empty array,int, e.R1 I4 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchAssert # mixed, non-empty array,in.R1 I4 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchAssert # mixed, large array,int, e.R5 I4 - [Mo1.000μs vs. Mo1.300μs] -23.08% (±0.00%) benchAssert # int, empty array,int, emp.R5 I4 - [Mo1.000μs vs. Mo1.203μs] -16.90% (±0.00%) benchAssert # int, non-empty array,int,.R5 I4 - [Mo1.000μs vs. Mo1.300μs] -23.08% (±0.00%) benchAssert # mixed, empty array,int, n.R1 I1 - [Mo1.400μs vs. Mo1.600μs] -12.51% (±0.00%) benchAssert # mixed, non-empty array,in.R1 I4 - [Mo1.397μs vs. Mo1.600μs] -12.72% (±3.60%) benchAssert # mixed, large array,int, n.R1 I2 - [Mo1.400μs vs. Mo1.600μs] -12.51% (±0.00%) benchAssert # int, empty array,int, non.R1 I4 - [Mo1.400μs vs. Mo1.600μs] -12.51% (±0.00%) benchAssert # int, non-empty array,int,.R1 I0 - [Mo1.400μs vs. Mo1.603μs] -12.68% (±0.00%) benchMatch # mixed, empty array,mixed, .R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # mixed, non-empty array,mix.R2 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # mixed, large array,mixed, .R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # int, empty array,mixed, em.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # int, non-empty array,mixed.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # mixed, empty array,mixed, .R5 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # mixed, non-empty array,mix.R5 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # mixed, large array,mixed, .R1 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # int, empty array,mixed, no.R1 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # int, non-empty array,mixed.R1 I2 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # mixed, empty array,mixed, .R4 I4 - [Mo6.986μs vs. Mo7.200μs] -2.98% (±1.40%) benchMatch # mixed, non-empty array,mix.R4 I4 - [Mo7.000μs vs. Mo7.120μs] -1.68% (±0.00%) benchMatch # mixed, large array,mixed, .R4 I4 - [Mo6.986μs vs. Mo7.197μs] -2.93% (±1.40%) benchMatch # int, empty array,mixed, la.R4 I4 - [Mo6.900μs vs. Mo7.152μs] -3.52% (±0.92%) benchMatch # int, non-empty array,mixed.R4 I4 - [Mo6.986μs vs. Mo7.161μs] -2.45% (±1.40%) benchMatch # mixed, empty array,int, em.R4 I4 - [Mo0.200μs vs. Mo0.200μs] 0.00% (±0.00%) benchMatch # mixed, non-empty array,int.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # mixed, large array,int, em.R5 I4 - [Mo0.100μs vs. Mo0.200μs] -50.00% (±0.00%) benchMatch # int, empty array,int, empt.R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # int, non-empty array,int, .R5 I4 - [Mo0.100μs vs. Mo0.100μs] 0.00% (±0.00%) benchMatch # mixed, empty array,int, no.R5 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # mixed, non-empty array,int.R5 I4 - [Mo0.500μs vs. Mo0.600μs] -16.67% (±0.00%) benchMatch # mixed, large array,int, no.R5 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # int, empty array,int, non-.R5 I4 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) benchMatch # int, non-empty array,int, .R1 I1 - [Mo0.500μs vs. Mo0.500μs] 0.00% (±0.00%) \Psl\Tests\Benchmark\Type\DictTypeBench benchCoerce # generic array, empty arra.R1 I4 - [Mo1.797μs vs. Mo2.300μs] -21.89% (±2.78%) benchCoerce # generic array, empty iter.R1 I4 - [Mo1.800μs vs. Mo2.303μs] -21.84% (±2.20%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # generic array, non-empty .R2 I4 - [Mo1.800μs vs. Mo2.397μs] -24.90% (±2.25%) benchCoerce # generic array, large arra.R1 I2 - [Mo1.703μs vs. Mo2.303μs] -26.05% (±2.82%) benchCoerce # generic array, large iter.R1 I4 - [Mo1.800μs vs. Mo2.397μs] -24.90% (±2.25%) benchCoerce # int array, empty array,ge.R1 I0 - [Mo1.700μs vs. Mo2.303μs] -26.19% (±2.33%) benchCoerce # int array, empty iterable.R1 I4 - [Mo1.797μs vs. Mo2.400μs] -25.13% (±2.78%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # int array, non-empty iter.R1 I1 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # int array, large array,ge.R1 I4 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # int array, large iterable.R1 I2 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # map, empty array,generic .R1 I4 - [Mo1.700μs vs. Mo2.397μs] -29.06% (±2.33%) benchCoerce # map, empty iterable,gener.R1 I3 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # map, non-empty array,gene.R1 I4 - [Mo1.703μs vs. Mo2.303μs] -26.05% (±2.82%) benchCoerce # map, non-empty iterable,g.R1 I4 - [Mo1.800μs vs. Mo2.397μs] -24.90% (±2.25%) benchCoerce # map, large array,generic .R1 I4 - [Mo1.803μs vs. Mo2.439μs] -26.06% (±2.66%) benchCoerce # map, large iterable,gener.R2 I3 - [Mo1.800μs vs. Mo2.300μs] -21.72% (±2.20%) benchCoerce # generic array, empty arra.R2 I2 - [Mo1.900μs vs. Mo2.497μs] -23.91% (±2.13%) benchCoerce # generic array, empty iter.R2 I4 - [Mo1.900μs vs. Mo2.497μs] -23.91% (±2.13%) benchCoerce # generic array, non-empty .R2 I4 - [Mo1.897μs vs. Mo2.403μs] -21.08% (±2.63%) benchCoerce # generic array, non-empty .R2 I3 - [Mo1.900μs vs. Mo2.403μs] -20.95% (±2.13%) benchCoerce # generic array, large arra.R2 I1 - [Mo1.900μs vs. Mo2.403μs] -20.94% (±0.00%) benchCoerce # generic array, large iter.R2 I4 - [Mo1.900μs vs. Mo2.500μs] -24.00% (±2.13%) benchCoerce # int array, empty array,ge.R1 I0 - [Mo1.800μs vs. Mo2.497μs] -27.90% (±0.00%) benchCoerce # int array, empty iterable.R2 I1 - [Mo1.900μs vs. Mo2.400μs] -20.83% (±0.00%) benchCoerce # int array, non-empty arra.R2 I3 - [Mo1.897μs vs. Mo2.497μs] -24.03% (±2.63%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo1.997μs vs. Mo2.439μs] -18.13% (±2.50%) benchCoerce # int array, large array,ge.R1 I4 - [Mo1.903μs vs. Mo2.500μs] -23.86% (±2.53%) benchCoerce # int array, large iterable.R1 I4 - [Mo1.803μs vs. Mo2.500μs] -27.86% (±2.66%) benchCoerce # map, empty array,generic .R1 I4 - [Mo1.900μs vs. Mo2.403μs] -20.95% (±2.13%) benchCoerce # map, empty iterable,gener.R1 I4 - [Mo1.900μs vs. Mo2.500μs] -24.00% (±2.13%) benchCoerce # map, non-empty array,gene.R2 I4 - [Mo1.900μs vs. Mo2.497μs] -23.90% (±0.00%) benchCoerce # map, non-empty iterable,g.R1 I2 - [Mo1.900μs vs. Mo2.500μs] -24.00% (±2.13%) benchCoerce # map, large array,generic .R1 I4 - [Mo1.900μs vs. Mo2.497μs] -23.89% (±2.08%) benchCoerce # map, large iterable,gener.R1 I1 - [Mo1.900μs vs. Mo2.497μs] -23.89% (±2.08%) benchCoerce # generic array, empty arra.R1 I4 - [Mo2.097μs vs. Mo2.797μs] -25.03% (±2.38%) benchCoerce # generic array, empty iter.R1 I4 - [Mo2.003μs vs. Mo2.739μs] -26.86% (±2.40%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.000μs vs. Mo2.661μs] -24.84% (±0.00%) benchCoerce # generic array, non-empty .R1 I3 - [Mo2.000μs vs. Mo2.797μs] -28.48% (±1.98%) benchCoerce # generic array, large arra.R1 I4 - [Mo2.000μs vs. Mo2.700μs] -25.92% (±0.00%) benchCoerce # generic array, large iter.R1 I4 - [Mo2.000μs vs. Mo2.757μs] -27.47% (±0.00%) benchCoerce # int array, empty array,ge.R1 I4 - [Mo2.000μs vs. Mo2.697μs] -25.83% (±0.00%) benchCoerce # int array, empty iterable.R1 I4 - [Mo2.000μs vs. Mo2.703μs] -26.01% (±1.98%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo2.000μs vs. Mo2.800μs] -28.57% (±0.00%) benchCoerce # int array, non-empty iter.R1 I3 - [Mo2.000μs vs. Mo2.697μs] -25.83% (±0.00%) benchCoerce # int array, large array,ge.R1 I0 - [Mo2.003μs vs. Mo2.703μs] -25.89% (±2.40%) benchCoerce # int array, large iterable.R1 I4 - [Mo2.003μs vs. Mo2.757μs] -27.35% (±2.40%) benchCoerce # map, empty array,generic .R1 I4 - [Mo2.000μs vs. Mo2.603μs] -23.18% (±0.00%) benchCoerce # map, empty iterable,gener.R1 I4 - [Mo2.000μs vs. Mo2.661μs] -24.84% (±0.00%) benchCoerce # map, non-empty array,gene.R1 I4 - [Mo2.000μs vs. Mo2.739μs] -26.97% (±1.98%) benchCoerce # map, non-empty iterable,g.R1 I4 - [Mo2.000μs vs. Mo2.600μs] -23.08% (±1.98%) benchCoerce # map, large array,generic .R1 I4 - [Mo2.000μs vs. Mo2.697μs] -25.83% (±0.00%) benchCoerce # map, large iterable,gener.R1 I0 - [Mo2.000μs vs. Mo2.600μs] -23.08% (±1.98%) benchCoerce # generic array, empty arra.R1 I0 - [Mo2.197μs vs. Mo2.900μs] -24.25% (±2.27%) benchCoerce # generic array, empty iter.R1 I4 - [Mo2.197μs vs. Mo2.900μs] -24.26% (±2.27%) benchCoerce # generic array, non-empty .R1 I2 - [Mo2.300μs vs. Mo2.900μs] -20.70% (±0.00%) benchCoerce # generic array, non-empty .R5 I4 - [Mo2.297μs vs. Mo2.900μs] -20.80% (±2.17%) benchCoerce # generic array, large arra.R5 I4 - [Mo2.103μs vs. Mo2.900μs] -27.47% (±2.29%) benchCoerce # generic array, large iter.R1 I1 - [Mo2.297μs vs. Mo2.803μs] -18.07% (±2.17%) benchCoerce # int array, empty array,ge.R1 I4 - [Mo2.200μs vs. Mo2.900μs] -24.14% (±1.83%) benchCoerce # int array, empty iterable.R1 I1 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo2.203μs vs. Mo2.843μs] -22.49% (±2.19%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo2.200μs vs. Mo2.800μs] -21.44% (±2.87%) benchCoerce # int array, large array,ge.R1 I3 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # int array, large iterable.R1 I4 - [Mo2.200μs vs. Mo2.900μs] -24.15% (±1.83%) benchCoerce # map, empty array,generic .R1 I0 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # map, empty iterable,gener.R1 I4 - [Mo2.203μs vs. Mo2.861μs] -22.99% (±2.19%) benchCoerce # map, non-empty array,gene.R1 I4 - [Mo2.297μs vs. Mo2.861μs] -19.73% (±2.17%) benchCoerce # map, non-empty iterable,g.R1 I4 - [Mo2.197μs vs. Mo2.861μs] -23.22% (±2.27%) benchCoerce # map, large array,generic .R1 I4 - [Mo2.197μs vs. Mo2.843μs] -22.72% (±2.27%) benchCoerce # map, large iterable,gener.R1 I4 - [Mo2.100μs vs. Mo2.939μs] -28.54% (±1.89%) benchCoerce # generic array, empty arra.R1 I4 - [Mo18.103μs vs. Mo326.937μs] -94.46% (±0.75%) benchCoerce # generic array, empty iter.R1 I4 - [Mo18.052μs vs. Mo325.946μs] -94.46% (±0.61%) benchCoerce # generic array, non-empty .R1 I4 - [Mo18.599μs vs. Mo324.214μs] -94.26% (±1.22%) benchCoerce # generic array, non-empty .R1 I4 - [Mo18.170μs vs. Mo327.802μs] -94.46% (±1.94%) benchCoerce # generic array, large arra.R1 I4 - [Mo18.247μs vs. Mo326.870μs] -94.42% (±0.73%) benchCoerce # generic array, large iter.R1 I4 - [Mo18.092μs vs. Mo328.002μs] -94.48% (±0.66%) benchCoerce # int array, empty array,ge.R1 I4 - [Mo18.126μs vs. Mo329.762μs] -94.50% (±0.88%) benchCoerce # int array, empty iterable.R1 I4 - [Mo18.317μs vs. Mo327.166μs] -94.40% (±0.88%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo18.052μs vs. Mo326.338μs] -94.47% (±0.81%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo18.066μs vs. Mo329.029μs] -94.51% (±1.57%) benchCoerce # int array, large array,ge.R1 I4 - [Mo18.116μs vs. Mo327.405μs] -94.47% (±1.37%) benchCoerce # int array, large iterable.R1 I4 - [Mo18.081μs vs. Mo328.705μs] -94.50% (±0.75%) benchCoerce # map, empty array,generic .R1 I4 - [Mo18.122μs vs. Mo324.396μs] -94.41% (±1.78%) benchCoerce # map, empty iterable,gener.R1 I4 - [Mo18.189μs vs. Mo326.667μs] -94.43% (±2.25%) benchCoerce # map, non-empty array,gene.R1 I4 - [Mo18.227μs vs. Mo326.286μs] -94.41% (±2.13%) benchCoerce # map, non-empty iterable,g.R1 I4 - [Mo18.183μs vs. Mo332.231μs] -94.53% (±0.88%) benchCoerce # map, large array,generic .R1 I4 - [Mo18.102μs vs. Mo324.131μs] -94.42% (±1.15%) benchCoerce # map, large iterable,gener.R1 I4 - [Mo18.112μs vs. Mo326.523μs] -94.45% (±1.17%) benchCoerce # generic array, empty arra.R1 I0 - [Mo21.448μs vs. Mo335.466μs] -93.61% (±0.51%) benchCoerce # generic array, empty iter.R1 I4 - [Mo21.252μs vs. Mo332.853μs] -93.62% (±0.69%) benchCoerce # generic array, non-empty .R1 I4 - [Mo21.309μs vs. Mo331.768μs] -93.58% (±0.48%) benchCoerce # generic array, non-empty .R1 I4 - [Mo21.389μs vs. Mo336.761μs] -93.65% (±1.39%) benchCoerce # generic array, large arra.R1 I4 - [Mo21.352μs vs. Mo333.064μs] -93.59% (±0.51%) benchCoerce # generic array, large iter.R1 I4 - [Mo21.203μs vs. Mo332.537μs] -93.62% (±0.23%) benchCoerce # int array, empty array,ge.R1 I4 - [Mo21.200μs vs. Mo334.033μs] -93.65% (±0.19%) benchCoerce # int array, empty iterable.R1 I4 - [Mo21.284μs vs. Mo334.392μs] -93.64% (±1.60%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo21.378μs vs. Mo331.303μs] -93.55% (±0.70%) benchCoerce # int array, non-empty iter.R1 I0 - [Mo21.357μs vs. Mo332.874μs] -93.58% (±1.53%) benchCoerce # int array, large array,ge.R1 I4 - [Mo21.292μs vs. Mo332.954μs] -93.61% (±0.56%) benchCoerce # int array, large iterable.R1 I4 - [Mo21.400μs vs. Mo334.819μs] -93.61% (±0.19%) benchCoerce # map, empty array,generic .R1 I4 - [Mo21.395μs vs. Mo334.542μs] -93.60% (±1.08%) benchCoerce # map, empty iterable,gener.R1 I4 - [Mo21.504μs vs. Mo334.089μs] -93.56% (±1.48%) benchCoerce # map, non-empty array,gene.R1 I4 - [Mo21.554μs vs. Mo332.130μs] -93.51% (±1.19%) benchCoerce # map, non-empty iterable,g.R1 I4 - [Mo21.202μs vs. Mo331.910μs] -93.61% (±1.53%) benchCoerce # map, large array,generic .R4 I4 - [Mo21.719μs vs. Mo342.579μs] -93.66% (±1.27%) benchCoerce # map, large iterable,gener.R2 I4 - [Mo21.437μs vs. Mo337.972μs] -93.66% (±1.90%) benchCoerce # generic array, empty arra.R1 I2 - [Mo1.703μs vs. Mo2.200μs] -22.58% (±2.82%) benchCoerce # generic array, empty iter.R1 I4 - [Mo1.603μs vs. Mo2.200μs] -27.13% (±2.99%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.697μs vs. Mo2.200μs] -22.89% (±2.95%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.600μs vs. Mo2.297μs] -30.33% (±2.47%) benchCoerce # generic array, large arra.R1 I4 - [Mo1.697μs vs. Mo2.200μs] -22.89% (±2.95%) benchCoerce # generic array, large iter.R2 I3 - [Mo1.697μs vs. Mo2.297μs] -26.12% (±2.95%) benchCoerce # int array, empty array,in.R2 I4 - [Mo1.603μs vs. Mo2.303μs] -30.39% (±2.99%) benchCoerce # int array, empty iterable.R1 I0 - [Mo1.703μs vs. Mo2.300μs] -25.94% (±2.82%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo1.697μs vs. Mo2.303μs] -26.34% (±2.95%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo1.703μs vs. Mo2.200μs] -22.58% (±2.82%) benchCoerce # int array, large array,in.R1 I4 - [Mo1.600μs vs. Mo2.200μs] -27.27% (±2.47%) benchCoerce # int array, large iterable.R1 I4 - [Mo1.600μs vs. Mo2.203μs] -27.37% (±2.47%) benchCoerce # map, empty array,int arra.R1 I1 - [Mo1.697μs vs. Mo2.203μs] -22.99% (±2.95%) benchCoerce # map, empty iterable,int a.R1 I4 - [Mo1.603μs vs. Mo2.300μs] -30.28% (±2.99%) benchCoerce # map, non-empty array,int .R1 I0 - [Mo1.600μs vs. Mo2.397μs] -33.23% (±2.47%) benchCoerce # map, non-empty iterable,i.R1 I4 - [Mo1.797μs vs. Mo2.297μs] -21.77% (±2.78%) benchCoerce # map, large array,int arra.R1 I4 - [Mo1.603μs vs. Mo2.200μs] -27.13% (±2.99%) benchCoerce # map, large iterable,int a.R1 I2 - [Mo1.600μs vs. Mo2.243μs] -28.65% (±2.47%) benchCoerce # generic array, empty arra.R1 I4 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # generic array, empty iter.R1 I4 - [Mo1.797μs vs. Mo2.303μs] -22.00% (±2.78%) benchCoerce # generic array, non-empty .R1 I0 - [Mo1.797μs vs. Mo2.439μs] -26.33% (±2.78%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # generic array, large arra.R1 I4 - [Mo1.703μs vs. Mo2.300μs] -25.94% (±2.82%) benchCoerce # generic array, large iter.R1 I4 - [Mo1.700μs vs. Mo2.400μs] -29.15% (±2.33%) benchCoerce # int array, empty array,in.R2 I2 - [Mo1.700μs vs. Mo2.397μs] -29.06% (±2.33%) benchCoerce # int array, empty iterable.R5 I4 - [Mo1.797μs vs. Mo2.400μs] -25.13% (±2.78%) benchCoerce # int array, non-empty arra.R5 I4 - [Mo1.703μs vs. Mo2.300μs] -25.94% (±2.82%) benchCoerce # int array, non-empty iter.R5 I4 - [Mo1.700μs vs. Mo2.400μs] -29.16% (±2.33%) benchCoerce # int array, large array,in.R5 I4 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # int array, large iterable.R5 I4 - [Mo1.700μs vs. Mo2.397μs] -29.06% (±2.33%) benchCoerce # map, empty array,int arra.R5 I4 - [Mo1.703μs vs. Mo2.300μs] -25.95% (±2.82%) benchCoerce # map, empty iterable,int a.R5 I4 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # map, non-empty array,int .R5 I4 - [Mo1.797μs vs. Mo2.400μs] -25.13% (±2.78%) benchCoerce # map, non-empty iterable,i.R2 I3 - [Mo1.700μs vs. Mo2.400μs] -29.16% (±2.33%) benchCoerce # map, large array,int arra.R2 I4 - [Mo1.703μs vs. Mo2.400μs] -29.02% (±2.82%) benchCoerce # map, large iterable,int a.R1 I1 - [Mo1.703μs vs. Mo2.303μs] -26.05% (±2.82%) benchCoerce # generic array, empty arra.R1 I2 - [Mo2.297μs vs. Mo2.897μs] -20.71% (±2.17%) benchCoerce # generic array, empty iter.R1 I4 - [Mo2.297μs vs. Mo2.803μs] -18.07% (±2.17%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.297μs vs. Mo2.900μs] -20.80% (±2.17%) benchCoerce # generic array, large arra.R1 I4 - [Mo2.300μs vs. Mo2.900μs] -20.70% (±2.75%) benchCoerce # generic array, large iter.R1 I4 - [Mo2.397μs vs. Mo2.800μs] -14.40% (±2.08%) benchCoerce # int array, empty array,in.R1 I4 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # int array, empty iterable.R2 I4 - [Mo2.200μs vs. Mo2.861μs] -23.11% (±2.87%) benchCoerce # int array, non-empty arra.R2 I4 - [Mo2.300μs vs. Mo2.900μs] -20.69% (±2.75%) benchCoerce # int array, non-empty iter.R2 I4 - [Mo2.297μs vs. Mo2.900μs] -20.80% (±2.17%) benchCoerce # int array, large array,in.R2 I4 - [Mo2.203μs vs. Mo2.803μs] -21.40% (±2.19%) benchCoerce # int array, large iterable.R2 I4 - [Mo2.300μs vs. Mo2.807μs] -18.06% (±1.75%) benchCoerce # map, empty array,int arra.R2 I4 - [Mo2.300μs vs. Mo2.803μs] -17.96% (±1.75%) benchCoerce # map, empty iterable,int a.R1 I1 - [Mo2.297μs vs. Mo2.897μs] -20.71% (±2.17%) benchCoerce # map, non-empty array,int .R1 I4 - [Mo2.200μs vs. Mo2.900μs] -24.14% (±1.80%) benchCoerce # map, non-empty iterable,i.R1 I4 - [Mo2.200μs vs. Mo2.897μs] -24.05% (±0.00%) benchCoerce # map, large array,int arra.R1 I4 - [Mo2.297μs vs. Mo2.900μs] -20.80% (±2.17%) benchCoerce # map, large iterable,int a.R1 I4 - [Mo2.203μs vs. Mo2.900μs] -24.03% (±2.19%) benchCoerce # generic array, empty arra.R1 I4 - [Mo2.500μs vs. Mo3.100μs] -19.35% (±0.00%) benchCoerce # generic array, empty iter.R1 I4 - [Mo2.500μs vs. Mo3.061μs] -18.34% (±1.61%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.500μs vs. Mo3.100μs] -19.36% (±1.61%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.500μs vs. Mo3.103μs] -19.43% (±1.59%) benchCoerce # generic array, large arra.R1 I4 - [Mo2.500μs vs. Mo3.097μs] -19.27% (±1.61%) benchCoerce # generic array, large iter.R1 I4 - [Mo2.500μs vs. Mo3.000μs] -16.68% (±2.53%) benchCoerce # int array, empty array,in.R1 I4 - [Mo2.500μs vs. Mo3.000μs] -16.68% (±1.61%) benchCoerce # int array, empty iterable.R1 I4 - [Mo2.500μs vs. Mo3.003μs] -16.76% (±0.00%) benchCoerce # int array, non-empty arra.R5 I4 - [Mo2.500μs vs. Mo3.007μs] -16.85% (±0.00%) benchCoerce # int array, non-empty iter.R5 I4 - [Mo2.500μs vs. Mo3.013μs] -17.02% (±1.59%) benchCoerce # int array, large array,in.R5 I4 - [Mo2.500μs vs. Mo3.100μs] -19.35% (±0.00%) benchCoerce # int array, large iterable.R5 I4 - [Mo2.500μs vs. Mo3.100μs] -19.35% (±0.00%) benchCoerce # map, empty array,int arra.R5 I4 - [Mo2.500μs vs. Mo3.000μs] -16.67% (±0.00%) benchCoerce # map, empty iterable,int a.R5 I4 - [Mo2.500μs vs. Mo3.000μs] -16.67% (±0.00%) benchCoerce # map, non-empty array,int .R5 I4 - [Mo2.500μs vs. Mo3.013μs] -17.02% (±0.00%) benchCoerce # map, non-empty iterable,i.R5 I4 - [Mo2.500μs vs. Mo3.097μs] -19.27% (±0.00%) benchCoerce # map, large array,int arra.R5 I4 - [Mo2.500μs vs. Mo3.000μs] -16.67% (±1.59%) benchCoerce # map, large iterable,int a.R5 I4 - [Mo2.500μs vs. Mo3.097μs] -19.27% (±0.00%) benchCoerce # generic array, empty arra.R5 I4 - [Mo16.403μs vs. Mo17.213μs] -4.70% (±0.30%) benchCoerce # generic array, empty iter.R1 I4 - [Mo16.500μs vs. Mo17.345μs] -4.88% (±0.38%) benchCoerce # generic array, non-empty .R1 I4 - [Mo16.413μs vs. Mo17.114μs] -4.10% (±0.49%) benchCoerce # generic array, non-empty .R1 I4 - [Mo16.461μs vs. Mo17.287μs] -4.78% (±0.45%) benchCoerce # generic array, large arra.R1 I4 - [Mo16.403μs vs. Mo17.390μs] -5.67% (±0.30%) benchCoerce # generic array, large iter.R1 I4 - [Mo16.513μs vs. Mo17.516μs] -5.73% (±3.05%) benchCoerce # int array, empty array,in.R1 I4 - [Mo16.476μs vs. Mo17.234μs] -4.40% (±2.27%) benchCoerce # int array, empty iterable.R1 I4 - [Mo16.424μs vs. Mo17.345μs] -5.31% (±1.17%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo16.455μs vs. Mo17.297μs] -4.87% (±0.71%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo16.497μs vs. Mo17.380μs] -5.08% (±0.30%) benchCoerce # int array, large array,in.R1 I4 - [Mo16.461μs vs. Mo17.209μs] -4.34% (±0.45%) benchCoerce # int array, large iterable.R1 I4 - [Mo16.453μs vs. Mo17.209μs] -4.39% (±2.06%) benchCoerce # map, empty array,int arra.R1 I4 - [Mo16.539μs vs. Mo17.300μs] -4.40% (±0.45%) benchCoerce # map, empty iterable,int a.R1 I4 - [Mo16.539μs vs. Mo17.297μs] -4.38% (±0.45%) benchCoerce # map, non-empty array,int .R1 I4 - [Mo16.426μs vs. Mo17.302μs] -5.06% (±0.97%) benchCoerce # map, non-empty iterable,i.R1 I4 - [Mo16.409μs vs. Mo17.192μs] -4.55% (±0.62%) benchCoerce # map, large array,int arra.R1 I4 - [Mo16.608μs vs. Mo17.209μs] -3.49% (±0.73%) benchCoerce # map, large iterable,int a.R1 I0 - [Mo16.539μs vs. Mo17.304μs] -4.42% (±0.45%) benchCoerce # generic array, empty arra.R1 I4 - [Mo19.658μs vs. Mo20.890μs] -5.90% (±2.44%) benchCoerce # generic array, empty iter.R1 I4 - [Mo19.502μs vs. Mo20.728μs] -5.91% (±2.03%) benchCoerce # generic array, non-empty .R1 I4 - [Mo19.561μs vs. Mo20.830μs] -6.09% (±0.38%) benchCoerce # generic array, non-empty .R5 I4 - [Mo19.513μs vs. Mo20.752μs] -5.97% (±0.41%) benchCoerce # generic array, large arra.R5 I4 - [Mo19.603μs vs. Mo20.789μs] -5.71% (±0.87%) benchCoerce # generic array, large iter.R5 I4 - [Mo19.552μs vs. Mo20.978μs] -6.80% (±1.14%) benchCoerce # int array, empty array,in.R5 I4 - [Mo19.629μs vs. Mo20.857μs] -5.89% (±2.20%) benchCoerce # int array, empty iterable.R5 I4 - [Mo19.576μs vs. Mo20.835μs] -6.04% (±1.91%) benchCoerce # int array, non-empty arra.R5 I4 - [Mo19.500μs vs. Mo20.761μs] -6.07% (±0.20%) benchCoerce # int array, non-empty iter.R5 I4 - [Mo19.524μs vs. Mo20.800μs] -6.13% (±0.99%) benchCoerce # int array, large array,in.R5 I4 - [Mo19.500μs vs. Mo20.791μs] -6.21% (±0.41%) benchCoerce # int array, large iterable.R5 I4 - [Mo19.688μs vs. Mo20.889μs] -5.75% (±2.36%) benchCoerce # map, empty array,int arra.R5 I4 - [Mo19.517μs vs. Mo20.820μs] -6.26% (±1.24%) benchCoerce # map, empty iterable,int a.R5 I4 - [Mo19.570μs vs. Mo20.925μs] -6.47% (±0.94%) benchCoerce # map, non-empty array,int .R1 I1 - [Mo19.513μs vs. Mo20.752μs] -5.97% (±0.41%) benchCoerce # map, non-empty iterable,i.R1 I4 - [Mo19.657μs vs. Mo21.423μs] -8.24% (±0.46%) benchCoerce # map, large array,int arra.R1 I4 - [Mo19.779μs vs. Mo20.814μs] -4.97% (±0.82%) benchCoerce # map, large iterable,int a.R1 I4 - [Mo19.639μs vs. Mo20.753μs] -5.37% (±0.38%) benchCoerce # generic array, empty arra.R1 I4 - [Mo1.600μs vs. Mo2.300μs] -30.43% (±2.47%) benchCoerce # generic array, empty iter.R1 I4 - [Mo1.600μs vs. Mo2.303μs] -30.53% (±2.47%) benchCoerce # generic array, non-empty .R1 I2 - [Mo1.703μs vs. Mo2.397μs] -28.93% (±2.82%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.603μs vs. Mo2.300μs] -30.28% (±2.99%) benchCoerce # generic array, large arra.R1 I4 - [Mo1.700μs vs. Mo2.203μs] -22.85% (±2.38%) benchCoerce # generic array, large iter.R1 I4 - [Mo1.600μs vs. Mo2.303μs] -30.53% (±2.47%) benchCoerce # int array, empty array,ma.R1 I4 - [Mo1.603μs vs. Mo2.203μs] -27.23% (±2.99%) benchCoerce # int array, empty iterable.R1 I4 - [Mo1.700μs vs. Mo2.203μs] -22.85% (±2.38%) benchCoerce # int array, non-empty arra.R2 I3 - [Mo1.700μs vs. Mo2.300μs] -26.09% (±2.38%) benchCoerce # int array, non-empty iter.R2 I4 - [Mo1.697μs vs. Mo2.297μs] -26.12% (±2.95%) benchCoerce # int array, large array,ma.R2 I3 - [Mo1.697μs vs. Mo2.297μs] -26.12% (±2.95%) benchCoerce # int array, large iterable.R2 I4 - [Mo1.700μs vs. Mo2.297μs] -25.98% (±0.00%) benchCoerce # map, empty array,map, emp.R2 I4 - [Mo1.697μs vs. Mo2.297μs] -26.12% (±2.95%) benchCoerce # map, empty iterable,map, .R1 I0 - [Mo1.697μs vs. Mo2.200μs] -22.89% (±2.95%) benchCoerce # map, non-empty array,map,.R4 I4 - [Mo1.700μs vs. Mo2.200μs] -22.74% (±2.38%) benchCoerce # map, non-empty iterable,m.R1 I2 - [Mo1.800μs vs. Mo2.200μs] -18.20% (±2.25%) benchCoerce # map, large array,map, emp.R1 I0 - [Mo1.603μs vs. Mo2.397μs] -33.10% (±2.99%) benchCoerce # map, large iterable,map, .R1 I4 - [Mo1.603μs vs. Mo2.400μs] -33.19% (±2.99%) benchCoerce # generic array, empty arra.R1 I4 - [Mo1.703μs vs. Mo2.439μs] -30.16% (±2.82%) benchCoerce # generic array, empty iter.R5 I4 - [Mo1.797μs vs. Mo2.397μs] -25.03% (±2.78%) benchCoerce # generic array, non-empty .R5 I4 - [Mo1.800μs vs. Mo2.400μs] -24.99% (±2.20%) benchCoerce # generic array, non-empty .R1 I4 - [Mo1.797μs vs. Mo2.300μs] -21.89% (±2.78%) benchCoerce # generic array, large arra.R1 I4 - [Mo1.703μs vs. Mo2.400μs] -29.03% (±2.82%) benchCoerce # generic array, large iter.R3 I4 - [Mo1.703μs vs. Mo2.397μs] -28.93% (±2.82%) benchCoerce # int array, empty array,ma.R3 I4 - [Mo1.700μs vs. Mo2.300μs] -26.08% (±2.33%) benchCoerce # int array, empty iterable.R1 I1 - [Mo1.703μs vs. Mo2.400μs] -29.03% (±2.82%) benchCoerce # int array, non-empty arra.R2 I1 - [Mo1.800μs vs. Mo2.400μs] -25.00% (±2.25%) benchCoerce # int array, non-empty iter.R2 I4 - [Mo1.800μs vs. Mo2.397μs] -24.90% (±2.25%) benchCoerce # int array, large array,ma.R1 I3 - [Mo1.700μs vs. Mo2.397μs] -29.06% (±2.33%) benchCoerce # int array, large iterable.R1 I1 - [Mo1.803μs vs. Mo2.397μs] -24.76% (±2.66%) benchCoerce # map, empty array,map, emp.R1 I1 - [Mo1.703μs vs. Mo2.397μs] -28.93% (±2.82%) benchCoerce # map, empty iterable,map, .R1 I4 - [Mo1.797μs vs. Mo2.303μs] -22.00% (±2.78%) benchCoerce # map, non-empty array,map,.R1 I4 - [Mo1.800μs vs. Mo2.397μs] -24.90% (±0.00%) benchCoerce # map, non-empty iterable,m.R1 I4 - [Mo1.800μs vs. Mo2.400μs] -25.01% (±2.25%) benchCoerce # map, large array,map, emp.R1 I1 - [Mo1.800μs vs. Mo2.397μs] -24.89% (±2.20%) benchCoerce # map, large iterable,map, .R4 I4 - [Mo1.797μs vs. Mo2.303μs] -22.00% (±2.78%) benchCoerce # generic array, empty arra.R1 I1 - [Mo2.303μs vs. Mo2.839μs] -18.87% (±2.09%) benchCoerce # generic array, empty iter.R1 I0 - [Mo2.203μs vs. Mo2.897μs] -23.94% (±2.19%) benchCoerce # generic array, non-empty .R1 I4 - [Mo2.297μs vs. Mo2.861μs] -19.73% (±2.17%) benchCoerce # generic array, non-empty .R1 I2 - [Mo2.297μs vs. Mo2.897μs] -20.71% (±2.17%) benchCoerce # generic array, large arra.R1 I4 - [Mo2.300μs vs. Mo2.900μs] -20.68% (±1.72%) benchCoerce # generic array, large iter.R5 I4 - [Mo2.300μs vs. Mo2.861μs] -19.62% (±2.75%) benchCoerce # int array, empty array,ma.R1 I0 - [Mo2.203μs vs. Mo2.813μs] -21.67% (±2.19%) benchCoerce # int array, empty iterable.R1 I4 - [Mo2.300μs vs. Mo2.897μs] -20.59% (±1.72%) benchCoerce # int array, non-empty arra.R1 I1 - [Mo2.397μs vs. Mo2.900μs] -17.35% (±2.08%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo2.203μs vs. Mo2.900μs] -24.02% (±2.19%) benchCoerce # int array, large array,ma.R1 I4 - [Mo2.243μs vs. Mo2.800μs] -19.91% (±3.89%) benchCoerce # int array, large iterable.R5 I4 - [Mo2.300μs vs. Mo2.897μs] -20.61% (±1.75%) benchCoerce # map, empty array,map, non.R1 I2 - [Mo2.400μs vs. Mo2.900μs] -17.24% (±1.68%) benchCoerce # map, empty iterable,map, .R1 I1 - [Mo2.200μs vs. Mo2.803μs] -21.52% (±0.00%) benchCoerce # map, non-empty array,map,.R1 I3 - [Mo2.200μs vs. Mo2.897μs] -24.04% (±1.80%) benchCoerce # map, non-empty iterable,m.R4 I3 - [Mo2.243μs vs. Mo2.897μs] -22.58% (±3.89%) benchCoerce # map, large array,map, non.R3 I4 - [Mo2.300μs vs. Mo2.800μs] -17.87% (±2.75%) benchCoerce # map, large iterable,map, .R2 I4 - [Mo2.203μs vs. Mo2.897μs] -23.94% (±2.19%) benchCoerce # generic array, empty arra.R2 I4 - [Mo2.500μs vs. Mo3.013μs] -17.03% (±1.61%) benchCoerce # generic array, empty iter.R2 I4 - [Mo2.500μs vs. Mo3.003μs] -16.76% (±0.00%) benchCoerce # generic array, non-empty .R2 I4 - [Mo2.500μs vs. Mo3.003μs] -16.76% (±0.00%) benchCoerce # generic array, non-empty .R2 I4 - [Mo2.500μs vs. Mo3.013μs] -17.02% (±0.00%) benchCoerce # generic array, large arra.R5 I4 - [Mo2.500μs vs. Mo3.061μs] -18.33% (±0.00%) benchCoerce # generic array, large iter.R5 I4 - [Mo2.500μs vs. Mo3.100μs] -19.35% (±0.00%) benchCoerce # int array, empty array,ma.R5 I4 - [Mo2.500μs vs. Mo3.013μs] -17.03% (±1.61%) benchCoerce # int array, empty iterable.R5 I4 - [Mo2.500μs vs. Mo3.003μs] -16.76% (±0.00%) benchCoerce # int array, non-empty arra.R5 I4 - [Mo2.500μs vs. Mo3.003μs] -16.76% (±0.00%) benchCoerce # int array, non-empty iter.R5 I4 - [Mo2.500μs vs. Mo3.097μs] -19.27% (±0.00%) benchCoerce # int array, large array,ma.R5 I4 - [Mo2.500μs vs. Mo3.000μs] -16.67% (±0.00%) benchCoerce # int array, large iterable.R5 I4 - [Mo2.500μs vs. Mo3.100μs] -19.35% (±0.00%) benchCoerce # map, empty array,map, non.R5 I4 - [Mo2.500μs vs. Mo3.187μs] -21.55% (±1.59%) benchCoerce # map, empty iterable,map, .R5 I4 - [Mo2.500μs vs. Mo3.097μs] -19.26% (±1.59%) benchCoerce # map, non-empty array,map,.R5 I4 - [Mo2.500μs vs. Mo3.061μs] -18.33% (±0.00%) benchCoerce # map, non-empty iterable,m.R5 I4 - [Mo2.500μs vs. Mo3.013μs] -17.02% (±0.00%) benchCoerce # map, large array,map, non.R5 I4 - [Mo2.500μs vs. Mo3.003μs] -16.75% (±1.59%) benchCoerce # map, large iterable,map, .R5 I4 - [Mo2.500μs vs. Mo3.013μs] -17.03% (±1.61%) benchCoerce # generic array, empty arra.R5 I4 - [Mo17.425μs vs. Mo18.039μs] -3.41% (±1.33%) benchCoerce # generic array, empty iter.R5 I4 - [Mo17.400μs vs. Mo17.997μs] -3.32% (±0.00%) benchCoerce # generic array, non-empty .R1 I1 - [Mo17.400μs vs. Mo17.978μs] -3.22% (±0.36%) benchCoerce # generic array, non-empty .R1 I4 - [Mo17.400μs vs. Mo18.052μs] -3.61% (±0.36%) benchCoerce # generic array, large arra.R1 I4 - [Mo17.387μs vs. Mo18.000μs] -3.41% (±0.46%) benchCoerce # generic array, large iter.R1 I4 - [Mo17.449μs vs. Mo18.000μs] -3.06% (±2.20%) benchCoerce # int array, empty array,ma.R1 I4 - [Mo17.400μs vs. Mo18.000μs] -3.33% (±0.00%) benchCoerce # int array, empty iterable.R1 I4 - [Mo17.433μs vs. Mo18.048μs] -3.40% (±2.62%) benchCoerce # int array, non-empty arra.R1 I4 - [Mo17.400μs vs. Mo18.002μs] -3.34% (±0.46%) benchCoerce # int array, non-empty iter.R1 I4 - [Mo17.400μs vs. Mo18.000μs] -3.33% (±0.00%) benchCoerce # int array, large array,ma.R4 I4 - [Mo17.378μs vs. Mo17.997μs] -3.44% (±1.45%) benchCoerce # int array, large iterable.R5 I4 - [Mo17.400μs vs. Mo18.000μs] -3.34% (±0.46%) benchCoerce # map, empty array,map, lar.R5 I4 - [Mo17.401μs vs. Mo18.000μs] -3.33% (±0.92%) benchCoerce # map, empty iterable,map, .R5 I4 - [Mo17.403μs vs. Mo18.001μs] -3.32% (±0.28%) benchCoerce # map, non-empty array,map,.R5 I4 - [Mo17.978μs vs. Mo17.983μs] -0.03% (±1.83%) benchCoerce # map, non-empty iterable,m.R5 I4 - [Mo17.387μs vs. Mo17.986μs] -3.33% (±0.46%) benchCoerce # map, large array,map, lar.R5 I4 - [Mo17.378μs vs. Mo18.000μs] -3.46% (±1.45%) benchCoerce # map, large iterable,map, .R1 I3 - [Mo17.400μs vs. Mo18.000μs] -3.33% (±0.23%) benchCoerce # generic array, empty arra.R1 I4 - [Mo20.600μs vs. Mo21.202μs] -2.84% (±0.31%) benchCoerce # generic array, empty iter.R1 I4 - [Mo20.689μs vs. Mo21.339μs] -3.04% (±1.44%) benchCoerce # generic array, non-empty .R1 I0 - [Mo20.500μs vs. Mo21.266μs] -3.60% (±0.19%) benchCoerce # generic array, non-empty .R2 I4 - [Mo21.451μs vs. Mo21.201μs] +1.18% (±2.39%) benchCoerce # generic array, large arra.R2 I4 - [Mo20.661μs vs. Mo21.448μs] -3.67% (±1.31%) benchCoerce # generic array, large iter.R2 I4 - [Mo20.586μs vs. Mo21.284μs] -3.28% (±0.48%) benchCoerce # int array, empty array,ma.R5 I4 - [Mo20.639μs vs. Mo21.285μs] -3.04% (±0.36%) benchCoerce # int array, empty iterable.R5 I4 - [Mo20.600μs vs. Mo21.598μs] -4.62% (±0.61%) benchCoerce # int array, non-empty arra.R5 I4 - [Mo20.734μs vs. Mo21.352μs] -2.89% (±1.11%) benchCoerce # int array, non-empty iter.R5 I4 - [Mo21.042μs vs. Mo21.320μs] -1.30% (±1.84%) benchCoerce # int array, large array,ma.R5 I4 - [Mo20.555μs vs. Mo21.203μs] -3.05% (±0.57%) benchCoerce # int array, large iterable.R5 I4 - [Mo20.600μs vs. Mo21.338μs] -3.46% (±0.31%) benchCoerce # map, empty array,map, lar.R5 I4 - [Mo20.797μs vs. Mo21.252μs] -2.14% (±0.65%) benchCoerce # map, empty iterable,map, .R5 I4 - [Mo20.576μs vs. Mo21.325μs] -3.51% (±1.63%) benchCoerce # map, non-empty array,map,.R5 I4 - [Mo20.602μs vs. Mo21.225μs] -2.93% (±1.38%) benchCoerce # map, non-empty iterable,m.R5 I4 - [Mo20.763μs vs. Mo21.286μs] -2.46% (±1.85%) benchCoerce # map, large array,map, lar.R5 I4 - [Mo20.626μs vs. Mo21.261μs] -2.98% (±1.69%) benchCoerce # map, large iterable,map, .R1 I2 - [Mo20.579μs vs. Mo21.605μs] -4.75% (±1.03%) benchAssert # generic array, empty arra.R1 I4 - [Mo1.797μs vs. Mo2.300μs] -21.88% (±2.78%) benchAssert # generic array, non-empty .R3 I3 - [Mo1.800μs vs. Mo2.243μs] -19.75% (±2.25%) benchAssert # generic array, large arra.R1 I1 - [Mo1.897μs vs. Mo2.300μs] -17.53% (±2.63%) benchAssert # int array, empty array,ge.R1 I3 - [Mo1.700μs vs. Mo2.203μs] -22.84% (±0.00%) benchAssert # int array, non-empty arra.R3 I3 - [Mo1.900μs vs. Mo2.300μs] -17.40% (±2.13%) benchAssert # int array, large array,ge.R2 I3 - [Mo1.800μs vs. Mo2.297μs] -21.63% (±2.25%) benchAssert # map, empty array,generic .R1 I0 - [Mo1.703μs vs. Mo2.200μs] -22.57% (±2.82%) benchAssert # map, non-empty array,gene.R3 I4 - [Mo1.803μs vs. Mo2.297μs] -21.48% (±2.66%) benchAssert # map, large array,generic .R2 I3 - [Mo1.800μs vs. Mo2.203μs] -18.31% (±2.25%) benchAssert # generic array, empty arra.R2 I4 - [Mo2.000μs vs. Mo2.500μs] -20.01% (±0.00%) benchAssert # generic array, non-empty .R2 I4 - [Mo2.097μs vs. Mo2.500μs] -16.13% (±2.38%) benchAssert # generic array, large arra.R1 I1 - [Mo2.000μs vs. Mo2.561μs] -21.90% (±1.98%) benchAssert # int array, empty array,ge.R1 I1 - [Mo2.003μs vs. Mo2.500μs] -19.87% (±2.40%) benchAssert # int array, non-empty arra.R1 I3 - [Mo2.000μs vs. Mo2.500μs] -20.00% (±0.00%) benchAssert # int array, large array,ge.R5 I4 - [Mo2.000μs vs. Mo2.500μs] -20.00% (±1.98%) benchAssert # map, empty array,generic .R5 I4 - [Mo2.000μs vs. Mo2.500μs] -20.00% (±1.98%) benchAssert # map, non-empty array,gene.R5 I4 - [Mo2.000μs vs. Mo2.639μs] -24.20% (±1.98%) benchAssert # map, large array,generic .R5 I4 - [Mo2.000μs vs. Mo2.597μs] -22.97% (±1.98%) benchAssert # generic array, empty arra.R5 I4 - [Mo18.248μs vs. Mo303.692μs] -93.99% (±0.60%) benchAssert # generic array, non-empty .R5 I4 - [Mo18.035μs vs. Mo299.258μs] -93.97% (±1.08%) benchAssert # generic array, large arra.R5 I4 - [Mo18.315μs vs. Mo300.444μs] -93.90% (±2.68%) benchAssert # int array, empty array,ge.R4 I3 - [Mo18.134μs vs. Mo309.715μs] -94.14% (±1.27%) benchAssert # int array, non-empty arra.R4 I4 - [Mo18.430μs vs. Mo307.895μs] -94.01% (±1.01%) benchAssert # int array, large array,ge.R4 I4 - [Mo18.070μs vs. Mo299.722μs] -93.97% (±1.02%) benchAssert # map, empty array,generic .R4 I4 - [Mo18.645μs vs. Mo299.843μs] -93.78% (±1.58%) benchAssert # map, non-empty array,gene.R4 I4 - [Mo18.100μs vs. Mo303.314μs] -94.03% (±0.22%) benchAssert # map, large array,generic .R4 I4 - [Mo18.191μs vs. Mo299.760μs] -93.93% (±0.56%) benchAssert # generic array, empty arra.R1 I1 - [Mo1.797μs vs. Mo2.200μs] -18.33% (±2.78%) benchAssert # generic array, non-empty .R1 I1 - [Mo1.600μs vs. Mo2.100μs] -23.81% (±2.47%) benchAssert # generic array, large arra.R1 I1 - [Mo1.603μs vs. Mo2.197μs] -27.01% (±2.99%) benchAssert # int array, empty array,in.R1 I1 - [Mo1.600μs vs. Mo2.203μs] -27.37% (±2.47%) benchAssert # int array, non-empty arra.R1 I4 - [Mo1.600μs vs. Mo2.257μs] -29.11% (±2.47%) benchAssert # int array, large array,in.R1 I4 - [Mo1.600μs vs. Mo2.100μs] -23.81% (±2.47%) benchAssert # map, empty array,int arra.R1 I4 - [Mo1.600μs vs. Mo2.103μs] -23.92% (±2.47%) benchAssert # map, non-empty array,int .R1 I0 - [Mo1.603μs vs. Mo2.200μs] -27.12% (±2.99%) benchAssert # map, large array,int arra.R1 I4 - [Mo1.600μs vs. Mo2.103μs] -23.92% (±2.47%) benchAssert # generic array, empty arra.R1 I4 - [Mo2.200μs vs. Mo2.661μs] -17.32% (±1.80%) benchAssert # generic array, non-empty .R1 I4 - [Mo2.257μs vs. Mo2.607μs] -13.40% (±4.07%) benchAssert # generic array, large arra.R1 I2 - [Mo2.297μs vs. Mo2.793μs] -17.78% (±2.17%) benchAssert # int array, empty array,in.R1 I4 - [Mo2.200μs vs. Mo2.700μs] -18.52% (±2.87%) benchAssert # int array, non-empty arra.R1 I4 - [Mo2.200μs vs. Mo2.757μs] -20.22% (±2.87%) benchAssert # int array, large array,in.R2 I4 - [Mo2.200μs vs. Mo2.703μs] -18.61% (±1.80%) benchAssert # map, empty array,int arra.R1 I4 - [Mo2.203μs vs. Mo2.739μs] -19.56% (±2.19%) benchAssert # map, non-empty array,int .R1 I1 - [Mo2.200μs vs. Mo2.661μs] -17.33% (±0.00%) benchAssert # map, large array,int arra.R1 I4 - [Mo2.257μs vs. Mo2.700μs] -16.40% (±4.07%) benchAssert # generic array, empty arra.R1 I4 - [Mo16.805μs vs. Mo16.507μs] +1.81% (±0.88%) benchAssert # generic array, non-empty .R1 I4 - [Mo16.776μs vs. Mo16.653μs] +0.74% (±2.45%) benchAssert # generic array, large arra.R1 I4 - [Mo16.600μs vs. Mo16.500μs] +0.61% (±0.48%) benchAssert # int array, empty array,in.R1 I1 - [Mo16.597μs vs. Mo16.700μs] -0.62% (±0.30%) benchAssert # int array, non-empty arra.R1 I4 - [Mo16.625μs vs. Mo16.600μs] +0.15% (±1.39%) benchAssert # int array, large array,in.R1 I4 - [Mo16.503μs vs. Mo16.513μs] -0.06% (±0.30%) benchAssert # map, empty array,int arra.R1 I4 - [Mo16.845μs vs. Mo16.552μs] +1.77% (±0.69%) benchAssert # map, non-empty array,int .R1 I4 - [Mo16.620μs vs. Mo16.553μs] +0.41% (±0.70%) benchAssert # map, large array,int arra.R1 I4 - [Mo16.581μs vs. Mo16.514μs] +0.40% (±0.82%) benchAssert # generic array, empty arra.R1 I2 - [Mo1.800μs vs. Mo2.103μs] -14.43% (±2.25%) benchAssert # generic array, non-empty .R1 I4 - [Mo1.600μs vs. Mo2.297μs] -30.33% (±2.47%) benchAssert # generic array, large arra.R2 I4 - [Mo1.600μs vs. Mo2.103μs] -23.93% (±0.00%) benchAssert # int array, empty array,ma.R2 I2 - [Mo1.700μs vs. Mo2.100μs] -19.05% (±2.33%) benchAssert # int array, non-empty arra.R2 I4 - [Mo1.600μs vs. Mo2.100μs] -23.80% (±2.47%) benchAssert # int array, large array,ma.R1 I0 - [Mo1.600μs vs. Mo2.297μs] -30.33% (±0.00%) benchAssert # map, empty array,map, emp.R1 I1 - [Mo1.600μs vs. Mo2.100μs] -23.81% (±2.47%) benchAssert # map, non-empty array,map,.R1 I1 - [Mo1.603μs vs. Mo2.197μs] -27.01% (±2.99%) benchAssert # map, large array,map, emp.R1 I2 - [Mo1.603μs vs. Mo2.100μs] -23.66% (±2.99%) benchAssert # generic array, empty arra.R1 I3 - [Mo2.297μs vs. Mo2.703μs] -15.04% (±2.17%) benchAssert # generic array, non-empty .R1 I3 - [Mo2.203μs vs. Mo2.797μs] -21.22% (±2.19%) benchAssert # generic array, large arra.R1 I4 - [Mo2.297μs vs. Mo2.797μs] -17.88% (±2.17%) benchAssert # int array, empty array,ma.R1 I4 - [Mo2.200μs vs. Mo2.761μs] -20.33% (±2.87%) benchAssert # int array, non-empty arra.R1 I2 - [Mo2.203μs vs. Mo2.743μs] -19.66% (±2.19%) benchAssert # int array, large array,ma.R1 I4 - [Mo2.257μs vs. Mo2.800μs] -19.38% (±4.07%) benchAssert # map, empty array,map, non.R1 I1 - [Mo2.203μs vs. Mo2.803μs] -21.40% (±2.19%) benchAssert # map, non-empty array,map,.R1 I4 - [Mo2.203μs vs. Mo2.700μs] -18.40% (±2.19%) benchAssert # map, large array,map, non.R1 I4 - [Mo2.300μs vs. Mo2.703μs] -14.93% (±1.75%) benchAssert # generic array, empty arra.R1 I4 - [Mo17.379μs vs. Mo18.000μs] -3.45% (±1.22%) benchAssert # generic array, non-empty .R5 I4 - [Mo17.400μs vs. Mo18.000μs] -3.33% (±0.23%) benchAssert # generic array, large arra.R5 I4 - [Mo17.357μs vs. Mo18.000μs] -3.57% (±0.52%) benchAssert # int array, empty array,ma.R5 I4 - [Mo17.400μs vs. Mo17.993μs] -3.30% (±0.00%) benchAssert # int array, non-empty arra.R5 I4 - [Mo17.387μs vs. Mo17.814μs] -2.40% (±0.46%) benchAssert # int array, large array,ma.R5 I4 - [Mo17.397μs vs. Mo17.997μs] -3.33% (±0.78%) benchAssert # map, empty array,map, lar.R5 I4 - [Mo17.381μs vs. Mo17.961μs] -3.23% (±0.78%) benchAssert # map, non-empty array,map,.R5 I4 - [Mo17.400μs vs. Mo18.000μs] -3.33% (±0.00%) benchAssert # map, large array,map, lar.R5 I4 - [Mo17.387μs vs. Mo18.000μs] -3.41% (±0.46%) benchMatch # generic array, empty array.R2 I4 - [Mo1.900μs vs. Mo2.400μs] -20.84% (±2.13%) benchMatch # generic array, non-empty a.R3 I3 - [Mo1.900μs vs. Mo2.397μs] -20.72% (±0.00%) benchMatch # generic array, large array.R1 I4 - [Mo1.903μs vs. Mo2.397μs] -20.58% (±2.53%) benchMatch # int array, empty array,gen.R2 I2 - [Mo1.900μs vs. Mo2.397μs] -20.72% (±0.00%) benchMatch # int array, non-empty array.R2 I4 - [Mo1.900μs vs. Mo2.397μs] -20.72% (±0.00%) benchMatch # int array, large array,gen.R2 I1 - [Mo1.803μs vs. Mo2.400μs] -24.86% (±2.66%) benchMatch # map, empty array,generic a.R2 I4 - [Mo1.803μs vs. Mo2.303μs] -21.71% (±2.66%) benchMatch # map, non-empty array,gener.R1 I1 - [Mo1.900μs vs. Mo2.397μs] -20.72% (±0.00%) benchMatch # map, large array,generic a.R3 I4 - [Mo1.897μs vs. Mo2.400μs] -20.97% (±2.63%) benchMatch # generic array, empty array.R3 I4 - [Mo2.103μs vs. Mo2.639μs] -20.30% (±2.29%) benchMatch # generic array, non-empty a.R3 I4 - [Mo2.103μs vs. Mo2.600μs] -19.10% (±2.29%) benchMatch # generic array, large array.R3 I4 - [Mo2.100μs vs. Mo2.600μs] -19.24% (±3.01%) benchMatch # int array, empty array,gen.R3 I4 - [Mo2.1…
… paths that are known to be safe
68da707
to
af6d378
Compare
Co-authored-by: Saif Eddin Gmati <[email protected]>
Thank you, Apple -.-
This is really a symptom of not running phpcs with locked dependencies/versions
… `iterable` This execution path was not being considered at all before
127d78f
to
27ce4dc
Compare
@azjezz I think this is good to go. Here's the action run on my repo: https://github.com/Ocramius/psl/runs/3544847629 Benchmarks are running forever - hopefully fixed after phpbench/phpbench#918 :-\ EDIT: perhaps I need to remove the retry threshold, so it does not retry benchmarks when there's a lot of standard deviation error... |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Amazing work 🎉 Thank you!
( small issue )
Co-authored-by: Saif Eddin Gmati <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for you work @Ocramius
@azjezz I see this isn't released yet - would a patch with release automation additions help on that? Trying to kinda fill the time distance between improvements and discovered regressions :D |
Yes! i just didn't have the time for it :D i tried to integrate laminas auto release before but with no success |
return $this->coerceIterable($value); | ||
} | ||
|
||
if (array_keys(array_intersect_key($value, $this->requiredElements)) !== array_keys($this->requiredElements)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
think this is buggy.
keys need to be sorted before comparison. same on line 65
Scope of work
This patch attempts to improve happy-path execution time for
Psl\Type
components, and specifically:Psl\Type\TypeInterface#coerce()
Psl\Type\TypeInterface#assert()
Psl\Type\TypeInterface#matches()
Results
Results as per 2021-09-08 (af6d378) are as follows:
Dependencies
#[ParamProviders(...)]
multiple times when benchmark methods are inherited phpbench/phpbench#918