peterstace / simplefeatures

Simple Features is a pure Go Implementation of the OpenGIS Simple Feature Access Specification
MIT License
127 stars 19 forks source link

Simplify the bulk load algorithm #515

Closed peterstace closed 1 year ago

peterstace commented 1 year ago

Description

The previous bulk loading algorithm needed to keep the number of levels consistent in the r-tree consistent (i.e. every leaf node had to be the same distance from the root). This as a constraint required for the Insert and Delete methods. Because those methods no longer exist, we can greatly simplify the bulk loading algorithm.

With the simplified algorithm, the distance between the root and the leaf nodes will differ by at most 1 level. Nodes are now packed much more tightly, which reduces memory usage for some trees (but DOESN'T improve CPU performance).

Check List

Have you:

Related Issue

Benchmark Results

Benchmarks are basically as expected -- less memory usage and CPU about the same (some faster, some slower, but nothing significant).

Click to expand ``` goos: linux goarch: arm64 pkg: github.com/peterstace/simplefeatures/geom │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ sec/op │ sec/op vs base │ LineEnvelope/0-2 2.115n ± 4% 2.126n ± 1% ~ (p=0.506 n=15) LineEnvelope/1-2 2.110n ± 1% 2.112n ± 1% ~ (p=0.665 n=15) LineEnvelope/2-2 2.090n ± 0% 2.091n ± 0% ~ (p=0.615 n=15) LineEnvelope/3-2 2.091n ± 1% 2.100n ± 1% +0.43% (p=0.035 n=15) MarshalWKB/polygon/n=10-2 92.45n ± 1% 92.38n ± 1% ~ (p=0.616 n=15) MarshalWKB/polygon/n=100-2 239.7n ± 3% 235.0n ± 2% -1.96% (p=0.034 n=15) MarshalWKB/polygon/n=1000-2 1.614µ ± 4% 1.634µ ± 15% ~ (p=0.595 n=15) MarshalWKB/polygon/n=10000-2 48.15µ ± 36% 43.26µ ± 19% ~ (p=0.067 n=15) UnmarshalWKB/polygon/n=10-2 158.1n ± 2% 157.5n ± 1% ~ (p=0.545 n=15) UnmarshalWKB/polygon/n=100-2 313.3n ± 4% 303.3n ± 2% ~ (p=0.080 n=15) UnmarshalWKB/polygon/n=1000-2 1.844µ ± 7% 1.818µ ± 5% ~ (p=0.351 n=15) UnmarshalWKB/polygon/n=10000-2 45.20µ ± 16% 45.93µ ± 15% ~ (p=0.775 n=15) IntersectsLineStringWithLineString/n=10-2 734.1n ± 1% 711.1n ± 1% -3.13% (p=0.000 n=15) IntersectsLineStringWithLineString/n=100-2 11.48µ ± 2% 10.43µ ± 1% -9.17% (p=0.000 n=15) IntersectsLineStringWithLineString/n=1000-2 131.8µ ± 7% 137.2µ ± 4% ~ (p=0.486 n=15) IntersectsLineStringWithLineString/n=10000-2 2.133m ± 10% 2.118m ± 14% ~ (p=0.902 n=15) IntersectsMultiPointWithMultiPoint/n=20-2 555.8n ± 1% 555.3n ± 1% ~ (p=0.546 n=15) IntersectsMultiPointWithMultiPoint/n=200-2 7.503µ ± 0% 7.490µ ± 0% ~ (p=0.091 n=15) IntersectsMultiPointWithMultiPoint/n=2000-2 71.32µ ± 2% 71.40µ ± 1% ~ (p=0.486 n=15) IntersectsMultiPointWithMultiPoint/n=20000-2 779.3µ ± 0% 777.0µ ± 0% ~ (p=0.187 n=15) PolygonSingleRingValidation/n=10-2 1.259µ ± 1% 1.236µ ± 1% -1.83% (p=0.000 n=15) PolygonSingleRingValidation/n=100-2 18.80µ ± 1% 17.69µ ± 2% -5.90% (p=0.000 n=15) PolygonSingleRingValidation/n=1000-2 272.3µ ± 0% 282.5µ ± 1% +3.75% (p=0.000 n=15) PolygonSingleRingValidation/n=10000-2 3.383m ± 1% 3.411m ± 1% +0.85% (p=0.002 n=15) PolygonMultipleRingsValidation/n=4-2 3.612µ ± 0% 3.468µ ± 0% -3.99% (p=0.000 n=15) PolygonMultipleRingsValidation/n=36-2 30.55µ ± 1% 29.45µ ± 1% -3.63% (p=0.000 n=15) PolygonMultipleRingsValidation/n=400-2 401.1µ ± 1% 384.3µ ± 1% -4.19% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4096-2 5.023m ± 1% 4.560m ± 1% -9.22% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10-2 5.996µ ± 0% 5.910µ ± 0% -1.43% (p=0.002 n=15) PolygonZigZagRingsValidation/n=100-2 72.23µ ± 1% 69.29µ ± 1% -4.08% (p=0.000 n=15) PolygonZigZagRingsValidation/n=1000-2 984.2µ ± 2% 981.6µ ± 3% ~ (p=0.233 n=15) PolygonZigZagRingsValidation/n=10000-2 12.55m ± 2% 12.61m ± 2% ~ (p=0.187 n=15) PolygonAnnulusValidation/n=10-2 1.928µ ± 2% 1.863µ ± 0% -3.37% (p=0.000 n=15) PolygonAnnulusValidation/n=100-2 18.82µ ± 1% 18.73µ ± 1% ~ (p=0.061 n=15) PolygonAnnulusValidation/n=1000-2 329.0µ ± 1% 303.7µ ± 0% -7.67% (p=0.000 n=15) PolygonAnnulusValidation/n=10000-2 4.241m ± 2% 4.257m ± 1% ~ (p=0.116 n=15) MultipolygonValidation/n=1-2 212.6n ± 1% 199.3n ± 2% -6.26% (p=0.000 n=15) MultipolygonValidation/n=4-2 481.2n ± 1% 476.0n ± 1% -1.08% (p=0.016 n=15) MultipolygonValidation/n=16-2 2.092µ ± 0% 2.088µ ± 1% ~ (p=0.454 n=15) MultipolygonValidation/n=64-2 10.13µ ± 1% 10.19µ ± 1% ~ (p=0.174 n=15) MultipolygonValidation/n=256-2 56.31µ ± 2% 59.39µ ± 2% +5.46% (p=0.000 n=15) MultipolygonValidation/n=1024-2 338.1µ ± 1% 343.8µ ± 3% ~ (p=0.595 n=15) MultiPolygonTwoCircles/n=10-2 1.839µ ± 0% 1.817µ ± 1% -1.20% (p=0.000 n=15) MultiPolygonTwoCircles/n=100-2 22.08µ ± 1% 20.23µ ± 1% -8.38% (p=0.000 n=15) MultiPolygonTwoCircles/n=1000-2 263.4µ ± 5% 279.0µ ± 3% +5.92% (p=0.001 n=15) MultiPolygonTwoCircles/n=10000-2 4.614m ± 16% 5.107m ± 6% ~ (p=0.412 n=15) MultiPolygonMultipleTouchingPoints/n=1-2 2.558µ ± 1% 2.528µ ± 1% -1.17% (p=0.032 n=15) MultiPolygonMultipleTouchingPoints/n=10-2 20.65µ ± 2% 20.45µ ± 2% -0.97% (p=0.045 n=15) MultiPolygonMultipleTouchingPoints/n=100-2 259.2µ ± 0% 258.4µ ± 1% -0.32% (p=0.002 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 3.287m ± 2% 3.204m ± 2% -2.54% (p=0.000 n=15) WKTParsing/point-2 1.133µ ± 2% 1.128µ ± 4% ~ (p=0.631 n=15) DistancePolygonToPolygonOrdering/n=100_swap=false-2 26.45µ ± 1% 24.86µ ± 2% -6.01% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=100_swap=true-2 26.38µ ± 1% 24.87µ ± 2% -5.73% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=false-2 466.1µ ± 1% 462.5µ ± 0% ~ (p=0.063 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=true-2 464.5µ ± 2% 461.9µ ± 0% -0.57% (p=0.004 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 3.195µ ± 1% 3.121µ ± 1% -2.32% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 3.194µ ± 1% 3.111µ ± 1% -2.60% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 34.34µ ± 1% 33.25µ ± 1% -3.16% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 34.23µ ± 1% 33.18µ ± 1% -3.06% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=100-2 25.88µ ± 3% 23.58µ ± 1% -8.91% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=1000-2 322.1µ ± 1% 305.4µ ± 1% -5.17% (p=0.000 n=15) ForceCWandForceCCW/0-2 16.03n ± 539% 16.06n ± 1% ~ (p=0.751 n=15) ForceCWandForceCCW/0#01-2 102.9n ± 84% 101.2n ± 1% -1.65% (p=0.032 n=15) ForceCWandForceCCW/1-2 16.18n ± 537% 16.23n ± 1% ~ (p=0.751 n=15) ForceCWandForceCCW/1#01-2 102.7n ± 84% 101.0n ± 2% ~ (p=0.139 n=15) ForceCWandForceCCW/2-2 29.63n ± 0% 29.69n ± 1% ~ (p=0.767 n=15) ForceCWandForceCCW/2#01-2 158.2n ± 1% 155.6n ± 1% -1.64% (p=0.024 n=15) ForceCWandForceCCW/3-2 29.72n ± 0% 29.74n ± 0% ~ (p=0.675 n=15) ForceCWandForceCCW/3#01-2 158.7n ± 1% 155.5n ± 1% -2.02% (p=0.003 n=15) ForceCWandForceCCW/4-2 43.19n ± 0% 43.19n ± 0% ~ (p=0.862 n=15) ForceCWandForceCCW/4#01-2 244.3n ± 0% 240.6n ± 1% -1.51% (p=0.017 n=15) ForceCWandForceCCW/5-2 43.28n ± 0% 43.25n ± 1% ~ (p=0.660 n=15) ForceCWandForceCCW/5#01-2 246.4n ± 1% 240.0n ± 1% -2.60% (p=0.000 n=15) ForceCWandForceCCW/6-2 62.44n ± 1% 62.36n ± 0% ~ (p=0.560 n=15) ForceCWandForceCCW/6#01-2 393.0n ± 1% 386.1n ± 1% -1.76% (p=0.002 n=15) EnvelopeTransformXY-2 139.4n ± 1% 140.1n ± 0% +0.50% (p=0.037 n=15) WKBParse/0-2 421.2n ± 1% 420.0n ± 1% ~ (p=0.493 n=15) WKBParse/1-2 417.0n ± 1% 417.6n ± 0% ~ (p=0.645 n=15) WKBParse/2-2 482.1n ± 1% 482.0n ± 1% ~ (p=0.442 n=15) WKBParse/3-2 484.0n ± 1% 483.4n ± 0% ~ (p=0.198 n=15) WKBParse/4-2 568.3n ± 1% 557.5n ± 1% -1.90% (p=0.000 n=15) WKBParse/5-2 424.1n ± 1% 424.8n ± 0% ~ (p=0.927 n=15) WKBParse/6-2 496.1n ± 1% 496.9n ± 1% ~ (p=0.736 n=15) WKBParse/7-2 485.7n ± 1% 484.9n ± 0% ~ (p=0.183 n=15) WKBParse/8-2 565.9n ± 1% 579.8n ± 1% +2.46% (p=0.000 n=15) WKBParse/9-2 310.7n ± 2% 310.0n ± 1% ~ (p=0.319 n=15) WKBParse/10-2 312.2n ± 1% 312.2n ± 1% ~ (p=0.660 n=15) WKBParse/11-2 312.4n ± 1% 310.9n ± 0% -0.48% (p=0.046 n=15) WKBParse/12-2 307.0n ± 1% 306.3n ± 0% -0.23% (p=0.030 n=15) WKBParse/13-2 594.5n ± 1% 594.0n ± 0% ~ (p=0.299 n=15) WKBParse/14-2 703.9n ± 2% 705.0n ± 1% ~ (p=0.616 n=15) WKBParse/15-2 699.2n ± 2% 711.5n ± 1% +1.76% (p=0.003 n=15) WKBParse/16-2 847.5n ± 1% 846.6n ± 0% ~ (p=0.560 n=15) WKBParse/17-2 700.2n ± 1% 700.7n ± 1% ~ (p=0.976 n=15) WKBParse/18-2 897.1n ± 1% 918.8n ± 2% +2.42% (p=0.000 n=15) WKBParse/19-2 909.1n ± 1% 906.9n ± 1% ~ (p=0.894 n=15) WKBParse/20-2 1.101µ ± 0% 1.091µ ± 0% -0.91% (p=0.003 n=15) WKBParse/21-2 302.5n ± 1% 300.8n ± 1% ~ (p=0.056 n=15) WKBParse/22-2 303.3n ± 1% 302.8n ± 1% ~ (p=0.134 n=15) WKBParse/23-2 302.6n ± 1% 302.3n ± 0% ~ (p=0.736 n=15) WKBParse/24-2 298.3n ± 1% 297.8n ± 0% ~ (p=0.213 n=15) WKBParse/25-2 1.562µ ± 1% 1.569µ ± 1% ~ (p=0.220 n=15) WKBParse/26-2 1.978µ ± 1% 1.979µ ± 1% ~ (p=0.675 n=15) WKBParse/27-2 1.980µ ± 0% 1.979µ ± 0% ~ (p=0.878 n=15) WKBParse/28-2 2.468µ ± 0% 2.457µ ± 0% -0.45% (p=0.000 n=15) WKBParse/29-2 302.2n ± 1% 300.6n ± 1% ~ (p=0.220 n=15) WKBParse/30-2 303.0n ± 1% 303.5n ± 1% ~ (p=0.878 n=15) WKBParse/31-2 302.0n ± 1% 302.9n ± 1% ~ (p=0.967 n=15) WKBParse/32-2 298.9n ± 1% 297.7n ± 1% ~ (p=0.220 n=15) WKBParse/33-2 571.0n ± 0% 569.3n ± 1% ~ (p=0.140 n=15) WKBParse/34-2 651.3n ± 1% 664.6n ± 1% +2.04% (p=0.000 n=15) WKBParse/35-2 651.6n ± 1% 650.7n ± 1% ~ (p=0.735 n=15) WKBParse/36-2 722.9n ± 0% 713.1n ± 1% -1.36% (p=0.000 n=15) WKBParse/37-2 821.3n ± 1% 809.3n ± 1% -1.46% (p=0.001 n=15) WKBParse/38-2 969.3n ± 0% 968.7n ± 1% ~ (p=0.532 n=15) WKBParse/39-2 969.0n ± 1% 965.2n ± 2% ~ (p=0.177 n=15) WKBParse/40-2 1.081µ ± 1% 1.080µ ± 0% ~ (p=0.559 n=15) WKBParse/41-2 301.7n ± 1% 301.0n ± 0% ~ (p=0.087 n=15) WKBParse/42-2 303.2n ± 1% 303.7n ± 1% ~ (p=0.690 n=15) WKBParse/43-2 303.9n ± 0% 303.2n ± 0% ~ (p=0.198 n=15) WKBParse/44-2 298.8n ± 1% 297.8n ± 0% ~ (p=0.145 n=15) WKBParse/45-2 889.0n ± 1% 883.8n ± 1% ~ (p=0.164 n=15) WKBParse/46-2 1.080µ ± 2% 1.075µ ± 1% ~ (p=0.079 n=15) WKBParse/47-2 1.082µ ± 0% 1.084µ ± 1% ~ (p=0.545 n=15) WKBParse/48-2 1.241µ ± 1% 1.235µ ± 0% ~ (p=0.339 n=15) WKBParse/49-2 1.268µ ± 0% 1.266µ ± 1% ~ (p=0.894 n=15) WKBParse/50-2 1.607µ ± 1% 1.607µ ± 1% ~ (p=0.959 n=15) WKBParse/51-2 1.599µ ± 1% 1.599µ ± 0% ~ (p=0.798 n=15) WKBParse/52-2 1.871µ ± 1% 1.866µ ± 1% ~ (p=0.417 n=15) WKBParse/53-2 301.1n ± 2% 302.3n ± 1% ~ (p=0.299 n=15) WKBParse/54-2 303.2n ± 1% 303.7n ± 1% ~ (p=0.467 n=15) WKBParse/55-2 303.6n ± 2% 303.8n ± 1% ~ (p=0.645 n=15) WKBParse/56-2 299.3n ± 1% 298.7n ± 1% ~ (p=0.319 n=15) WKBParse/57-2 1.926µ ± 0% 1.925µ ± 0% ~ (p=0.573 n=15) WKBParse/58-2 2.362µ ± 1% 2.370µ ± 0% ~ (p=0.254 n=15) WKBParse/59-2 2.367µ ± 0% 2.366µ ± 0% ~ (p=0.453 n=15) WKBParse/60-2 2.867µ ± 1% 2.860µ ± 1% ~ (p=0.319 n=15) WKBParse/61-2 300.7n ± 1% 300.6n ± 1% ~ (p=0.493 n=15) WKBParse/62-2 302.2n ± 1% 302.0n ± 1% ~ (p=0.830 n=15) WKBParse/63-2 302.1n ± 2% 301.7n ± 1% ~ (p=0.361 n=15) WKBParse/64-2 298.5n ± 1% 296.6n ± 1% -0.64% (p=0.009 n=15) WKBParse/65-2 877.7n ± 1% 874.7n ± 2% ~ (p=0.661 n=15) WKBParse/66-2 1.016µ ± 1% 1.028µ ± 1% +1.18% (p=0.000 n=15) WKBParse/67-2 1.029µ ± 1% 1.015µ ± 1% -1.36% (p=0.017 n=15) WKBParse/68-2 1.141µ ± 0% 1.139µ ± 1% ~ (p=1.000 n=15) geomean 1.923µ 1.907µ -0.83% │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ B/op │ B/op vs base │ LineEnvelope/0-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/1-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/2-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=10-2 232.0 ± 0% 232.0 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=100-2 1.789Ki ± 0% 1.789Ki ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=1000-2 16.04Ki ± 0% 16.04Ki ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=10000-2 160.0Ki ± 0% 160.0Ki ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=10-2 284.0 ± 0% 284.0 ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=100-2 1.855Ki ± 0% 1.855Ki ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=1000-2 16.11Ki ± 0% 16.11Ki ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=10000-2 160.1Ki ± 0% 160.1Ki ± 0% ~ (p=1.000 n=15) ¹ IntersectsLineStringWithLineString/n=10-2 1.969Ki ± 0% 1.953Ki ± 0% -0.79% (p=0.000 n=15) IntersectsLineStringWithLineString/n=100-2 24.28Ki ± 0% 21.02Ki ± 0% -13.45% (p=0.000 n=15) IntersectsLineStringWithLineString/n=1000-2 173.3Ki ± 0% 173.3Ki ± 0% -0.01% (p=0.000 n=15) IntersectsLineStringWithLineString/n=10000-2 2.091Mi ± 0% 2.091Mi ± 0% -0.00% (p=0.000 n=15) IntersectsMultiPointWithMultiPoint/n=20-2 324.0 ± 0% 324.0 ± 0% ~ (p=1.000 n=15) ¹ IntersectsMultiPointWithMultiPoint/n=200-2 2.994Ki ± 0% 2.993Ki ± 0% ~ (p=0.900 n=15) IntersectsMultiPointWithMultiPoint/n=2000-2 48.13Ki ± 0% 48.13Ki ± 0% ~ (p=0.233 n=15) IntersectsMultiPointWithMultiPoint/n=20000-2 330.7Ki ± 0% 330.7Ki ± 0% ~ (p=0.253 n=15) PolygonSingleRingValidation/n=10-2 1.766Ki ± 0% 1.734Ki ± 0% -1.77% (p=0.000 n=15) PolygonSingleRingValidation/n=100-2 18.36Ki ± 0% 15.08Ki ± 0% -17.87% (p=0.000 n=15) PolygonSingleRingValidation/n=1000-2 109.6Ki ± 0% 109.6Ki ± 0% -0.03% (p=0.000 n=15) PolygonSingleRingValidation/n=10000-2 1.466Mi ± 0% 1.466Mi ± 0% -0.00% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4-2 5.516Ki ± 0% 5.359Ki ± 0% -2.83% (p=0.000 n=15) PolygonMultipleRingsValidation/n=36-2 44.66Ki ± 0% 43.50Ki ± 0% -2.59% (p=0.000 n=15) PolygonMultipleRingsValidation/n=400-2 499.2Ki ± 0% 473.6Ki ± 0% -5.11% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4096-2 5.107Mi ± 0% 4.576Mi ± 0% -10.40% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10-2 7.906Ki ± 0% 7.797Ki ± 0% -1.38% (p=0.000 n=15) PolygonZigZagRingsValidation/n=100-2 69.50Ki ± 0% 59.64Ki ± 0% -14.19% (p=0.000 n=15) PolygonZigZagRingsValidation/n=1000-2 457.8Ki ± 0% 457.6Ki ± 0% -0.02% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10000-2 5.650Mi ± 0% 5.650Mi ± 0% -0.00% (p=0.000 n=15) PolygonAnnulusValidation/n=10-2 3.219Ki ± 0% 3.156Ki ± 0% -1.94% (p=0.000 n=15) PolygonAnnulusValidation/n=100-2 22.77Ki ± 0% 22.70Ki ± 0% -0.27% (p=0.000 n=15) PolygonAnnulusValidation/n=1000-2 293.0Ki ± 0% 222.2Ki ± 0% -24.15% (p=0.000 n=15) PolygonAnnulusValidation/n=10000-2 2.930Mi ± 0% 2.787Mi ± 0% -4.88% (p=0.000 n=15) MultipolygonValidation/n=1-2 401.0 ± 0% 385.0 ± 0% -3.99% (p=0.000 n=15) MultipolygonValidation/n=4-2 900.0 ± 0% 884.0 ± 0% -1.78% (p=0.000 n=15) MultipolygonValidation/n=16-2 3.672Ki ± 0% 3.656Ki ± 0% -0.43% (p=0.000 n=15) MultipolygonValidation/n=64-2 14.97Ki ± 0% 14.95Ki ± 0% -0.10% (p=0.000 n=15) MultipolygonValidation/n=256-2 59.53Ki ± 0% 59.52Ki ± 0% -0.03% (p=0.000 n=15) MultipolygonValidation/n=1024-2 238.3Ki ± 0% 238.3Ki ± 0% -0.01% (p=0.000 n=15) MultiPolygonTwoCircles/n=10-2 4.174Ki ± 0% 4.158Ki ± 0% -0.37% (p=0.000 n=15) MultiPolygonTwoCircles/n=100-2 42.99Ki ± 0% 36.47Ki ± 0% -15.16% (p=0.000 n=15) MultiPolygonTwoCircles/n=1000-2 283.2Ki ± 0% 283.2Ki ± 0% -0.01% (p=0.000 n=15) MultiPolygonTwoCircles/n=10000-2 3.558Mi ± 0% 3.558Mi ± 0% -0.00% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=1-2 3.518Ki ± 0% 3.502Ki ± 0% -0.44% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=10-2 20.76Ki ± 0% 19.52Ki ± 0% -5.95% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=100-2 164.4Ki ± 0% 164.4Ki ± 0% -0.01% (p=0.046 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 1.857Mi ± 0% 1.671Mi ± 0% -9.98% (p=0.000 n=15) WKTParsing/point-2 1.841Ki ± 0% 1.841Ki ± 0% ~ (p=1.000 n=15) ¹ DistancePolygonToPolygonOrdering/n=100_swap=false-2 33.94Ki ± 0% 30.67Ki ± 0% -9.62% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=100_swap=true-2 33.94Ki ± 0% 30.67Ki ± 0% -9.62% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=false-2 328.4Ki ± 0% 325.1Ki ± 0% -0.99% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=true-2 328.4Ki ± 0% 325.1Ki ± 0% -0.99% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 5.000Ki ± 0% 4.984Ki ± 0% -0.31% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 5.000Ki ± 0% 4.984Ki ± 0% -0.31% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 53.29Ki ± 0% 50.02Ki ± 0% -6.13% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 53.29Ki ± 0% 50.02Ki ± 0% -6.13% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=100-2 44.59Ki ± 0% 39.77Ki ± 0% -10.83% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=1000-2 374.9Ki ± 0% 359.3Ki ± 0% -4.17% (p=0.000 n=15) ForceCWandForceCCW/0-2 0.000 ± ? 0.000 ± 0% ~ (p=0.330 n=15) ForceCWandForceCCW/0#01-2 144.0 ± ? 144.0 ± 0% ~ (p=0.330 n=15) ForceCWandForceCCW/1-2 0.000 ± ? 0.000 ± 0% ~ (p=0.651 n=15) ForceCWandForceCCW/1#01-2 144.0 ± ? 144.0 ± 0% ~ (p=0.651 n=15) ForceCWandForceCCW/2-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/2#01-2 256.0 ± 0% 256.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/3#01-2 256.0 ± 0% 256.0 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/4-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/4#01-2 416.0 ± 0% 416.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/5-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/5#01-2 416.0 ± 0% 416.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/6-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/6#01-2 624.0 ± 0% 624.0 ± 0% ~ (p=1.000 n=15) EnvelopeTransformXY-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/0-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/1-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/2-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/3-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/4-2 176.0 ± 0% 176.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/5-2 120.0 ± 0% 120.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/6-2 120.0 ± 0% 120.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/7-2 120.0 ± 0% 120.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/8-2 184.0 ± 0% 184.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/9-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/10-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/11-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/12-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/13-2 200.0 ± 0% 200.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/14-2 216.0 ± 0% 216.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/15-2 216.0 ± 0% 216.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/16-2 360.0 ± 0% 360.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/17-2 216.0 ± 0% 216.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/18-2 376.0 ± 0% 376.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/19-2 376.0 ± 0% 376.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/20-2 392.0 ± 0% 392.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/21-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/22-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/23-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/24-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/25-2 808.0 ± 0% 808.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/26-2 872.0 ± 0% 872.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/27-2 872.0 ± 0% 872.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/28-2 1.414Ki ± 0% 1.414Ki ± 0% ~ (p=1.000 n=15) ¹ WKBParse/29-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/30-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/31-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/32-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/33-2 248.0 ± 0% 248.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/34-2 312.0 ± 0% 312.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/35-2 312.0 ± 0% 312.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/36-2 312.0 ± 0% 312.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/37-2 456.0 ± 0% 456.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/38-2 584.0 ± 0% 584.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/39-2 584.0 ± 0% 584.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/40-2 584.0 ± 0% 584.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/41-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/42-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/43-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/44-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/45-2 440.0 ± 0% 440.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/46-2 472.0 ± 0% 472.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/47-2 472.0 ± 0% 472.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/48-2 488.0 ± 0% 488.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/49-2 568.0 ± 0% 568.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/50-2 872.0 ± 0% 872.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/51-2 872.0 ± 0% 872.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/52-2 904.0 ± 0% 904.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/53-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/54-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/55-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/56-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/57-2 1.047Ki ± 0% 1.047Ki ± 0% ~ (p=1.000 n=15) ¹ WKBParse/58-2 1.109Ki ± 0% 1.109Ki ± 0% ~ (p=1.000 n=15) ¹ WKBParse/59-2 1.109Ki ± 0% 1.109Ki ± 0% ~ (p=1.000 n=15) ¹ WKBParse/60-2 1.672Ki ± 0% 1.672Ki ± 0% ~ (p=1.000 n=15) ¹ WKBParse/61-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/62-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/63-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/64-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/65-2 424.0 ± 0% 424.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/66-2 552.0 ± 0% 552.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/67-2 552.0 ± 0% 552.0 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/68-2 552.0 ± 0% 552.0 ± 0% ~ (p=1.000 n=15) ¹ geomean ² -1.38% ² ¹ all samples are equal ² summaries must be >0 to compute geomean │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ allocs/op │ allocs/op vs base │ LineEnvelope/0-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/1-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/2-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ LineEnvelope/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=10-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=100-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=1000-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ MarshalWKB/polygon/n=10000-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=10-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=100-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=1000-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ UnmarshalWKB/polygon/n=10000-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ IntersectsLineStringWithLineString/n=10-2 9.000 ± 0% 8.000 ± 0% -11.11% (p=0.000 n=15) IntersectsLineStringWithLineString/n=100-2 73.00 ± 0% 56.00 ± 0% -23.29% (p=0.000 n=15) IntersectsLineStringWithLineString/n=1000-2 345.0 ± 0% 344.0 ± 0% -0.29% (p=0.000 n=15) IntersectsLineStringWithLineString/n=10000-2 5.465k ± 0% 5.464k ± 0% -0.02% (p=0.000 n=15) IntersectsMultiPointWithMultiPoint/n=20-2 1.000 ± 0% 1.000 ± 0% ~ (p=1.000 n=15) ¹ IntersectsMultiPointWithMultiPoint/n=200-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ IntersectsMultiPointWithMultiPoint/n=2000-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ IntersectsMultiPointWithMultiPoint/n=20000-2 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonSingleRingValidation/n=10-2 12.00 ± 0% 10.00 ± 0% -16.67% (p=0.000 n=15) PolygonSingleRingValidation/n=100-2 76.00 ± 0% 58.00 ± 0% -23.68% (p=0.000 n=15) PolygonSingleRingValidation/n=1000-2 348.0 ± 0% 346.0 ± 0% -0.57% (p=0.000 n=15) PolygonSingleRingValidation/n=10000-2 5.468k ± 0% 5.466k ± 0% -0.04% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4-2 42.00 ± 0% 32.00 ± 0% -23.81% (p=0.000 n=15) PolygonMultipleRingsValidation/n=36-2 316.0 ± 0% 242.0 ± 0% -23.42% (p=0.000 n=15) PolygonMultipleRingsValidation/n=400-2 3.484k ± 0% 2.618k ± 0% -24.86% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4096-2 36.19k ± 0% 25.95k ± 0% -28.30% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10-2 41.00 ± 0% 34.00 ± 0% -17.07% (p=0.000 n=15) PolygonZigZagRingsValidation/n=100-2 233.0 ± 0% 178.0 ± 0% -23.61% (p=0.000 n=15) PolygonZigZagRingsValidation/n=1000-2 1.049k ± 0% 1.042k ± 0% -0.67% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10000-2 16.41k ± 0% 16.40k ± 0% -0.04% (p=0.000 n=15) PolygonAnnulusValidation/n=10-2 22.00 ± 0% 18.00 ± 0% -18.18% (p=0.000 n=15) PolygonAnnulusValidation/n=100-2 76.00 ± 0% 72.00 ± 0% -5.26% (p=0.000 n=15) PolygonAnnulusValidation/n=1000-2 1000.0 ± 0% 648.0 ± 0% -35.20% (p=0.000 n=15) PolygonAnnulusValidation/n=10000-2 10.252k ± 0% 9.528k ± 0% -7.06% (p=0.000 n=15) MultipolygonValidation/n=1-2 8.000 ± 0% 7.000 ± 0% -12.50% (p=0.000 n=15) MultipolygonValidation/n=4-2 11.00 ± 0% 10.00 ± 0% -9.09% (p=0.000 n=15) MultipolygonValidation/n=16-2 27.00 ± 0% 26.00 ± 0% -3.70% (p=0.000 n=15) MultipolygonValidation/n=64-2 91.00 ± 0% 90.00 ± 0% -1.10% (p=0.000 n=15) MultipolygonValidation/n=256-2 347.0 ± 0% 346.0 ± 0% -0.29% (p=0.000 n=15) MultipolygonValidation/n=1024-2 1.371k ± 0% 1.370k ± 0% -0.07% (p=0.000 n=15) MultiPolygonTwoCircles/n=10-2 29.00 ± 0% 28.00 ± 0% -3.45% (p=0.000 n=15) MultiPolygonTwoCircles/n=100-2 157.0 ± 0% 124.0 ± 0% -21.02% (p=0.000 n=15) MultiPolygonTwoCircles/n=1000-2 701.0 ± 0% 700.0 ± 0% -0.14% (p=0.000 n=15) MultiPolygonTwoCircles/n=10000-2 10.94k ± 0% 10.94k ± 0% -0.01% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=1-2 51.00 ± 0% 50.00 ± 0% -1.96% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=10-2 298.0 ± 0% 291.0 ± 0% -2.35% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=100-2 2.615k ± 0% 2.614k ± 0% -0.04% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 26.73k ± 0% 25.80k ± 0% -3.49% (p=0.000 n=15) WKTParsing/point-2 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=15) ¹ DistancePolygonToPolygonOrdering/n=100_swap=false-2 234.0 ± 0% 217.0 ± 0% -7.26% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=100_swap=true-2 234.0 ± 0% 217.0 ± 0% -7.26% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=false-2 2.104k ± 0% 2.087k ± 0% -0.81% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=true-2 2.104k ± 0% 2.087k ± 0% -0.81% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 13.00 ± 0% 12.00 ± 0% -7.69% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 13.00 ± 0% 12.00 ± 0% -7.69% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 77.00 ± 0% 60.00 ± 0% -22.08% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 77.00 ± 0% 60.00 ± 0% -22.08% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=100-2 371.0 ± 0% 254.0 ± 0% -31.54% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=1000-2 3.343k ± 0% 2.342k ± 0% -29.94% (p=0.000 n=15) ForceCWandForceCCW/0-2 0.000 ± ? 0.000 ± 0% ~ (p=0.330 n=15) ForceCWandForceCCW/0#01-2 3.000 ± ? 3.000 ± 0% ~ (p=0.330 n=15) ForceCWandForceCCW/1-2 0.000 ± ? 0.000 ± 0% ~ (p=0.651 n=15) ForceCWandForceCCW/1#01-2 3.000 ± ? 3.000 ± 0% ~ (p=0.651 n=15) ForceCWandForceCCW/2-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/2#01-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/3#01-2 4.000 ± 0% 4.000 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/4-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/4#01-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/5-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/5#01-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/6-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/6#01-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) EnvelopeTransformXY-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/0-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/1-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/2-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/3-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/4-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/5-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/6-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/7-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/8-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/9-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/10-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/11-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/12-2 5.000 ± 0% 5.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/13-2 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/14-2 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/15-2 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/16-2 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/17-2 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/18-2 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/19-2 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/20-2 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/21-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/22-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/23-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/24-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/25-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/26-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/27-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/28-2 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/29-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/30-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/31-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/32-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/33-2 9.000 ± 0% 9.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/34-2 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/35-2 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/36-2 10.00 ± 0% 10.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/37-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/38-2 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/39-2 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/40-2 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/41-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/42-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/43-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/44-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/45-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/46-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/47-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/48-2 12.00 ± 0% 12.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/49-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/50-2 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/51-2 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/52-2 16.00 ± 0% 16.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/53-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/54-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/55-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/56-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/57-2 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/58-2 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/59-2 25.00 ± 0% 25.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/60-2 26.00 ± 0% 26.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/61-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/62-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/63-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/64-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/65-2 14.00 ± 0% 14.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/66-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/67-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ WKBParse/68-2 15.00 ± 0% 15.00 ± 0% ~ (p=1.000 n=15) ¹ geomean ² -3.67% ² ¹ all samples are equal ² summaries must be >0 to compute geomean pkg: github.com/peterstace/simplefeatures/geos │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ sec/op │ sec/op vs base │ IntersectionWithoutValidation/n=10-2 13.20µ ± 1% 13.23µ ± 1% ~ (p=0.653 n=15) IntersectionWithoutValidation/n=100-2 28.79µ ± 1% 28.83µ ± 1% ~ (p=1.000 n=15) IntersectionWithoutValidation/n=1000-2 148.5µ ± 1% 149.0µ ± 1% ~ (p=0.624 n=15) IntersectionWithoutValidation/n=10000-2 1.399m ± 2% 1.391m ± 5% ~ (p=0.935 n=15) NoOp/n=10-2 2.220µ ± 1% 2.235µ ± 1% ~ (p=0.736 n=15) NoOp/n=100-2 5.751µ ± 1% 5.754µ ± 1% ~ (p=0.943 n=15) NoOp/n=1000-2 39.99µ ± 1% 39.69µ ± 2% ~ (p=0.539 n=15) NoOp/n=10000-2 442.3µ ± 5% 451.1µ ± 11% ~ (p=0.935 n=15) geomean 45.33µ 45.45µ +0.26% │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ B/op │ B/op vs base │ IntersectionWithoutValidation/n=10-2 1.289Ki ± 0% 1.289Ki ± 0% ~ (p=1.000 n=15) ¹ IntersectionWithoutValidation/n=100-2 6.305Ki ± 0% 6.305Ki ± 0% ~ (p=1.000 n=15) ¹ IntersectionWithoutValidation/n=1000-2 53.80Ki ± 0% 53.80Ki ± 0% ~ (p=1.000 n=15) IntersectionWithoutValidation/n=10000-2 544.6Ki ± 0% 544.6Ki ± 0% ~ (p=0.243 n=15) NoOp/n=10-2 952.0 ± 0% 952.0 ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=100-2 5.633Ki ± 0% 5.633Ki ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=1000-2 48.38Ki ± 0% 48.38Ki ± 0% ~ (p=1.000 n=15) NoOp/n=10000-2 480.4Ki ± 0% 480.4Ki ± 0% ~ (p=0.483 n=15) geomean 20.31Ki 20.31Ki +0.00% ¹ all samples are equal │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ allocs/op │ allocs/op vs base │ IntersectionWithoutValidation/n=10-2 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionWithoutValidation/n=100-2 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionWithoutValidation/n=1000-2 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionWithoutValidation/n=10000-2 48.00 ± 0% 48.00 ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=10-2 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=100-2 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=1000-2 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=15) ¹ NoOp/n=10000-2 33.00 ± 0% 33.00 ± 0% ~ (p=1.000 n=15) ¹ geomean 39.80 39.80 +0.00% ¹ all samples are equal pkg: github.com/peterstace/simplefeatures/internal/perf │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ sec/op │ sec/op vs base │ LineStringIsSimpleCircle/n=10-2 1.037µ ± 1% 1.019µ ± 0% -1.74% (p=0.000 n=15) LineStringIsSimpleCircle/n=100-2 16.55µ ± 2% 15.51µ ± 3% -6.28% (p=0.000 n=15) LineStringIsSimpleCircle/n=1000-2 252.2µ ± 0% 251.7µ ± 0% ~ (p=0.202 n=15) LineStringIsSimpleCircle/n=10000-2 4.558m ± 5% 3.597m ± 5% -21.08% (p=0.000 n=15) LineStringIsSimpleZigZag/10-2 929.6n ± 1% 912.1n ± 1% -1.88% (p=0.000 n=15) LineStringIsSimpleZigZag/100-2 16.41µ ± 1% 15.33µ ± 1% -6.61% (p=0.000 n=15) LineStringIsSimpleZigZag/1000-2 238.1µ ± 0% 234.8µ ± 0% -1.38% (p=0.000 n=15) LineStringIsSimpleZigZag/10000-2 4.569m ± 14% 3.801m ± 6% -16.83% (p=0.003 n=15) SetOperation/n=4/Go_Intersection-2 18.03µ ± 1% 17.92µ ± 1% -0.60% (p=0.044 n=15) SetOperation/n=4/Go_Difference-2 18.74µ ± 1% 18.73µ ± 2% ~ (p=0.436 n=15) SetOperation/n=4/Go_SymmetricDifference-2 24.80µ ± 1% 24.81µ ± 1% ~ (p=0.560 n=15) SetOperation/n=4/Go_Union-2 19.44µ ± 2% 19.64µ ± 1% +1.05% (p=0.037 n=15) SetOperation/n=4/GEOS_Intersection-2 11.46µ ± 1% 11.33µ ± 1% -1.11% (p=0.004 n=15) SetOperation/n=4/GEOS_Difference-2 11.80µ ± 1% 12.36µ ± 1% +4.74% (p=0.000 n=15) SetOperation/n=4/GEOS_SymmetricDifference-2 18.44µ ± 1% 18.01µ ± 1% -2.34% (p=0.000 n=15) SetOperation/n=4/GEOS_Union-2 11.92µ ± 1% 12.74µ ± 2% +6.88% (p=0.000 n=15) SetOperation/n=8/Go_Intersection-2 23.73µ ± 2% 23.24µ ± 1% -2.04% (p=0.000 n=15) SetOperation/n=8/Go_Difference-2 24.02µ ± 1% 24.26µ ± 1% +1.02% (p=0.023 n=15) SetOperation/n=8/Go_SymmetricDifference-2 31.46µ ± 1% 32.44µ ± 4% +3.09% (p=0.000 n=15) SetOperation/n=8/Go_Union-2 24.68µ ± 0% 24.70µ ± 1% ~ (p=0.798 n=15) SetOperation/n=8/GEOS_Intersection-2 15.10µ ± 1% 15.95µ ± 1% +5.64% (p=0.000 n=15) SetOperation/n=8/GEOS_Difference-2 14.97µ ± 1% 16.17µ ± 1% +8.02% (p=0.000 n=15) SetOperation/n=8/GEOS_SymmetricDifference-2 22.72µ ± 1% 22.43µ ± 2% -1.25% (p=0.034 n=15) SetOperation/n=8/GEOS_Union-2 14.59µ ± 1% 15.97µ ± 1% +9.48% (p=0.000 n=15) SetOperation/n=16/Go_Intersection-2 33.71µ ± 2% 34.06µ ± 1% +1.02% (p=0.008 n=15) SetOperation/n=16/Go_Difference-2 35.25µ ± 1% 35.91µ ± 0% +1.87% (p=0.000 n=15) SetOperation/n=16/Go_SymmetricDifference-2 47.15µ ± 1% 47.85µ ± 1% +1.48% (p=0.001 n=15) SetOperation/n=16/Go_Union-2 36.52µ ± 2% 37.49µ ± 1% +2.65% (p=0.000 n=15) SetOperation/n=16/GEOS_Intersection-2 16.94µ ± 2% 18.36µ ± 1% +8.38% (p=0.000 n=15) SetOperation/n=16/GEOS_Difference-2 18.14µ ± 1% 19.63µ ± 1% +8.25% (p=0.000 n=15) SetOperation/n=16/GEOS_SymmetricDifference-2 30.51µ ± 2% 28.48µ ± 1% -6.66% (p=0.000 n=15) SetOperation/n=16/GEOS_Union-2 18.63µ ± 1% 19.94µ ± 1% +7.05% (p=0.000 n=15) SetOperation/n=32/Go_Intersection-2 58.14µ ± 1% 56.00µ ± 2% -3.69% (p=0.000 n=15) SetOperation/n=32/Go_Difference-2 60.11µ ± 1% 58.26µ ± 1% -3.08% (p=0.000 n=15) SetOperation/n=32/Go_SymmetricDifference-2 80.45µ ± 1% 79.11µ ± 1% -1.67% (p=0.005 n=15) SetOperation/n=32/Go_Union-2 62.08µ ± 1% 61.77µ ± 4% ~ (p=0.345 n=15) SetOperation/n=32/GEOS_Intersection-2 22.26µ ± 1% 23.59µ ± 1% +6.00% (p=0.000 n=15) SetOperation/n=32/GEOS_Difference-2 23.56µ ± 2% 26.33µ ± 2% +11.75% (p=0.000 n=15) SetOperation/n=32/GEOS_SymmetricDifference-2 43.35µ ± 1% 41.04µ ± 1% -5.33% (p=0.000 n=15) SetOperation/n=32/GEOS_Union-2 24.06µ ± 1% 28.73µ ± 1% +19.40% (p=0.000 n=15) SetOperation/n=64/Go_Intersection-2 103.1µ ± 1% 108.6µ ± 1% +5.33% (p=0.000 n=15) SetOperation/n=64/Go_Difference-2 109.8µ ± 1% 111.6µ ± 1% +1.59% (p=0.000 n=15) SetOperation/n=64/Go_SymmetricDifference-2 152.6µ ± 1% 151.7µ ± 2% ~ (p=0.486 n=15) SetOperation/n=64/Go_Union-2 115.7µ ± 1% 124.6µ ± 2% +7.71% (p=0.000 n=15) SetOperation/n=64/GEOS_Intersection-2 30.21µ ± 1% 34.91µ ± 1% +15.53% (p=0.000 n=15) SetOperation/n=64/GEOS_Difference-2 36.47µ ± 1% 40.24µ ± 2% +10.34% (p=0.000 n=15) SetOperation/n=64/GEOS_SymmetricDifference-2 76.29µ ± 2% 65.84µ ± 2% -13.69% (p=0.000 n=15) SetOperation/n=64/GEOS_Union-2 39.14µ ± 3% 46.80µ ± 1% +19.57% (p=0.000 n=15) SetOperation/n=128/Go_Intersection-2 238.1µ ± 1% 219.4µ ± 0% -7.85% (p=0.000 n=15) SetOperation/n=128/Go_Difference-2 249.5µ ± 0% 228.0µ ± 0% -8.63% (p=0.000 n=15) SetOperation/n=128/Go_SymmetricDifference-2 336.5µ ± 2% 318.1µ ± 1% -5.46% (p=0.000 n=15) SetOperation/n=128/Go_Union-2 260.2µ ± 0% 243.6µ ± 1% -6.36% (p=0.000 n=15) SetOperation/n=128/GEOS_Intersection-2 50.10µ ± 2% 57.82µ ± 1% +15.39% (p=0.000 n=15) SetOperation/n=128/GEOS_Difference-2 58.94µ ± 2% 68.56µ ± 1% +16.33% (p=0.000 n=15) SetOperation/n=128/GEOS_SymmetricDifference-2 141.6µ ± 2% 128.3µ ± 1% -9.45% (p=0.000 n=15) SetOperation/n=128/GEOS_Union-2 64.45µ ± 2% 80.77µ ± 1% +25.32% (p=0.000 n=15) SetOperation/n=256/Go_Intersection-2 474.7µ ± 0% 485.3µ ± 2% +2.23% (p=0.000 n=15) SetOperation/n=256/Go_Difference-2 508.2µ ± 0% 506.4µ ± 1% ~ (p=0.137 n=15) SetOperation/n=256/Go_SymmetricDifference-2 698.5µ ± 0% 692.2µ ± 3% ~ (p=0.233 n=15) SetOperation/n=256/Go_Union-2 535.1µ ± 0% 544.0µ ± 0% +1.65% (p=0.002 n=15) SetOperation/n=256/GEOS_Intersection-2 83.22µ ± 2% 98.79µ ± 2% +18.71% (p=0.000 n=15) SetOperation/n=256/GEOS_Difference-2 117.5µ ± 1% 128.8µ ± 1% +9.63% (p=0.000 n=15) SetOperation/n=256/GEOS_SymmetricDifference-2 309.4µ ± 1% 261.4µ ± 0% -15.51% (p=0.000 n=15) SetOperation/n=256/GEOS_Union-2 137.3µ ± 2% 164.0µ ± 1% +19.45% (p=0.000 n=15) SetOperation/n=512/Go_Intersection-2 937.0µ ± 0% 1008.9µ ± 4% +7.67% (p=0.000 n=15) SetOperation/n=512/Go_Difference-2 1.013m ± 4% 1.036m ± 3% ~ (p=0.050 n=15) SetOperation/n=512/Go_SymmetricDifference-2 1.370m ± 1% 1.422m ± 16% +3.79% (p=0.000 n=15) SetOperation/n=512/Go_Union-2 1.062m ± 2% 1.093m ± 2% +2.98% (p=0.002 n=15) SetOperation/n=512/GEOS_Intersection-2 169.8µ ± 1% 194.2µ ± 3% +14.42% (p=0.000 n=15) SetOperation/n=512/GEOS_Difference-2 230.9µ ± 1% 259.5µ ± 0% +12.39% (p=0.000 n=15) SetOperation/n=512/GEOS_SymmetricDifference-2 621.2µ ± 3% 568.0µ ± 0% -8.55% (p=0.000 n=15) SetOperation/n=512/GEOS_Union-2 268.1µ ± 1% 325.3µ ± 1% +21.34% (p=0.000 n=15) SetOperation/n=1024/Go_Intersection-2 1.899m ± 2% 2.251m ± 8% +18.56% (p=0.000 n=15) SetOperation/n=1024/Go_Difference-2 2.041m ± 1% 2.091m ± 5% +2.45% (p=0.026 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 3.157m ± 8% 2.809m ± 3% -11.02% (p=0.000 n=15) SetOperation/n=1024/Go_Union-2 2.326m ± 8% 2.155m ± 1% ~ (p=0.250 n=15) SetOperation/n=1024/GEOS_Intersection-2 341.5µ ± 3% 397.1µ ± 1% +16.29% (p=0.000 n=15) SetOperation/n=1024/GEOS_Difference-2 504.8µ ± 1% 543.6µ ± 2% +7.69% (p=0.000 n=15) SetOperation/n=1024/GEOS_SymmetricDifference-2 1.364m ± 2% 1.216m ± 4% -10.90% (p=0.000 n=15) SetOperation/n=1024/GEOS_Union-2 590.9µ ± 5% 692.9µ ± 1% +17.27% (p=0.000 n=15) SetOperation/n=2048/Go_Intersection-2 4.699m ± 10% 3.985m ± 3% -15.20% (p=0.000 n=15) SetOperation/n=2048/Go_Difference-2 4.229m ± 4% 4.139m ± 5% ~ (p=0.161 n=15) SetOperation/n=2048/Go_SymmetricDifference-2 6.067m ± 10% 5.946m ± 8% ~ (p=0.683 n=15) SetOperation/n=2048/Go_Union-2 4.246m ± 1% 4.393m ± 15% +3.45% (p=0.000 n=15) SetOperation/n=2048/GEOS_Intersection-2 734.9µ ± 1% 833.9µ ± 2% +13.46% (p=0.000 n=15) SetOperation/n=2048/GEOS_Difference-2 1.021m ± 1% 1.137m ± 1% +11.38% (p=0.000 n=15) SetOperation/n=2048/GEOS_SymmetricDifference-2 2.711m ± 4% 2.691m ± 3% ~ (p=0.285 n=15) SetOperation/n=2048/GEOS_Union-2 1.254m ± 5% 1.494m ± 4% +19.09% (p=0.000 n=15) SetOperation/n=4096/Go_Intersection-2 8.768m ± 10% 10.723m ± 12% +22.29% (p=0.004 n=15) SetOperation/n=4096/Go_Difference-2 9.228m ± 4% 11.685m ± 12% +26.63% (p=0.000 n=15) SetOperation/n=4096/Go_SymmetricDifference-2 12.34m ± 6% 15.51m ± 8% +25.66% (p=0.000 n=15) SetOperation/n=4096/Go_Union-2 9.378m ± 10% 10.851m ± 10% +15.70% (p=0.000 n=15) SetOperation/n=4096/GEOS_Intersection-2 1.428m ± 6% 1.672m ± 2% +17.11% (p=0.000 n=15) SetOperation/n=4096/GEOS_Difference-2 2.261m ± 9% 2.274m ± 3% ~ (p=0.653 n=15) SetOperation/n=4096/GEOS_SymmetricDifference-2 6.595m ± 9% 5.100m ± 4% -22.66% (p=0.000 n=15) SetOperation/n=4096/GEOS_Union-2 2.535m ± 4% 2.923m ± 2% +15.28% (p=0.000 n=15) SetOperation/n=8192/Go_Intersection-2 18.45m ± 7% 18.03m ± 11% ~ (p=0.653 n=15) SetOperation/n=8192/Go_Difference-2 19.97m ± 6% 19.21m ± 4% ~ (p=0.233 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 27.53m ± 8% 27.52m ± 9% ~ (p=0.539 n=15) SetOperation/n=8192/Go_Union-2 19.96m ± 4% 19.19m ± 5% ~ (p=0.074 n=15) SetOperation/n=8192/GEOS_Intersection-2 3.209m ± 18% 3.535m ± 6% +10.16% (p=0.023 n=15) SetOperation/n=8192/GEOS_Difference-2 4.250m ± 3% 4.865m ± 4% +14.45% (p=0.000 n=15) SetOperation/n=8192/GEOS_SymmetricDifference-2 12.33m ± 13% 10.37m ± 2% -15.86% (p=0.000 n=15) SetOperation/n=8192/GEOS_Union-2 5.085m ± 3% 5.896m ± 1% +15.95% (p=0.000 n=15) SetOperation/n=16384/Go_Intersection-2 44.20m ± 22% 49.71m ± 121% ~ (p=0.775 n=15) SetOperation/n=16384/Go_Difference-2 43.43m ± 46% 40.02m ± 28% ~ (p=0.595 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 83.63m ± 31% 58.28m ± 12% -30.31% (p=0.023 n=15) SetOperation/n=16384/Go_Union-2 50.62m ± 14% 46.28m ± 31% ~ (p=0.539 n=15) SetOperation/n=16384/GEOS_Intersection-2 7.382m ± 11% 7.637m ± 6% ~ (p=0.116 n=15) SetOperation/n=16384/GEOS_Difference-2 9.237m ± 8% 9.763m ± 4% ~ (p=0.067 n=15) SetOperation/n=16384/GEOS_SymmetricDifference-2 25.49m ± 6% 24.58m ± 15% ~ (p=0.161 n=15) SetOperation/n=16384/GEOS_Union-2 11.13m ± 2% 12.74m ± 1% +14.52% (p=0.000 n=15) geomean 326.8µ 334.8µ +2.47% │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ B/op │ B/op vs base │ LineStringIsSimpleCircle/n=10-2 1.438Ki ± 0% 1.422Ki ± 0% -1.09% (p=0.000 n=15) LineStringIsSimpleCircle/n=100-2 18.03Ki ± 0% 14.77Ki ± 0% -18.11% (p=0.000 n=15) LineStringIsSimpleCircle/n=1000-2 109.3Ki ± 0% 109.3Ki ± 0% -0.01% (p=0.000 n=15) LineStringIsSimpleCircle/n=10000-2 1.466Mi ± 0% 1.466Mi ± 0% -0.00% (p=0.000 n=15) LineStringIsSimpleZigZag/10-2 1.406Ki ± 0% 1.391Ki ± 0% -1.11% (p=0.000 n=15) LineStringIsSimpleZigZag/100-2 18.03Ki ± 0% 14.77Ki ± 0% -18.11% (p=0.000 n=15) LineStringIsSimpleZigZag/1000-2 109.3Ki ± 0% 109.3Ki ± 0% -0.01% (p=0.000 n=15) LineStringIsSimpleZigZag/10000-2 1.466Mi ± 0% 1.466Mi ± 0% -0.00% (p=0.000 n=15) SetOperation/n=4/Go_Intersection-2 16.12Ki ± 0% 16.07Ki ± 0% -0.30% (p=0.000 n=15) SetOperation/n=4/Go_Difference-2 16.99Ki ± 0% 16.74Ki ± 0% -1.47% (p=0.000 n=15) SetOperation/n=4/Go_SymmetricDifference-2 23.98Ki ± 0% 23.07Ki ± 0% -3.79% (p=0.000 n=15) SetOperation/n=4/Go_Union-2 17.38Ki ± 0% 16.93Ki ± 0% -2.61% (p=0.000 n=15) SetOperation/n=4/GEOS_Intersection-2 1.570Ki ± 0% 1.539Ki ± 0% -1.99% (p=0.000 n=15) SetOperation/n=4/GEOS_Difference-2 2.320Ki ± 0% 2.086Ki ± 0% -10.10% (p=0.000 n=15) SetOperation/n=4/GEOS_SymmetricDifference-2 9.062Ki ± 0% 8.172Ki ± 0% -9.83% (p=0.000 n=15) SetOperation/n=4/GEOS_Union-2 2.664Ki ± 0% 2.227Ki ± 0% -16.42% (p=0.000 n=15) SetOperation/n=8/Go_Intersection-2 21.43Ki ± 0% 19.76Ki ± 0% -7.80% (p=0.000 n=15) SetOperation/n=8/Go_Difference-2 21.71Ki ± 0% 20.45Ki ± 0% -5.82% (p=0.000 n=15) SetOperation/n=8/Go_SymmetricDifference-2 30.23Ki ± 0% 28.92Ki ± 0% -4.34% (p=0.000 n=15) SetOperation/n=8/Go_Union-2 21.88Ki ± 0% 20.62Ki ± 0% -5.80% (p=0.000 n=15) SetOperation/n=8/GEOS_Intersection-2 2.789Ki ± 0% 2.352Ki ± 0% -15.69% (p=0.000 n=15) SetOperation/n=8/GEOS_Difference-2 2.945Ki ± 0% 2.914Ki ± 0% -1.06% (p=0.000 n=15) SetOperation/n=8/GEOS_SymmetricDifference-2 11.19Ki ± 0% 11.11Ki ± 0% -0.70% (p=0.000 n=15) SetOperation/n=8/GEOS_Union-2 3.070Ki ± 0% 3.039Ki ± 0% -1.02% (p=0.000 n=15) SetOperation/n=16/Go_Intersection-2 30.62Ki ± 0% 29.36Ki ± 0% -4.13% (p=0.000 n=15) SetOperation/n=16/Go_Difference-2 32.79Ki ± 0% 30.72Ki ± 0% -6.33% (p=0.000 n=15) SetOperation/n=16/Go_SymmetricDifference-2 47.86Ki ± 0% 43.29Ki ± 0% -9.54% (p=0.000 n=15) SetOperation/n=16/Go_Union-2 34.03Ki ± 0% 31.95Ki ± 0% -6.12% (p=0.000 n=15) SetOperation/n=16/GEOS_Intersection-2 3.320Ki ± 0% 3.289Ki ± 0% -0.94% (p=0.000 n=15) SetOperation/n=16/GEOS_Difference-2 5.430Ki ± 0% 4.586Ki ± 0% -15.54% (p=0.000 n=15) SetOperation/n=16/GEOS_SymmetricDifference-2 20.42Ki ± 0% 17.09Ki ± 0% -16.30% (p=0.000 n=15) SetOperation/n=16/GEOS_Union-2 6.680Ki ± 0% 5.836Ki ± 0% -12.63% (p=0.000 n=15) SetOperation/n=32/Go_Intersection-2 56.21Ki ± 0% 49.25Ki ± 0% -12.37% (p=0.000 n=15) SetOperation/n=32/Go_Difference-2 57.71Ki ± 0% 50.75Ki ± 0% -12.05% (p=0.000 n=15) SetOperation/n=32/Go_SymmetricDifference-2 80.85Ki ± 0% 71.41Ki ± 0% -11.68% (p=0.000 n=15) SetOperation/n=32/Go_Union-2 58.35Ki ± 0% 52.21Ki ± 0% -10.52% (p=0.000 n=15) SetOperation/n=32/GEOS_Intersection-2 7.242Ki ± 0% 6.398Ki ± 0% -11.65% (p=0.000 n=15) SetOperation/n=32/GEOS_Difference-2 8.742Ki ± 0% 7.898Ki ± 0% -9.65% (p=0.000 n=15) SetOperation/n=32/GEOS_SymmetricDifference-2 32.12Ki ± 0% 28.80Ki ± 0% -10.36% (p=0.000 n=15) SetOperation/n=32/GEOS_Union-2 9.492Ki ± 0% 9.461Ki ± 0% -0.33% (p=0.000 n=15) SetOperation/n=64/Go_Intersection-2 95.81Ki ± 0% 89.67Ki ± 0% -6.41% (p=0.000 n=15) SetOperation/n=64/Go_Difference-2 103.71Ki ± 0% 91.89Ki ± 0% -11.40% (p=0.000 n=15) SetOperation/n=64/Go_SymmetricDifference-2 153.0Ki ± 0% 124.0Ki ± 0% -18.92% (p=0.000 n=15) SetOperation/n=64/Go_Union-2 107.17Ki ± 0% 99.40Ki ± 0% -7.25% (p=0.000 n=15) SetOperation/n=64/GEOS_Intersection-2 10.62Ki ± 0% 10.59Ki ± 0% -0.29% (p=0.000 n=15) SetOperation/n=64/GEOS_Difference-2 18.74Ki ± 0% 13.02Ki ± 0% -30.51% (p=0.000 n=15) SetOperation/n=64/GEOS_SymmetricDifference-2 68.67Ki ± 0% 45.84Ki ± 0% -33.24% (p=0.000 n=15) SetOperation/n=64/GEOS_Union-2 22.49Ki ± 0% 20.84Ki ± 0% -7.36% (p=0.000 n=15) SetOperation/n=128/Go_Intersection-2 193.5Ki ± 0% 166.2Ki ± 0% -14.09% (p=0.000 n=15) SetOperation/n=128/Go_Difference-2 200.5Ki ± 0% 169.2Ki ± 0% -15.62% (p=0.000 n=15) SetOperation/n=128/Go_SymmetricDifference-2 283.3Ki ± 0% 234.8Ki ± 0% -17.10% (p=0.000 n=15) SetOperation/n=128/Go_Union-2 202.9Ki ± 0% 177.2Ki ± 0% -12.64% (p=0.000 n=15) SetOperation/n=128/GEOS_Intersection-2 24.74Ki ± 0% 23.09Ki ± 0% -6.69% (p=0.000 n=15) SetOperation/n=128/GEOS_Difference-2 32.37Ki ± 0% 26.65Ki ± 0% -17.67% (p=0.000 n=15) SetOperation/n=128/GEOS_SymmetricDifference-2 117.17Ki ± 0% 94.34Ki ± 0% -19.48% (p=0.000 n=15) SetOperation/n=128/GEOS_Union-2 35.37Ki ± 0% 35.34Ki ± 0% -0.09% (p=0.000 n=15) SetOperation/n=256/Go_Intersection-2 349.3Ki ± 0% 323.7Ki ± 0% -7.34% (p=0.000 n=15) SetOperation/n=256/Go_Difference-2 381.1Ki ± 0% 330.2Ki ± 0% -13.34% (p=0.000 n=15) SetOperation/n=256/Go_SymmetricDifference-2 569.5Ki ± 0% 443.0Ki ± 0% -22.20% (p=0.000 n=15) SetOperation/n=256/Go_Union-2 390.7Ki ± 0% 360.1Ki ± 0% -7.81% (p=0.000 n=15) SetOperation/n=256/GEOS_Intersection-2 40.37Ki ± 0% 40.34Ki ± 0% -0.08% (p=0.000 n=15) SetOperation/n=256/GEOS_Difference-2 73.74Ki ± 0% 48.52Ki ± 0% -34.20% (p=0.000 n=15) SetOperation/n=256/GEOS_SymmetricDifference-2 266.2Ki ± 0% 165.3Ki ± 0% -37.88% (p=0.000 n=15) SetOperation/n=256/GEOS_Union-2 84.49Ki ± 0% 79.59Ki ± 0% -5.81% (p=0.000 n=15) SetOperation/n=512/Go_Intersection-2 714.4Ki ± 0% 605.9Ki ± 0% -15.19% (p=0.000 n=15) SetOperation/n=512/Go_Difference-2 746.2Ki ± 0% 617.4Ki ± 0% -17.26% (p=0.000 n=15) SetOperation/n=512/Go_SymmetricDifference-2 1066.5Ki ± 0% 862.0Ki ± 0% -19.17% (p=0.000 n=15) SetOperation/n=512/Go_Union-2 755.8Ki ± 0% 652.1Ki ± 0% -13.71% (p=0.000 n=15) SetOperation/n=512/GEOS_Intersection-2 93.49Ki ± 0% 88.59Ki ± 0% -5.25% (p=0.000 n=15) SetOperation/n=512/GEOS_Difference-2 128.4Ki ± 0% 103.1Ki ± 0% -19.65% (p=0.000 n=15) SetOperation/n=512/GEOS_SymmetricDifference-2 456.9Ki ± 0% 356.1Ki ± 0% -22.07% (p=0.000 n=15) SetOperation/n=512/GEOS_Union-2 140.6Ki ± 0% 140.6Ki ± 0% -0.02% (p=0.000 n=15) SetOperation/n=1024/Go_Intersection-2 1.322Mi ± 0% 1.221Mi ± 0% -7.65% (p=0.000 n=15) SetOperation/n=1024/Go_Difference-2 1.450Mi ± 0% 1.248Mi ± 0% -13.93% (p=0.000 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 2.197Mi ± 0% 1.693Mi ± 0% -22.96% (p=0.000 n=15) SetOperation/n=1024/Go_Union-2 1.481Mi ± 0% 1.362Mi ± 0% -8.01% (p=0.000 n=15) SetOperation/n=1024/GEOS_Intersection-2 158.1Ki ± 0% 158.1Ki ± 0% -0.02% (p=0.000 n=15) SetOperation/n=1024/GEOS_Difference-2 294.1Ki ± 0% 190.9Ki ± 0% -35.09% (p=0.000 n=15) SetOperation/n=1024/GEOS_SymmetricDifference-2 1080.9Ki ± 0% 668.1Ki ± 0% -38.19% (p=0.000 n=15) SetOperation/n=1024/GEOS_Union-2 332.0Ki ± 0% 314.1Ki ± 0% -5.39% (p=0.000 n=15) SetOperation/n=2048/Go_Intersection-2 2.861Mi ± 0% 2.438Mi ± 0% -14.79% (p=0.000 n=15) SetOperation/n=2048/Go_Difference-2 2.992Mi ± 0% 2.486Mi ± 0% -16.93% (p=0.000 n=15) SetOperation/n=2048/Go_SymmetricDifference-2 4.246Mi ± 0% 3.437Mi ± 0% -19.06% (p=0.000 n=15) SetOperation/n=2048/Go_Union-2 3.024Mi ± 0% 2.618Mi ± 0% -13.42% (p=0.000 n=15) SetOperation/n=2048/GEOS_Intersection-2 376.0Ki ± 0% 358.1Ki ± 0% -4.76% (p=0.000 n=15) SetOperation/n=2048/GEOS_Difference-2 526.1Ki ± 0% 422.9Ki ± 0% -19.62% (p=0.000 n=15) SetOperation/n=2048/GEOS_SymmetricDifference-2 1.798Mi ± 0% 1.395Mi ± 0% -22.43% (p=0.000 n=15) SetOperation/n=2048/GEOS_Union-2 566.1Ki ± 0% 566.1Ki ± 0% -0.01% (p=0.000 n=15) SetOperation/n=4096/Go_Intersection-2 5.577Mi ± 0% 5.171Mi ± 0% -7.28% (p=0.000 n=15) SetOperation/n=4096/Go_Difference-2 6.062Mi ± 0% 5.251Mi ± 0% -13.38% (p=0.000 n=15) SetOperation/n=4096/Go_SymmetricDifference-2 8.924Mi ± 0% 6.897Mi ± 0% -22.72% (p=0.000 n=15) SetOperation/n=4096/Go_Union-2 6.193Mi ± 0% 5.719Mi ± 0% -7.66% (p=0.000 n=15) SetOperation/n=4096/GEOS_Intersection-2 630.1Ki ± 0% 630.1Ki ± 0% -0.00% (p=0.000 n=15) SetOperation/n=4096/GEOS_Difference-2 1150.1Ki ± 0% 734.9Ki ± 0% -36.10% (p=0.000 n=15) SetOperation/n=4096/GEOS_SymmetricDifference-2 4.048Mi ± 0% 2.426Mi ± 0% -40.07% (p=0.000 n=15) SetOperation/n=4096/GEOS_Union-2 1.270Mi ± 0% 1.201Mi ± 0% -5.38% (p=0.000 n=15) SetOperation/n=8192/Go_Intersection-2 11.77Mi ± 0% 10.08Mi ± 0% -14.38% (p=0.000 n=15) SetOperation/n=8192/Go_Difference-2 12.26Mi ± 0% 10.23Mi ± 0% -16.55% (p=0.000 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 17.13Mi ± 0% 13.88Mi ± 0% -18.96% (p=0.000 n=15) SetOperation/n=8192/Go_Union-2 12.40Mi ± 0% 10.78Mi ± 0% -13.10% (p=0.000 n=15) SetOperation/n=8192/GEOS_Intersection-2 1.395Mi ± 0% 1.326Mi ± 0% -4.90% (p=0.000 n=15) SetOperation/n=8192/GEOS_Difference-2 1.936Mi ± 0% 1.530Mi ± 0% -20.95% (p=0.000 n=15) SetOperation/n=8192/GEOS_SymmetricDifference-2 6.923Mi ± 0% 5.301Mi ± 0% -23.43% (p=0.000 n=15) SetOperation/n=8192/GEOS_Union-2 2.115Mi ± 0% 2.115Mi ± 0% -0.00% (p=0.000 n=15) SetOperation/n=16384/Go_Intersection-2 22.01Mi ± 0% 20.38Mi ± 0% -7.38% (p=0.000 n=15) SetOperation/n=16384/Go_Difference-2 23.93Mi ± 0% 20.68Mi ± 0% -13.58% (p=0.000 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 35.23Mi ± 0% 27.11Mi ± 0% -23.05% (p=0.000 n=15) SetOperation/n=16384/Go_Union-2 24.48Mi ± 0% 22.59Mi ± 0% -7.74% (p=0.000 n=15) SetOperation/n=16384/GEOS_Intersection-2 2.365Mi ± 0% 2.365Mi ± 0% -0.00% (p=0.000 n=15) SetOperation/n=16384/GEOS_Difference-2 4.373Mi ± 0% 2.749Mi ± 0% -37.14% (p=0.000 n=15) SetOperation/n=16384/GEOS_SymmetricDifference-2 15.923Mi ± 0% 9.426Mi ± 0% -40.80% (p=0.000 n=15) SetOperation/n=16384/GEOS_Union-2 5.004Mi ± 0% 4.733Mi ± 0% -5.42% (p=0.000 n=15) geomean 196.4Ki 171.3Ki -12.79% │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ allocs/op │ allocs/op vs base │ LineStringIsSimpleCircle/n=10-2 7.000 ± 0% 6.000 ± 0% -14.29% (p=0.000 n=15) LineStringIsSimpleCircle/n=100-2 71.00 ± 0% 54.00 ± 0% -23.94% (p=0.000 n=15) LineStringIsSimpleCircle/n=1000-2 343.0 ± 0% 342.0 ± 0% -0.29% (p=0.000 n=15) LineStringIsSimpleCircle/n=10000-2 5.463k ± 0% 5.462k ± 0% -0.02% (p=0.000 n=15) LineStringIsSimpleZigZag/10-2 7.000 ± 0% 6.000 ± 0% -14.29% (p=0.000 n=15) LineStringIsSimpleZigZag/100-2 71.00 ± 0% 54.00 ± 0% -23.94% (p=0.000 n=15) LineStringIsSimpleZigZag/1000-2 343.0 ± 0% 342.0 ± 0% -0.29% (p=0.000 n=15) LineStringIsSimpleZigZag/10000-2 5.463k ± 0% 5.462k ± 0% -0.02% (p=0.000 n=15) SetOperation/n=4/Go_Intersection-2 214.0 ± 0% 211.0 ± 0% -1.40% (p=0.000 n=15) SetOperation/n=4/Go_Difference-2 219.0 ± 0% 215.0 ± 0% -1.83% (p=0.000 n=15) SetOperation/n=4/Go_SymmetricDifference-2 320.0 ± 0% 310.0 ± 0% -3.12% (p=0.000 n=15) SetOperation/n=4/Go_Union-2 225.0 ± 0% 220.0 ± 0% -2.22% (p=0.000 n=15) SetOperation/n=4/GEOS_Intersection-2 52.00 ± 0% 50.00 ± 0% -3.85% (p=0.000 n=15) SetOperation/n=4/GEOS_Difference-2 55.00 ± 0% 52.00 ± 0% -5.45% (p=0.000 n=15) SetOperation/n=4/GEOS_SymmetricDifference-2 148.0 ± 0% 139.0 ± 0% -6.08% (p=0.000 n=15) SetOperation/n=4/GEOS_Union-2 56.00 ± 0% 52.00 ± 0% -7.14% (p=0.000 n=15) SetOperation/n=8/Go_Intersection-2 229.0 ± 0% 218.0 ± 0% -4.80% (p=0.000 n=15) SetOperation/n=8/Go_Difference-2 231.0 ± 0% 222.0 ± 0% -3.90% (p=0.000 n=15) SetOperation/n=8/Go_SymmetricDifference-2 337.0 ± 0% 325.0 ± 0% -3.56% (p=0.000 n=15) SetOperation/n=8/Go_Union-2 236.0 ± 0% 227.0 ± 0% -3.81% (p=0.000 n=15) SetOperation/n=8/GEOS_Intersection-2 56.00 ± 0% 52.00 ± 0% -7.14% (p=0.000 n=15) SetOperation/n=8/GEOS_Difference-2 56.00 ± 0% 54.00 ± 0% -3.57% (p=0.000 n=15) SetOperation/n=8/GEOS_SymmetricDifference-2 152.0 ± 0% 147.0 ± 0% -3.29% (p=0.000 n=15) SetOperation/n=8/GEOS_Union-2 56.00 ± 0% 54.00 ± 0% -3.57% (p=0.000 n=15) SetOperation/n=16/Go_Intersection-2 241.0 ± 0% 232.0 ± 0% -3.73% (p=0.000 n=15) SetOperation/n=16/Go_Difference-2 251.0 ± 0% 238.0 ± 0% -5.18% (p=0.000 n=15) SetOperation/n=16/Go_SymmetricDifference-2 381.0 ± 0% 353.0 ± 0% -7.35% (p=0.000 n=15) SetOperation/n=16/Go_Union-2 260.0 ± 0% 247.0 ± 0% -5.00% (p=0.000 n=15) SetOperation/n=16/GEOS_Intersection-2 56.00 ± 0% 54.00 ± 0% -3.57% (p=0.000 n=15) SetOperation/n=16/GEOS_Difference-2 64.00 ± 0% 58.00 ± 0% -9.38% (p=0.000 n=15) SetOperation/n=16/GEOS_SymmetricDifference-2 185.0 ± 0% 164.0 ± 0% -11.35% (p=0.000 n=15) SetOperation/n=16/GEOS_Union-2 68.00 ± 0% 62.00 ± 0% -8.82% (p=0.000 n=15) SetOperation/n=32/Go_Intersection-2 290.0 ± 0% 253.0 ± 0% -12.76% (p=0.000 n=15) SetOperation/n=32/Go_Difference-2 296.0 ± 0% 259.0 ± 0% -12.50% (p=0.000 n=15) SetOperation/n=32/Go_SymmetricDifference-2 449.0 ± 0% 397.0 ± 0% -11.58% (p=0.000 n=15) SetOperation/n=32/Go_Union-2 301.0 ± 0% 268.0 ± 0% -10.96% (p=0.000 n=15) SetOperation/n=32/GEOS_Intersection-2 68.00 ± 0% 62.00 ± 0% -8.82% (p=0.000 n=15) SetOperation/n=32/GEOS_Difference-2 72.00 ± 0% 66.00 ± 0% -8.33% (p=0.000 n=15) SetOperation/n=32/GEOS_SymmetricDifference-2 216.0 ± 0% 195.0 ± 0% -9.72% (p=0.000 n=15) SetOperation/n=32/GEOS_Union-2 72.00 ± 0% 70.00 ± 0% -2.78% (p=0.000 n=15) SetOperation/n=64/Go_Intersection-2 330.0 ± 0% 297.0 ± 0% -10.00% (p=0.000 n=15) SetOperation/n=64/Go_Difference-2 364.0 ± 0% 303.0 ± 0% -16.76% (p=0.000 n=15) SetOperation/n=64/Go_SymmetricDifference-2 614.0 ± 0% 466.0 ± 0% -24.10% (p=0.000 n=15) SetOperation/n=64/Go_Union-2 377.0 ± 0% 336.0 ± 0% -10.88% (p=0.000 n=15) SetOperation/n=64/GEOS_Intersection-2 72.00 ± 0% 70.00 ± 0% -2.78% (p=0.000 n=15) SetOperation/n=64/GEOS_Difference-2 104.00 ± 0% 74.00 ± 0% -28.85% (p=0.000 n=15) SetOperation/n=64/GEOS_SymmetricDifference-2 345.0 ± 0% 228.0 ± 0% -33.91% (p=0.000 n=15) SetOperation/n=64/GEOS_Union-2 112.0 ± 0% 102.0 ± 0% -8.93% (p=0.000 n=15) SetOperation/n=128/Go_Intersection-2 503.0 ± 0% 366.0 ± 0% -27.24% (p=0.000 n=15) SetOperation/n=128/Go_Difference-2 529.0 ± 0% 372.0 ± 0% -29.68% (p=0.000 n=15) SetOperation/n=128/Go_SymmetricDifference-2 875.0 ± 0% 631.0 ± 0% -27.89% (p=0.000 n=15) SetOperation/n=128/Go_Union-2 534.0 ± 0% 405.0 ± 0% -24.16% (p=0.000 n=15) SetOperation/n=128/GEOS_Intersection-2 112.0 ± 0% 102.0 ± 0% -8.93% (p=0.000 n=15) SetOperation/n=128/GEOS_Difference-2 136.0 ± 0% 106.0 ± 0% -22.06% (p=0.000 n=15) SetOperation/n=128/GEOS_SymmetricDifference-2 473.0 ± 0% 356.0 ± 0% -24.74% (p=0.000 n=15) SetOperation/n=128/GEOS_Union-2 136.0 ± 0% 134.0 ± 0% -1.47% (p=0.000 n=15) SetOperation/n=256/Go_Intersection-2 661.0 ± 0% 532.0 ± 0% -19.52% (p=0.000 n=15) SetOperation/n=256/Go_Difference-2 791.0 ± 0% 538.0 ± 0% -31.98% (p=0.000 n=15) SetOperation/n=256/Go_SymmetricDifference-2 1521.0 ± 0% 893.0 ± 0% -41.29% (p=0.000 n=15) SetOperation/n=256/Go_Union-2 820.0 ± 0% 667.0 ± 0% -18.66% (p=0.000 n=15) SetOperation/n=256/GEOS_Intersection-2 136.0 ± 0% 134.0 ± 0% -1.47% (p=0.000 n=15) SetOperation/n=256/GEOS_Difference-2 264.0 ± 0% 138.0 ± 0% -47.73% (p=0.000 n=15) SetOperation/n=256/GEOS_SymmetricDifference-2 985.0 ± 0% 484.0 ± 0% -50.86% (p=0.000 n=15) SetOperation/n=256/GEOS_Union-2 288.0 ± 0% 262.0 ± 0% -9.03% (p=0.000 n=15) SetOperation/n=512/Go_Intersection-2 1330.0 ± 0% 793.0 ± 0% -40.38% (p=0.000 n=15) SetOperation/n=512/Go_Difference-2 1436.0 ± 0% 799.0 ± 0% -44.36% (p=0.000 n=15) SetOperation/n=512/Go_SymmetricDifference-2 2.550k ± 0% 1.538k ± 0% -39.69% (p=0.000 n=15) SetOperation/n=512/Go_Union-2 1441.0 ± 0% 928.0 ± 0% -35.60% (p=0.000 n=15) SetOperation/n=512/GEOS_Intersection-2 288.0 ± 0% 262.0 ± 0% -9.03% (p=0.000 n=15) SetOperation/n=512/GEOS_Difference-2 392.0 ± 0% 266.0 ± 0% -32.14% (p=0.000 n=15) SetOperation/n=512/GEOS_SymmetricDifference-2 1497.0 ± 0% 996.0 ± 0% -33.47% (p=0.000 n=15) SetOperation/n=512/GEOS_Union-2 392.0 ± 0% 390.0 ± 0% -0.51% (p=0.000 n=15) SetOperation/n=1024/Go_Intersection-2 1.955k ± 0% 1.442k ± 0% -26.24% (p=0.000 n=15) SetOperation/n=1024/Go_Difference-2 2.469k ± 0% 1.448k ± 0% -41.35% (p=0.000 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 5.119k ± 0% 2.571k ± 0% -49.78% (p=0.000 n=15) SetOperation/n=1024/Go_Union-2 2.562k ± 0% 1.961k ± 0% -23.46% (p=0.000 n=15) SetOperation/n=1024/GEOS_Intersection-2 392.0 ± 0% 390.0 ± 0% -0.51% (p=0.000 n=15) SetOperation/n=1024/GEOS_Difference-2 904.0 ± 0% 394.0 ± 0% -56.42% (p=0.000 n=15) SetOperation/n=1024/GEOS_SymmetricDifference-2 3.545k ± 0% 1.508k ± 0% -57.46% (p=0.000 n=15) SetOperation/n=1024/GEOS_Union-2 992.0 ± 0% 902.0 ± 0% -9.07% (p=0.000 n=15) SetOperation/n=2048/Go_Intersection-2 4.611k ± 0% 2.474k ± 0% -46.35% (p=0.000 n=15) SetOperation/n=2048/Go_Difference-2 5.037k ± 0% 2.480k ± 0% -50.76% (p=0.000 n=15) SetOperation/n=2048/Go_SymmetricDifference-2 9.223k ± 0% 5.139k ± 0% -44.28% (p=0.000 n=15) SetOperation/n=2048/Go_Union-2 5.042k ± 0% 2.993k ± 0% -40.64% (p=0.000 n=15) SetOperation/n=2048/GEOS_Intersection-2 992.0 ± 0% 902.0 ± 0% -9.07% (p=0.000 n=15) SetOperation/n=2048/GEOS_Difference-2 1416.0 ± 0% 906.0 ± 0% -36.02% (p=0.000 n=15) SetOperation/n=2048/GEOS_SymmetricDifference-2 5.593k ± 0% 3.556k ± 0% -36.42% (p=0.000 n=15) SetOperation/n=2048/GEOS_Union-2 1.416k ± 0% 1.414k ± 0% -0.14% (p=0.000 n=15) SetOperation/n=4096/Go_Intersection-2 7.092k ± 0% 5.043k ± 0% -28.89% (p=0.000 n=15) SetOperation/n=4096/Go_Difference-2 9.142k ± 0% 5.049k ± 0% -44.77% (p=0.000 n=15) SetOperation/n=4096/Go_SymmetricDifference-2 19.472k ± 0% 9.244k ± 0% -52.53% (p=0.000 n=15) SetOperation/n=4096/Go_Union-2 9.491k ± 0% 7.098k ± 0% -25.21% (p=0.000 n=15) SetOperation/n=4096/GEOS_Intersection-2 1.416k ± 0% 1.414k ± 0% -0.14% (p=0.000 n=15) SetOperation/n=4096/GEOS_Difference-2 3.464k ± 0% 1.418k ± 0% -59.06% (p=0.000 n=15) SetOperation/n=4096/GEOS_SymmetricDifference-2 13.785k ± 0% 5.604k ± 0% -59.35% (p=0.000 n=15) SetOperation/n=4096/GEOS_Union-2 3.808k ± 0% 3.462k ± 0% -9.09% (p=0.000 n=15) SetOperation/n=8192/Go_Intersection-2 17.686k ± 0% 9.149k ± 0% -48.27% (p=0.000 n=15) SetOperation/n=8192/Go_Difference-2 19.392k ± 0% 9.155k ± 0% -52.79% (p=0.000 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 35.87k ± 0% 19.49k ± 0% -45.65% (p=0.000 n=15) SetOperation/n=8192/Go_Union-2 19.40k ± 0% 11.20k ± 0% -42.24% (p=0.000 n=15) SetOperation/n=8192/GEOS_Intersection-2 3.808k ± 0% 3.462k ± 0% -9.09% (p=0.000 n=15) SetOperation/n=8192/GEOS_Difference-2 5.512k ± 0% 3.466k ± 0% -37.12% (p=0.000 n=15) SetOperation/n=8192/GEOS_SymmetricDifference-2 21.98k ± 0% 13.80k ± 0% -37.23% (p=0.000 n=15) SetOperation/n=8192/GEOS_Union-2 5.512k ± 0% 5.510k ± 0% -0.04% (p=0.000 n=15) SetOperation/n=16384/Go_Intersection-2 27.59k ± 0% 19.40k ± 0% -29.69% (p=0.000 n=15) SetOperation/n=16384/Go_Difference-2 35.78k ± 0% 19.40k ± 0% -45.78% (p=0.000 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 76.83k ± 0% 35.89k ± 0% -53.29% (p=0.000 n=15) SetOperation/n=16384/Go_Union-2 37.16k ± 0% 27.60k ± 0% -25.73% (p=0.000 n=15) SetOperation/n=16384/GEOS_Intersection-2 5.512k ± 0% 5.510k ± 0% -0.04% (p=0.000 n=15) SetOperation/n=16384/GEOS_Difference-2 13.704k ± 0% 5.514k ± 0% -59.76% (p=0.000 n=15) SetOperation/n=16384/GEOS_SymmetricDifference-2 54.74k ± 0% 21.99k ± 0% -59.84% (p=0.000 n=15) SetOperation/n=16384/GEOS_Union-2 15.07k ± 0% 13.70k ± 0% -9.09% (p=0.000 n=15) geomean 785.3 597.9 -23.87% pkg: github.com/peterstace/simplefeatures/rtree │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ sec/op │ sec/op vs base │ Bulk/n=10-2 411.7n ± 1% 398.2n ± 1% -3.28% (p=0.000 n=15) Bulk/n=100-2 8.578µ ± 0% 8.798µ ± 0% +2.56% (p=0.000 n=15) Bulk/n=1000-2 187.6µ ± 3% 185.1µ ± 0% -1.34% (p=0.000 n=15) Bulk/n=10000-2 2.711m ± 1% 2.505m ± 1% -7.59% (p=0.000 n=15) Bulk/n=100000-2 31.13m ± 1% 30.53m ± 1% -1.92% (p=0.001 n=15) RangeSearch/n=10-2 10.39n ± 0% 10.31n ± 1% ~ (p=0.168 n=15) RangeSearch/n=100-2 43.14n ± 0% 42.95n ± 1% -0.44% (p=0.002 n=15) RangeSearch/n=1000-2 159.7n ± 1% 159.7n ± 0% ~ (p=0.720 n=15) RangeSearch/n=10000-2 573.4n ± 0% 574.4n ± 0% +0.17% (p=0.016 n=15) RangeSearch/n=100000-2 5.267µ ± 1% 4.803µ ± 1% -8.81% (p=0.000 n=15) geomean 5.108µ 4.995µ -2.20% │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ B/op │ B/op vs base │ Bulk/n=10-2 1.031Ki ± 0% 1.016Ki ± 0% -1.52% (p=0.000 n=15) Bulk/n=100-2 14.03Ki ± 0% 10.77Ki ± 0% -23.27% (p=0.000 n=15) Bulk/n=1000-2 69.28Ki ± 0% 69.27Ki ± 0% -0.02% (p=0.000 n=15) Bulk/n=10000-2 1.083Mi ± 0% 1.083Mi ± 0% -0.00% (p=0.000 n=15) Bulk/n=100000-2 14.08Mi ± 0% 10.83Mi ± 0% -23.08% (p=0.000 n=15) RangeSearch/n=10-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=100-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=1000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=10000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=100000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ geomean ² -5.28% ² ¹ all samples are equal ² summaries must be >0 to compute geomean │ /tmp/tmp.9ynJa1Wrvi │ /tmp/tmp.fiLFr6Ksvk │ │ allocs/op │ allocs/op vs base │ Bulk/n=10-2 6.000 ± 0% 5.000 ± 0% -16.67% (p=0.000 n=15) Bulk/n=100-2 70.00 ± 0% 53.00 ± 0% -24.29% (p=0.000 n=15) Bulk/n=1000-2 342.0 ± 0% 341.0 ± 0% -0.29% (p=0.000 n=15) Bulk/n=10000-2 5.462k ± 0% 5.461k ± 0% -0.02% (p=0.000 n=15) Bulk/n=100000-2 71.00k ± 0% 54.61k ± 0% -23.08% (p=0.000 n=15) RangeSearch/n=10-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=100-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=1000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=10000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ RangeSearch/n=100000-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ¹ geomean ² -7.00% ² ¹ all samples are equal ² summaries must be >0 to compute geomean ```
peterstace commented 1 year ago

Thanks for reviewing! I really appreciate it 😁