GEOS' STRtree type is a "bulk only" r-tree, disallowing entries to be added or deleted after the first query to the tree.
Simplefeatures itself doesn't use the Insert or Delete methods.
The Insert and Delete methods are very complicated.
The Insert and Delete methods are much slower than the equivalent bulk-load operation.
The presence of the Insert and Delete methods add extra constraints to the tree structure, that make it difficult to modify and improve the bulk-loading algorithms.
There already exists other very high quality r-tree implementations that can perform insert and delete, which gives existing users of the simplefeatures Insert and Delete methods a different package to migrate to if needed. For example, https://github.com/tidwall/rtree.
Description
There are a few reasons why these are removed:
GEOS'
STRtree
type is a "bulk only" r-tree, disallowing entries to be added or deleted after the first query to the tree.Simplefeatures itself doesn't use the
Insert
orDelete
methods.The
Insert
andDelete
methods are very complicated.The
Insert
andDelete
methods are much slower than the equivalent bulk-load operation.The presence of the
Insert
andDelete
methods add extra constraints to the tree structure, that make it difficult to modify and improve the bulk-loading algorithms.There already exists other very high quality r-tree implementations that can perform insert and delete, which gives existing users of the simplefeatures
Insert
andDelete
methods a different package to migrate to if needed. For example,https://github.com/tidwall/rtree
.Check List
Have you:
Added unit tests? N/A
Add cmprefimpl tests? (if appropriate?) N/A
Updated release notes? (if appropriate?) Yes.
Related Issue
Benchmarks
Click to open
``` goos: linux goarch: arm64 pkg: github.com/peterstace/simplefeatures/geom │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ sec/op │ sec/op vs base │ LineEnvelope/0-2 2.155n ± 5% 2.140n ± 2% ~ (p=0.418 n=15) LineEnvelope/1-2 2.130n ± 1% 2.119n ± 1% ~ (p=0.615 n=15) LineEnvelope/2-2 2.094n ± 1% 2.093n ± 0% ~ (p=0.587 n=15) LineEnvelope/3-2 2.100n ± 0% 2.100n ± 0% ~ (p=0.505 n=15) MarshalWKB/polygon/n=10-2 92.51n ± 4% 92.77n ± 1% ~ (p=0.806 n=15) MarshalWKB/polygon/n=100-2 236.6n ± 8% 236.1n ± 2% ~ (p=0.870 n=15) MarshalWKB/polygon/n=1000-2 1.611µ ± 5% 1.651µ ± 9% ~ (p=0.281 n=15) MarshalWKB/polygon/n=10000-2 37.67µ ± 28% 41.90µ ± 19% ~ (p=0.713 n=15) UnmarshalWKB/polygon/n=10-2 156.9n ± 4% 157.8n ± 3% ~ (p=0.430 n=15) UnmarshalWKB/polygon/n=100-2 303.5n ± 4% 297.4n ± 5% ~ (p=0.705 n=15) UnmarshalWKB/polygon/n=1000-2 1.836µ ± 8% 1.823µ ± 16% ~ (p=0.926 n=15) UnmarshalWKB/polygon/n=10000-2 38.00µ ± 18% 45.16µ ± 23% ~ (p=0.250 n=15) IntersectsLineStringWithLineString/n=10-2 782.6n ± 1% 731.0n ± 1% -6.59% (p=0.000 n=15) IntersectsLineStringWithLineString/n=100-2 11.87µ ± 1% 11.43µ ± 1% -3.74% (p=0.000 n=15) IntersectsLineStringWithLineString/n=1000-2 143.4µ ± 8% 139.5µ ± 14% ~ (p=0.967 n=15) IntersectsLineStringWithLineString/n=10000-2 3.420m ± 15% 2.086m ± 8% -39.01% (p=0.000 n=15) IntersectsMultiPointWithMultiPoint/n=20-2 555.1n ± 4% 554.3n ± 0% ~ (p=0.245 n=15) IntersectsMultiPointWithMultiPoint/n=200-2 7.541µ ± 0% 7.511µ ± 0% ~ (p=0.066 n=15) IntersectsMultiPointWithMultiPoint/n=2000-2 71.13µ ± 0% 71.32µ ± 0% +0.27% (p=0.037 n=15) IntersectsMultiPointWithMultiPoint/n=20000-2 780.3µ ± 2% 780.4µ ± 0% ~ (p=0.567 n=15) PolygonSingleRingValidation/n=10-2 1.294µ ± 2% 1.263µ ± 1% -2.40% (p=0.000 n=15) PolygonSingleRingValidation/n=100-2 19.17µ ± 2% 18.82µ ± 0% -1.85% (p=0.000 n=15) PolygonSingleRingValidation/n=1000-2 276.3µ ± 1% 273.4µ ± 1% -1.07% (p=0.001 n=15) PolygonSingleRingValidation/n=10000-2 4.563m ± 8% 3.381m ± 1% -25.90% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4-2 3.663µ ± 2% 3.621µ ± 0% -1.15% (p=0.001 n=15) PolygonMultipleRingsValidation/n=36-2 30.66µ ± 1% 30.37µ ± 1% -0.95% (p=0.008 n=15) PolygonMultipleRingsValidation/n=400-2 405.2µ ± 1% 400.9µ ± 1% -1.06% (p=0.026 n=15) PolygonMultipleRingsValidation/n=4096-2 5.180m ± 1% 5.007m ± 1% -3.34% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10-2 6.169µ ± 3% 6.006µ ± 0% -2.64% (p=0.000 n=15) PolygonZigZagRingsValidation/n=100-2 74.01µ ± 4% 71.88µ ± 0% -2.88% (p=0.000 n=15) PolygonZigZagRingsValidation/n=1000-2 972.9µ ± 1% 990.5µ ± 3% +1.80% (p=0.009 n=15) PolygonZigZagRingsValidation/n=10000-2 16.01m ± 13% 12.56m ± 1% -21.60% (p=0.000 n=15) PolygonAnnulusValidation/n=10-2 1.975µ ± 1% 1.939µ ± 2% -1.82% (p=0.001 n=15) PolygonAnnulusValidation/n=100-2 19.12µ ± 1% 18.74µ ± 1% -1.97% (p=0.000 n=15) PolygonAnnulusValidation/n=1000-2 336.8µ ± 2% 330.7µ ± 1% -1.81% (p=0.000 n=15) PolygonAnnulusValidation/n=10000-2 4.550m ± 4% 4.257m ± 1% -6.44% (p=0.000 n=15) MultipolygonValidation/n=1-2 218.3n ± 2% 212.6n ± 1% -2.61% (p=0.001 n=15) MultipolygonValidation/n=4-2 488.8n ± 2% 483.5n ± 2% ~ (p=0.072 n=15) MultipolygonValidation/n=16-2 2.139µ ± 1% 2.094µ ± 2% -2.10% (p=0.000 n=15) MultipolygonValidation/n=64-2 10.34µ ± 2% 10.06µ ± 1% -2.68% (p=0.003 n=15) MultipolygonValidation/n=256-2 55.25µ ± 1% 56.37µ ± 1% ~ (p=0.061 n=15) MultipolygonValidation/n=1024-2 342.9µ ± 3% 343.1µ ± 4% ~ (p=0.389 n=15) MultiPolygonTwoCircles/n=10-2 1.941µ ± 2% 1.855µ ± 1% -4.43% (p=0.000 n=15) MultiPolygonTwoCircles/n=100-2 23.14µ ± 8% 22.14µ ± 1% -4.33% (p=0.000 n=15) MultiPolygonTwoCircles/n=1000-2 318.0µ ± 8% 270.2µ ± 3% -15.03% (p=0.000 n=15) MultiPolygonTwoCircles/n=10000-2 5.017m ± 9% 4.668m ± 6% -6.96% (p=0.001 n=15) MultiPolygonMultipleTouchingPoints/n=1-2 2.612µ ± 1% 2.555µ ± 1% -2.18% (p=0.002 n=15) MultiPolygonMultipleTouchingPoints/n=10-2 20.93µ ± 4% 20.69µ ± 3% ~ (p=0.056 n=15) MultiPolygonMultipleTouchingPoints/n=100-2 264.9µ ± 3% 259.7µ ± 1% -1.95% (p=0.001 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 3.289m ± 6% 3.307m ± 3% ~ (p=0.539 n=15) WKTParsing/point-2 1.122µ ± 4% 1.135µ ± 1% ~ (p=0.245 n=15) DistancePolygonToPolygonOrdering/n=100_swap=false-2 26.69µ ± 5% 26.34µ ± 2% -1.33% (p=0.005 n=15) DistancePolygonToPolygonOrdering/n=100_swap=true-2 26.75µ ± 3% 26.23µ ± 1% -1.93% (p=0.002 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=false-2 466.3µ ± 1% 466.1µ ± 2% ~ (p=0.838 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=true-2 465.4µ ± 1% 464.8µ ± 2% ~ (p=0.412 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 3.244µ ± 2% 3.204µ ± 0% -1.23% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 3.244µ ± 3% 3.197µ ± 1% -1.45% (p=0.002 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 34.84µ ± 3% 34.36µ ± 3% -1.38% (p=0.023 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 34.81µ ± 4% 34.16µ ± 0% -1.88% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=100-2 27.04µ ± 8% 25.95µ ± 1% -4.03% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=1000-2 330.6µ ± 6% 321.6µ ± 1% -2.73% (p=0.000 n=15) ForceCWandForceCCW/0-2 16.10n ± 4% 16.07n ± 1% ~ (p=0.236 n=15) ForceCWandForceCCW/0#01-2 103.0n ± 3% 102.7n ± 1% ~ (p=0.461 n=15) ForceCWandForceCCW/1-2 16.25n ± 1% 16.21n ± 0% ~ (p=0.139 n=15) ForceCWandForceCCW/1#01-2 103.0n ± 3% 103.6n ± 3% ~ (p=0.271 n=15) ForceCWandForceCCW/2-2 29.79n ± 434% 29.69n ± 1% ~ (p=0.051 n=15) ForceCWandForceCCW/2#01-2 158.8n ± 81% 159.0n ± 4% ~ (p=0.395 n=15) ForceCWandForceCCW/3-2 30.02n ± 1% 29.74n ± 1% -0.93% (p=0.010 n=15) ForceCWandForceCCW/3#01-2 160.2n ± 6% 159.4n ± 4% ~ (p=0.367 n=15) ForceCWandForceCCW/4-2 43.48n ± 7% 43.29n ± 1% ~ (p=0.057 n=15) ForceCWandForceCCW/4#01-2 245.1n ± 4% 245.7n ± 2% ~ (p=0.705 n=15) ForceCWandForceCCW/5-2 43.49n ± 2% 43.30n ± 2% ~ (p=0.051 n=15) ForceCWandForceCCW/5#01-2 246.6n ± 4% 246.3n ± 3% ~ (p=0.560 n=15) ForceCWandForceCCW/6-2 62.94n ± 1% 62.53n ± 1% -0.65% (p=0.012 n=15) ForceCWandForceCCW/6#01-2 403.6n ± 3% 394.0n ± 1% ~ (p=0.091 n=15) EnvelopeTransformXY-2 140.0n ± 3% 139.1n ± 0% -0.64% (p=0.000 n=15) WKBParse/0-2 422.5n ± 2% 421.0n ± 1% ~ (p=0.237 n=15) WKBParse/1-2 418.8n ± 2% 416.7n ± 0% ~ (p=0.083 n=15) WKBParse/2-2 483.9n ± 3% 482.6n ± 1% ~ (p=0.129 n=15) WKBParse/3-2 483.5n ± 4% 484.7n ± 2% ~ (p=0.588 n=15) WKBParse/4-2 577.6n ± 2% 569.4n ± 0% ~ (p=0.281 n=15) WKBParse/5-2 424.3n ± 3% 424.6n ± 0% ~ (p=0.645 n=15) WKBParse/6-2 499.0n ± 1% 496.2n ± 0% -0.56% (p=0.010 n=15) WKBParse/7-2 486.5n ± 1% 488.5n ± 1% ~ (p=0.237 n=15) WKBParse/8-2 568.7n ± 2% 566.6n ± 0% ~ (p=0.087 n=15) WKBParse/9-2 310.7n ± 2% 310.2n ± 0% ~ (p=0.309 n=15) WKBParse/10-2 311.7n ± 2% 311.2n ± 1% ~ (p=0.190 n=15) WKBParse/11-2 312.1n ± 1% 311.2n ± 1% ~ (p=0.254 n=15) WKBParse/12-2 308.8n ± 1% 309.2n ± 1% ~ (p=0.430 n=15) WKBParse/13-2 595.3n ± 1% 596.5n ± 2% ~ (p=0.430 n=15) WKBParse/14-2 703.2n ± 1% 703.6n ± 1% ~ (p=0.506 n=15) WKBParse/15-2 703.9n ± 0% 702.0n ± 5% ~ (p=0.894 n=15) WKBParse/16-2 849.8n ± 1% 850.7n ± 1% ~ (p=0.870 n=15) WKBParse/17-2 701.3n ± 1% 701.0n ± 1% ~ (p=0.559 n=15) WKBParse/18-2 896.8n ± 3% 896.2n ± 2% ~ (p=0.645 n=15) WKBParse/19-2 908.8n ± 3% 908.5n ± 0% ~ (p=0.546 n=15) WKBParse/20-2 1.101µ ± 2% 1.104µ ± 0% ~ (p=0.846 n=15) WKBParse/21-2 301.1n ± 1% 301.3n ± 0% ~ (p=0.573 n=15) WKBParse/22-2 302.9n ± 0% 302.6n ± 0% ~ (p=0.814 n=15) WKBParse/23-2 302.1n ± 1% 303.1n ± 0% ~ (p=0.519 n=15) WKBParse/24-2 298.4n ± 1% 299.0n ± 0% ~ (p=0.170 n=15) WKBParse/25-2 1.564µ ± 0% 1.563µ ± 0% ~ (p=0.492 n=15) WKBParse/26-2 1.979µ ± 1% 1.983µ ± 1% ~ (p=0.894 n=15) WKBParse/27-2 1.979µ ± 0% 1.978µ ± 0% ~ (p=0.894 n=15) WKBParse/28-2 2.476µ ± 2% 2.470µ ± 0% ~ (p=0.170 n=15) WKBParse/29-2 300.3n ± 1% 300.4n ± 0% ~ (p=0.894 n=15) WKBParse/30-2 302.5n ± 1% 302.6n ± 1% ~ (p=0.602 n=15) WKBParse/31-2 303.2n ± 1% 302.0n ± 0% ~ (p=0.350 n=15) WKBParse/32-2 297.9n ± 2% 297.9n ± 0% ~ (p=0.705 n=15) WKBParse/33-2 572.2n ± 0% 570.4n ± 1% ~ (p=0.690 n=15) WKBParse/34-2 651.2n ± 0% 652.8n ± 1% +0.25% (p=0.049 n=15) WKBParse/35-2 650.2n ± 1% 654.3n ± 1% ~ (p=0.395 n=15) WKBParse/36-2 724.6n ± 1% 725.1n ± 0% ~ (p=0.690 n=15) WKBParse/37-2 819.6n ± 1% 820.1n ± 0% ~ (p=0.351 n=15) WKBParse/38-2 971.5n ± 1% 980.8n ± 2% ~ (p=0.113 n=15) WKBParse/39-2 968.7n ± 1% 971.5n ± 1% ~ (p=0.202 n=15) WKBParse/40-2 1.079µ ± 1% 1.085µ ± 0% +0.56% (p=0.033 n=15) WKBParse/41-2 301.9n ± 0% 301.9n ± 2% ~ (p=0.862 n=15) WKBParse/42-2 304.8n ± 0% 304.3n ± 1% ~ (p=0.418 n=15) WKBParse/43-2 303.0n ± 0% 303.4n ± 0% ~ (p=0.532 n=15) WKBParse/44-2 298.9n ± 0% 298.6n ± 0% ~ (p=0.228 n=15) WKBParse/45-2 888.9n ± 2% 886.9n ± 0% ~ (p=0.113 n=15) WKBParse/46-2 1.079µ ± 1% 1.076µ ± 0% ~ (p=0.087 n=15) WKBParse/47-2 1.087µ ± 1% 1.084µ ± 0% ~ (p=0.068 n=15) WKBParse/48-2 1.242µ ± 0% 1.240µ ± 0% ~ (p=0.307 n=15) WKBParse/49-2 1.273µ ± 0% 1.273µ ± 1% ~ (p=0.992 n=15) WKBParse/50-2 1.607µ ± 1% 1.607µ ± 1% ~ (p=0.910 n=15) WKBParse/51-2 1.603µ ± 1% 1.607µ ± 1% ~ (p=0.767 n=15) WKBParse/52-2 1.874µ ± 0% 1.873µ ± 1% ~ (p=0.862 n=15) WKBParse/53-2 301.8n ± 0% 301.9n ± 1% ~ (p=0.588 n=15) WKBParse/54-2 303.8n ± 0% 303.7n ± 0% ~ (p=0.798 n=15) WKBParse/55-2 303.2n ± 1% 304.0n ± 0% ~ (p=0.720 n=15) WKBParse/56-2 298.8n ± 0% 299.3n ± 2% ~ (p=0.309 n=15) WKBParse/57-2 1.927µ ± 2% 1.930µ ± 1% ~ (p=0.660 n=15) WKBParse/58-2 2.361µ ± 0% 2.369µ ± 0% ~ (p=0.244 n=15) WKBParse/59-2 2.371µ ± 2% 2.374µ ± 0% ~ (p=0.505 n=15) WKBParse/60-2 2.872µ ± 1% 2.871µ ± 1% ~ (p=0.736 n=15) WKBParse/61-2 301.2n ± 1% 300.5n ± 1% ~ (p=0.134 n=15) WKBParse/62-2 304.0n ± 1% 302.6n ± 0% ~ (p=0.072 n=15) WKBParse/63-2 303.5n ± 1% 302.2n ± 0% -0.43% (p=0.012 n=15) WKBParse/64-2 298.7n ± 1% 297.7n ± 0% -0.33% (p=0.044 n=15) WKBParse/65-2 875.9n ± 2% 875.7n ± 0% ~ (p=0.735 n=15) WKBParse/66-2 1.020µ ± 2% 1.018µ ± 0% ~ (p=0.075 n=15) WKBParse/67-2 1.033µ ± 5% 1.030µ ± 1% ~ (p=0.190 n=15) WKBParse/68-2 1.144µ ± 2% 1.138µ ± 0% -0.52% (p=0.009 n=15) geomean 1.949µ 1.924µ -1.28% │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ 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 2.359Ki ± 0% 1.969Ki ± 0% -16.56% (p=0.000 n=15) IntersectsLineStringWithLineString/n=100-2 29.67Ki ± 0% 24.28Ki ± 0% -18.17% (p=0.000 n=15) IntersectsLineStringWithLineString/n=1000-2 199.9Ki ± 0% 173.3Ki ± 0% -13.33% (p=0.000 n=15) IntersectsLineStringWithLineString/n=10000-2 2.508Mi ± 0% 2.091Mi ± 0% -16.61% (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.992Ki ± 0% 2.993Ki ± 0% ~ (p=0.154 n=15) IntersectsMultiPointWithMultiPoint/n=2000-2 48.13Ki ± 0% 48.13Ki ± 0% ~ (p=0.302 n=15) IntersectsMultiPointWithMultiPoint/n=20000-2 330.7Ki ± 0% 330.7Ki ± 0% ~ (p=0.455 n=15) PolygonSingleRingValidation/n=10-2 2.234Ki ± 0% 1.766Ki ± 0% -20.98% (p=0.000 n=15) PolygonSingleRingValidation/n=100-2 23.83Ki ± 0% 18.36Ki ± 0% -22.95% (p=0.000 n=15) PolygonSingleRingValidation/n=1000-2 136.3Ki ± 0% 109.6Ki ± 0% -19.60% (p=0.000 n=15) PolygonSingleRingValidation/n=10000-2 1.883Mi ± 0% 1.466Mi ± 0% -22.13% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4-2 6.453Ki ± 0% 5.516Ki ± 0% -14.53% (p=0.000 n=15) PolygonMultipleRingsValidation/n=36-2 52.00Ki ± 0% 44.66Ki ± 0% -14.12% (p=0.000 n=15) PolygonMultipleRingsValidation/n=400-2 583.4Ki ± 0% 499.2Ki ± 0% -14.44% (p=0.000 n=15) PolygonMultipleRingsValidation/n=4096-2 5.993Mi ± 0% 5.107Mi ± 0% -14.78% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10-2 9.391Ki ± 0% 7.906Ki ± 0% -15.81% (p=0.000 n=15) PolygonZigZagRingsValidation/n=100-2 85.98Ki ± 0% 69.50Ki ± 0% -19.17% (p=0.000 n=15) PolygonZigZagRingsValidation/n=1000-2 538.0Ki ± 0% 457.8Ki ± 0% -14.91% (p=0.000 n=15) PolygonZigZagRingsValidation/n=10000-2 6.900Mi ± 0% 5.650Mi ± 0% -18.12% (p=0.000 n=15) PolygonAnnulusValidation/n=10-2 4.000Ki ± 0% 3.219Ki ± 0% -19.53% (p=0.000 n=15) PolygonAnnulusValidation/n=100-2 27.77Ki ± 0% 22.77Ki ± 0% -18.01% (p=0.000 n=15) PolygonAnnulusValidation/n=1000-2 370.1Ki ± 0% 293.0Ki ± 0% -20.85% (p=0.000 n=15) PolygonAnnulusValidation/n=10000-2 3.711Mi ± 0% 2.930Mi ± 0% -21.05% (p=0.000 n=15) MultipolygonValidation/n=1-2 481.0 ± 0% 401.0 ± 0% -16.63% (p=0.000 n=15) MultipolygonValidation/n=4-2 980.0 ± 0% 900.0 ± 0% -8.16% (p=0.000 n=15) MultipolygonValidation/n=16-2 4.062Ki ± 0% 3.672Ki ± 0% -9.62% (p=0.000 n=15) MultipolygonValidation/n=64-2 16.61Ki ± 0% 14.97Ki ± 0% -9.88% (p=0.000 n=15) MultipolygonValidation/n=256-2 66.17Ki ± 0% 59.53Ki ± 0% -10.04% (p=0.000 n=15) MultipolygonValidation/n=1024-2 264.9Ki ± 0% 238.3Ki ± 0% -10.06% (p=0.000 n=15) MultiPolygonTwoCircles/n=10-2 5.033Ki ± 0% 4.174Ki ± 0% -17.07% (p=0.000 n=15) MultiPolygonTwoCircles/n=100-2 53.85Ki ± 0% 42.99Ki ± 0% -20.17% (p=0.000 n=15) MultiPolygonTwoCircles/n=1000-2 336.6Ki ± 0% 283.2Ki ± 0% -15.85% (p=0.000 n=15) MultiPolygonTwoCircles/n=10000-2 4.391Mi ± 0% 3.558Mi ± 0% -18.98% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=1-2 4.064Ki ± 0% 3.518Ki ± 0% -13.46% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=10-2 23.33Ki ± 0% 20.76Ki ± 0% -11.05% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=100-2 177.8Ki ± 0% 164.4Ki ± 0% -7.52% (p=0.000 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 2.058Mi ± 0% 1.856Mi ± 0% -9.79% (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 39.72Ki ± 0% 33.94Ki ± 0% -14.56% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=100_swap=true-2 39.72Ki ± 0% 33.94Ki ± 0% -14.56% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=false-2 360.4Ki ± 0% 328.4Ki ± 0% -8.89% (p=0.000 n=15) DistancePolygonToPolygonOrdering/n=1000_swap=true-2 360.4Ki ± 0% 328.4Ki ± 0% -8.89% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 5.391Ki ± 0% 5.000Ki ± 0% -7.25% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 5.391Ki ± 0% 5.000Ki ± 0% -7.25% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 58.68Ki ± 0% 53.29Ki ± 0% -9.19% (p=0.000 n=15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 58.68Ki ± 0% 53.29Ki ± 0% -9.19% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=100-2 57.80Ki ± 0% 44.59Ki ± 0% -22.84% (p=0.000 n=15) MultiLineStringIsSimpleManyLineStrings/n=1000-2 479.7Ki ± 0% 374.9Ki ± 0% -21.84% (p=0.000 n=15) ForceCWandForceCCW/0-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/0#01-2 144.0 ± 0% 144.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/1-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/1#01-2 144.0 ± 0% 144.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/2-2 0.000 ± ? 0.000 ± 0% ~ (p=0.390 n=15) ForceCWandForceCCW/2#01-2 256.0 ± ? 256.0 ± 0% ~ (p=0.390 n=15) ForceCWandForceCCW/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/3#01-2 256.0 ± 0% 256.0 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/4-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.598 n=15) ForceCWandForceCCW/4#01-2 416.0 ± 0% 416.0 ± 0% ~ (p=0.598 n=15) ForceCWandForceCCW/5-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/5#01-2 416.0 ± 0% 416.0 ± 0% ~ (p=0.483 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 ² -4.84% ² ¹ all samples are equal ² summaries must be >0 to compute geomean │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ 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% 9.000 ± 0% ~ (p=1.000 n=15) ¹ IntersectsLineStringWithLineString/n=100-2 73.00 ± 0% 73.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectsLineStringWithLineString/n=1000-2 345.0 ± 0% 345.0 ± 0% ~ (p=1.000 n=15) ¹ IntersectsLineStringWithLineString/n=10000-2 5.465k ± 0% 5.465k ± 0% ~ (p=1.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% 12.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonSingleRingValidation/n=100-2 76.00 ± 0% 76.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonSingleRingValidation/n=1000-2 348.0 ± 0% 348.0 ± 0% ~ (p=1.000 n=15) ¹ PolygonSingleRingValidation/n=10000-2 5.468k ± 0% 5.468k ± 0% ~ (p=1.000 n=15) ¹ PolygonMultipleRingsValidation/n=4-2 42.00 ± 0% 42.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonMultipleRingsValidation/n=36-2 316.0 ± 0% 316.0 ± 0% ~ (p=1.000 n=15) ¹ PolygonMultipleRingsValidation/n=400-2 3.484k ± 0% 3.484k ± 0% ~ (p=1.000 n=15) ¹ PolygonMultipleRingsValidation/n=4096-2 36.19k ± 0% 36.19k ± 0% ~ (p=1.000 n=15) ¹ PolygonZigZagRingsValidation/n=10-2 41.00 ± 0% 41.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonZigZagRingsValidation/n=100-2 233.0 ± 0% 233.0 ± 0% ~ (p=1.000 n=15) ¹ PolygonZigZagRingsValidation/n=1000-2 1.049k ± 0% 1.049k ± 0% ~ (p=1.000 n=15) ¹ PolygonZigZagRingsValidation/n=10000-2 16.41k ± 0% 16.41k ± 0% ~ (p=1.000 n=15) ¹ PolygonAnnulusValidation/n=10-2 22.00 ± 0% 22.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonAnnulusValidation/n=100-2 76.00 ± 0% 76.00 ± 0% ~ (p=1.000 n=15) ¹ PolygonAnnulusValidation/n=1000-2 1.000k ± 0% 1.000k ± 0% ~ (p=1.000 n=15) ¹ PolygonAnnulusValidation/n=10000-2 10.25k ± 0% 10.25k ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=1-2 8.000 ± 0% 8.000 ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=4-2 11.00 ± 0% 11.00 ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=16-2 27.00 ± 0% 27.00 ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=64-2 91.00 ± 0% 91.00 ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=256-2 347.0 ± 0% 347.0 ± 0% ~ (p=1.000 n=15) ¹ MultipolygonValidation/n=1024-2 1.371k ± 0% 1.371k ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonTwoCircles/n=10-2 29.00 ± 0% 29.00 ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonTwoCircles/n=100-2 157.0 ± 0% 157.0 ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonTwoCircles/n=1000-2 701.0 ± 0% 701.0 ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonTwoCircles/n=10000-2 10.94k ± 0% 10.94k ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonMultipleTouchingPoints/n=1-2 51.00 ± 0% 51.00 ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonMultipleTouchingPoints/n=10-2 298.0 ± 0% 298.0 ± 0% ~ (p=1.000 n=15) ¹ MultiPolygonMultipleTouchingPoints/n=100-2 2.614k ± 0% 2.614k ± 0% ~ (p=0.700 n=15) MultiPolygonMultipleTouchingPoints/n=1000-2 26.73k ± 0% 26.73k ± 0% ~ (p=0.289 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% 234.0 ± 0% ~ (p=1.000 n=15) ¹ DistancePolygonToPolygonOrdering/n=100_swap=true-2 234.0 ± 0% 234.0 ± 0% ~ (p=1.000 n=15) ¹ DistancePolygonToPolygonOrdering/n=1000_swap=false-2 2.104k ± 0% 2.104k ± 0% ~ (p=1.000 n=15) ¹ DistancePolygonToPolygonOrdering/n=1000_swap=true-2 2.104k ± 0% 2.104k ± 0% ~ (p=1.000 n=15) ¹ IntersectionPolygonWithPolygonOrdering/n=100_swap=false-2 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionPolygonWithPolygonOrdering/n=100_swap=true-2 13.00 ± 0% 13.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-2 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=15) ¹ IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-2 77.00 ± 0% 77.00 ± 0% ~ (p=1.000 n=15) ¹ MultiLineStringIsSimpleManyLineStrings/n=100-2 371.0 ± 0% 371.0 ± 0% ~ (p=1.000 n=15) ¹ MultiLineStringIsSimpleManyLineStrings/n=1000-2 3.343k ± 0% 3.343k ± 0% ~ (p=1.000 n=15) ¹ ForceCWandForceCCW/0-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/0#01-2 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/1-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/1#01-2 3.000 ± 0% 3.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/2-2 0.000 ± ? 0.000 ± 0% ~ (p=0.390 n=15) ForceCWandForceCCW/2#01-2 4.000 ± ? 4.000 ± 0% ~ (p=0.390 n=15) ForceCWandForceCCW/3-2 0.000 ± 0% 0.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/3#01-2 4.000 ± 0% 4.000 ± 0% ~ (p=1.000 n=15) ForceCWandForceCCW/4-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.598 n=15) ForceCWandForceCCW/4#01-2 7.000 ± 0% 7.000 ± 0% ~ (p=0.598 n=15) ForceCWandForceCCW/5-2 0.000 ± 0% 0.000 ± 0% ~ (p=0.483 n=15) ForceCWandForceCCW/5#01-2 7.000 ± 0% 7.000 ± 0% ~ (p=0.483 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 ² -0.00% ² ¹ all samples are equal ² summaries must be >0 to compute geomean pkg: github.com/peterstace/simplefeatures/geos │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ sec/op │ sec/op vs base │ IntersectionWithoutValidation/n=10-2 13.35µ ± 3% 13.36µ ± 1% ~ (p=0.383 n=15) IntersectionWithoutValidation/n=100-2 29.70µ ± 3% 28.84µ ± 1% -2.91% (p=0.001 n=15) IntersectionWithoutValidation/n=1000-2 150.6µ ± 3% 148.4µ ± 1% ~ (p=0.137 n=15) IntersectionWithoutValidation/n=10000-2 1.398m ± 15% 1.393m ± 1% ~ (p=0.345 n=15) NoOp/n=10-2 2.225µ ± 4% 2.233µ ± 3% ~ (p=0.560 n=15) NoOp/n=100-2 5.788µ ± 1% 5.804µ ± 1% ~ (p=0.959 n=15) NoOp/n=1000-2 39.83µ ± 5% 39.89µ ± 1% ~ (p=0.389 n=15) NoOp/n=10000-2 463.1µ ± 6% 466.8µ ± 4% ~ (p=0.838 n=15) geomean 45.94µ 45.76µ -0.38% │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ 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.800 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=1.000 n=15) ¹ geomean 20.31Ki 20.31Ki +0.00% ¹ all samples are equal │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ 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.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ sec/op │ sec/op vs base │ LineStringIsSimpleCircle/n=10-2 1.069µ ± 4% 1.040µ ± 0% -2.71% (p=0.000 n=15) LineStringIsSimpleCircle/n=100-2 16.92µ ± 4% 16.54µ ± 1% -2.26% (p=0.000 n=15) LineStringIsSimpleCircle/n=1000-2 257.1µ ± 1% 253.6µ ± 1% -1.38% (p=0.009 n=15) LineStringIsSimpleCircle/n=10000-2 3.803m ± 11% 4.193m ± 10% +10.26% (p=0.004 n=15) LineStringIsSimpleZigZag/10-2 957.1n ± 4% 928.2n ± 0% -3.02% (p=0.000 n=15) LineStringIsSimpleZigZag/100-2 16.78µ ± 1% 16.41µ ± 0% -2.19% (p=0.000 n=15) LineStringIsSimpleZigZag/1000-2 237.5µ ± 3% 239.1µ ± 0% ~ (p=0.653 n=15) LineStringIsSimpleZigZag/10000-2 4.045m ± 11% 4.414m ± 7% +9.12% (p=0.045 n=15) SetOperation/n=4/Go_Intersection-2 18.12µ ± 3% 18.11µ ± 1% ~ (p=0.454 n=15) SetOperation/n=4/Go_Difference-2 18.78µ ± 6% 18.74µ ± 1% ~ (p=0.054 n=15) SetOperation/n=4/Go_SymmetricDifference-2 24.94µ ± 5% 24.70µ ± 1% -0.98% (p=0.000 n=15) SetOperation/n=4/Go_Union-2 19.60µ ± 3% 19.45µ ± 1% -0.72% (p=0.018 n=15) SetOperation/n=4/GEOS_Intersection-2 11.48µ ± 2% 11.50µ ± 1% ~ (p=0.645 n=15) SetOperation/n=4/GEOS_Difference-2 11.94µ ± 3% 11.90µ ± 1% ~ (p=0.616 n=15) SetOperation/n=4/GEOS_SymmetricDifference-2 18.61µ ± 1% 18.47µ ± 0% ~ (p=0.072 n=15) SetOperation/n=4/GEOS_Union-2 12.07µ ± 1% 12.02µ ± 2% ~ (p=0.616 n=15) SetOperation/n=8/Go_Intersection-2 23.86µ ± 1% 23.66µ ± 1% -0.84% (p=0.003 n=15) SetOperation/n=8/Go_Difference-2 24.22µ ± 3% 24.05µ ± 2% ~ (p=0.080 n=15) SetOperation/n=8/Go_SymmetricDifference-2 31.95µ ± 3% 31.42µ ± 2% -1.66% (p=0.033 n=15) SetOperation/n=8/Go_Union-2 24.81µ ± 3% 24.64µ ± 1% -0.71% (p=0.049 n=15) SetOperation/n=8/GEOS_Intersection-2 15.31µ ± 2% 15.11µ ± 1% ~ (p=0.174 n=15) SetOperation/n=8/GEOS_Difference-2 15.09µ ± 2% 15.01µ ± 1% ~ (p=0.164 n=15) SetOperation/n=8/GEOS_SymmetricDifference-2 22.96µ ± 2% 22.65µ ± 1% -1.36% (p=0.003 n=15) SetOperation/n=8/GEOS_Union-2 14.74µ ± 3% 14.60µ ± 2% -0.98% (p=0.045 n=15) SetOperation/n=16/Go_Intersection-2 33.95µ ± 3% 33.69µ ± 1% -0.75% (p=0.023 n=15) SetOperation/n=16/Go_Difference-2 35.41µ ± 3% 35.24µ ± 1% -0.49% (p=0.033 n=15) SetOperation/n=16/Go_SymmetricDifference-2 48.12µ ± 1% 47.49µ ± 2% -1.31% (p=0.005 n=15) SetOperation/n=16/Go_Union-2 37.20µ ± 3% 36.65µ ± 0% -1.49% (p=0.004 n=15) SetOperation/n=16/GEOS_Intersection-2 17.03µ ± 5% 17.00µ ± 1% ~ (p=0.546 n=15) SetOperation/n=16/GEOS_Difference-2 18.39µ ± 3% 18.15µ ± 1% ~ (p=0.081 n=15) SetOperation/n=16/GEOS_SymmetricDifference-2 31.00µ ± 2% 30.23µ ± 1% -2.50% (p=0.000 n=15) SetOperation/n=16/GEOS_Union-2 18.78µ ± 2% 18.67µ ± 1% ~ (p=0.285 n=15) SetOperation/n=32/Go_Intersection-2 58.80µ ± 4% 58.04µ ± 1% -1.30% (p=0.001 n=15) SetOperation/n=32/Go_Difference-2 60.73µ ± 2% 60.06µ ± 3% ~ (p=0.056 n=15) SetOperation/n=32/Go_SymmetricDifference-2 82.37µ ± 2% 80.50µ ± 2% -2.27% (p=0.000 n=15) SetOperation/n=32/Go_Union-2 62.55µ ± 4% 62.00µ ± 1% -0.88% (p=0.011 n=15) SetOperation/n=32/GEOS_Intersection-2 22.53µ ± 1% 22.40µ ± 1% ~ (p=0.436 n=15) SetOperation/n=32/GEOS_Difference-2 24.03µ ± 2% 23.60µ ± 1% -1.75% (p=0.007 n=15) SetOperation/n=32/GEOS_SymmetricDifference-2 44.14µ ± 1% 43.03µ ± 0% -2.51% (p=0.000 n=15) SetOperation/n=32/GEOS_Union-2 24.28µ ± 2% 23.96µ ± 1% ~ (p=0.074 n=15) SetOperation/n=64/Go_Intersection-2 106.3µ ± 1% 103.3µ ± 0% -2.82% (p=0.000 n=15) SetOperation/n=64/Go_Difference-2 113.2µ ± 4% 110.6µ ± 1% -2.26% (p=0.000 n=15) SetOperation/n=64/Go_SymmetricDifference-2 157.6µ ± 1% 153.3µ ± 1% -2.74% (p=0.000 n=15) SetOperation/n=64/Go_Union-2 118.9µ ± 1% 116.5µ ± 2% ~ (p=0.050 n=15) SetOperation/n=64/GEOS_Intersection-2 30.54µ ± 4% 30.42µ ± 3% ~ (p=0.281 n=15) SetOperation/n=64/GEOS_Difference-2 37.16µ ± 1% 36.50µ ± 1% -1.77% (p=0.006 n=15) SetOperation/n=64/GEOS_SymmetricDifference-2 78.19µ ± 3% 76.53µ ± 1% -2.13% (p=0.000 n=15) SetOperation/n=64/GEOS_Union-2 39.48µ ± 2% 39.09µ ± 1% -0.99% (p=0.003 n=15) SetOperation/n=128/Go_Intersection-2 241.3µ ± 1% 238.1µ ± 0% -1.34% (p=0.001 n=15) SetOperation/n=128/Go_Difference-2 253.5µ ± 2% 250.4µ ± 1% -1.20% (p=0.000 n=15) SetOperation/n=128/Go_SymmetricDifference-2 342.8µ ± 2% 337.8µ ± 0% -1.46% (p=0.000 n=15) SetOperation/n=128/Go_Union-2 264.3µ ± 3% 260.4µ ± 2% -1.47% (p=0.004 n=15) SetOperation/n=128/GEOS_Intersection-2 49.84µ ± 2% 50.13µ ± 1% ~ (p=0.443 n=15) SetOperation/n=128/GEOS_Difference-2 59.24µ ± 3% 59.02µ ± 2% ~ (p=0.285 n=15) SetOperation/n=128/GEOS_SymmetricDifference-2 143.1µ ± 2% 141.0µ ± 1% -1.46% (p=0.005 n=15) SetOperation/n=128/GEOS_Union-2 65.27µ ± 1% 64.54µ ± 1% ~ (p=0.137 n=15) SetOperation/n=256/Go_Intersection-2 479.1µ ± 1% 476.2µ ± 1% -0.60% (p=0.009 n=15) SetOperation/n=256/Go_Difference-2 516.1µ ± 1% 511.6µ ± 1% ~ (p=0.050 n=15) SetOperation/n=256/Go_SymmetricDifference-2 714.5µ ± 1% 700.7µ ± 1% -1.93% (p=0.000 n=15) SetOperation/n=256/Go_Union-2 539.0µ ± 5% 536.2µ ± 1% ~ (p=0.250 n=15) SetOperation/n=256/GEOS_Intersection-2 83.78µ ± 1% 83.64µ ± 1% ~ (p=1.000 n=15) SetOperation/n=256/GEOS_Difference-2 120.0µ ± 2% 117.4µ ± 3% -2.10% (p=0.008 n=15) SetOperation/n=256/GEOS_SymmetricDifference-2 318.3µ ± 1% 311.3µ ± 2% -2.22% (p=0.001 n=15) SetOperation/n=256/GEOS_Union-2 138.3µ ± 3% 136.5µ ± 1% -1.29% (p=0.016 n=15) SetOperation/n=512/Go_Intersection-2 947.3µ ± 4% 945.5µ ± 3% ~ (p=0.512 n=15) SetOperation/n=512/Go_Difference-2 1.170m ± 11% 1.002m ± 2% -14.34% (p=0.000 n=15) SetOperation/n=512/Go_SymmetricDifference-2 1.390m ± 3% 1.371m ± 3% -1.35% (p=0.009 n=15) SetOperation/n=512/Go_Union-2 1.142m ± 8% 1.100m ± 5% ~ (p=0.367 n=15) SetOperation/n=512/GEOS_Intersection-2 170.4µ ± 3% 168.9µ ± 1% -0.88% (p=0.004 n=15) SetOperation/n=512/GEOS_Difference-2 231.4µ ± 1% 232.1µ ± 1% ~ (p=0.935 n=15) SetOperation/n=512/GEOS_SymmetricDifference-2 638.2µ ± 0% 629.6µ ± 3% ~ (p=0.148 n=15) SetOperation/n=512/GEOS_Union-2 278.0µ ± 7% 269.9µ ± 4% -2.91% (p=0.013 n=15) SetOperation/n=1024/Go_Intersection-2 1.913m ± 0% 1.897m ± 1% -0.80% (p=0.007 n=15) SetOperation/n=1024/Go_Difference-2 2.089m ± 2% 2.052m ± 5% ~ (p=0.653 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 2.874m ± 3% 3.017m ± 6% ~ (p=0.202 n=15) SetOperation/n=1024/Go_Union-2 2.123m ± 1% 2.248m ± 9% +5.89% (p=0.002 n=15) SetOperation/n=1024/GEOS_Intersection-2 344.3µ ± 1% 340.9µ ± 2% ~ (p=0.098 n=15) SetOperation/n=1024/GEOS_Difference-2 521.8µ ± 4% 504.8µ ± 0% -3.26% (p=0.001 n=15) SetOperation/n=1024/GEOS_SymmetricDifference-2 1.423m ± 7% 1.395m ± 3% -1.96% (p=0.015 n=15) SetOperation/n=1024/GEOS_Union-2 614.2µ ± 3% 590.4µ ± 1% -3.87% (p=0.002 n=15) SetOperation/n=2048/Go_Intersection-2 3.920m ± 2% 4.603m ± 17% +17.41% (p=0.000 n=15) SetOperation/n=2048/Go_Difference-2 4.210m ± 2% 4.273m ± 3% ~ (p=0.935 n=15) SetOperation/n=2048/Go_SymmetricDifference-2 6.160m ± 5% 5.801m ± 6% -5.82% (p=0.021 n=15) SetOperation/n=2048/Go_Union-2 4.363m ± 1% 4.240m ± 0% -2.82% (p=0.000 n=15) SetOperation/n=2048/GEOS_Intersection-2 752.8µ ± 4% 736.3µ ± 1% -2.19% (p=0.000 n=15) SetOperation/n=2048/GEOS_Difference-2 1.039m ± 2% 1.029m ± 3% ~ (p=0.267 n=15) SetOperation/n=2048/GEOS_SymmetricDifference-2 2.769m ± 8% 2.724m ± 5% ~ (p=0.187 n=15) SetOperation/n=2048/GEOS_Union-2 1.197m ± 3% 1.232m ± 8% ~ (p=0.106 n=15) SetOperation/n=4096/Go_Intersection-2 8.566m ± 8% 8.900m ± 6% ~ (p=0.412 n=15) SetOperation/n=4096/Go_Difference-2 9.453m ± 11% 9.524m ± 9% ~ (p=0.285 n=15) SetOperation/n=4096/Go_SymmetricDifference-2 13.38m ± 6% 12.53m ± 4% -6.36% (p=0.016 n=15) SetOperation/n=4096/Go_Union-2 10.117m ± 6% 9.287m ± 6% -8.20% (p=0.002 n=15) SetOperation/n=4096/GEOS_Intersection-2 1.503m ± 6% 1.428m ± 1% -4.99% (p=0.033 n=15) SetOperation/n=4096/GEOS_Difference-2 2.156m ± 2% 2.198m ± 11% ~ (p=0.713 n=15) SetOperation/n=4096/GEOS_SymmetricDifference-2 6.874m ± 14% 6.648m ± 12% ~ (p=0.345 n=15) SetOperation/n=4096/GEOS_Union-2 2.962m ± 11% 2.519m ± 3% -14.95% (p=0.000 n=15) SetOperation/n=8192/Go_Intersection-2 17.87m ± 13% 18.44m ± 13% ~ (p=0.595 n=15) SetOperation/n=8192/Go_Difference-2 19.72m ± 5% 20.76m ± 8% +5.28% (p=0.013 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 28.81m ± 7% 27.13m ± 9% ~ (p=0.089 n=15) SetOperation/n=8192/Go_Union-2 20.32m ± 3% 21.66m ± 5% +6.63% (p=0.010 n=15) SetOperation/n=8192/GEOS_Intersection-2 3.309m ± 9% 3.188m ± 4% ~ (p=0.486 n=15) SetOperation/n=8192/GEOS_Difference-2 4.267m ± 6% 4.272m ± 4% ~ (p=0.713 n=15) SetOperation/n=8192/GEOS_SymmetricDifference-2 13.46m ± 18% 12.37m ± 4% -8.16% (p=0.004 n=15) SetOperation/n=8192/GEOS_Union-2 5.118m ± 7% 5.248m ± 6% ~ (p=1.000 n=15) SetOperation/n=16384/Go_Intersection-2 38.89m ± 10% 40.61m ± 33% ~ (p=0.436 n=15) SetOperation/n=16384/Go_Difference-2 54.11m ± 30% 43.32m ± 22% -19.95% (p=0.045 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 64.92m ± 34% 55.32m ± 6% -14.79% (p=0.001 n=15) SetOperation/n=16384/Go_Union-2 51.22m ± 55% 52.32m ± 15% ~ (p=0.935 n=15) SetOperation/n=16384/GEOS_Intersection-2 6.872m ± 8% 7.519m ± 9% ~ (p=0.074 n=15) SetOperation/n=16384/GEOS_Difference-2 9.419m ± 9% 9.252m ± 6% ~ (p=0.187 n=15) SetOperation/n=16384/GEOS_SymmetricDifference-2 26.85m ± 5% 26.12m ± 9% ~ (p=0.126 n=15) SetOperation/n=16384/GEOS_Union-2 11.28m ± 0% 11.14m ± 6% ~ (p=0.250 n=15) geomean 329.9µ 325.8µ -1.25% │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ B/op │ B/op vs base │ LineStringIsSimpleCircle/n=10-2 1.828Ki ± 0% 1.438Ki ± 0% -21.37% (p=0.000 n=15) LineStringIsSimpleCircle/n=100-2 23.42Ki ± 0% 18.03Ki ± 0% -23.02% (p=0.000 n=15) LineStringIsSimpleCircle/n=1000-2 135.9Ki ± 0% 109.3Ki ± 0% -19.60% (p=0.000 n=15) LineStringIsSimpleCircle/n=10000-2 1.883Mi ± 0% 1.466Mi ± 0% -22.13% (p=0.000 n=15) LineStringIsSimpleZigZag/10-2 1.797Ki ± 0% 1.406Ki ± 0% -21.74% (p=0.000 n=15) LineStringIsSimpleZigZag/100-2 23.42Ki ± 0% 18.03Ki ± 0% -23.02% (p=0.000 n=15) LineStringIsSimpleZigZag/1000-2 135.9Ki ± 0% 109.3Ki ± 0% -19.60% (p=0.000 n=15) LineStringIsSimpleZigZag/10000-2 1.883Mi ± 0% 1.466Mi ± 0% -22.13% (p=0.000 n=15) SetOperation/n=4/Go_Intersection-2 16.74Ki ± 0% 16.12Ki ± 0% -3.74% (p=0.000 n=15) SetOperation/n=4/Go_Difference-2 17.85Ki ± 0% 16.99Ki ± 0% -4.81% (p=0.000 n=15) SetOperation/n=4/Go_SymmetricDifference-2 25.93Ki ± 0% 23.98Ki ± 0% -7.53% (p=0.000 n=15) SetOperation/n=4/Go_Union-2 18.32Ki ± 0% 17.38Ki ± 0% -5.10% (p=0.000 n=15) SetOperation/n=4/GEOS_Intersection-2 1.727Ki ± 0% 1.570Ki ± 0% -9.05% (p=0.000 n=15) SetOperation/n=4/GEOS_Difference-2 2.711Ki ± 0% 2.320Ki ± 0% -14.41% (p=0.000 n=15) SetOperation/n=4/GEOS_SymmetricDifference-2 10.547Ki ± 0% 9.062Ki ± 0% -14.07% (p=0.000 n=15) SetOperation/n=4/GEOS_Union-2 3.133Ki ± 0% 2.664Ki ± 0% -14.96% (p=0.000 n=15) SetOperation/n=8/Go_Intersection-2 22.99Ki ± 0% 21.43Ki ± 0% -6.78% (p=0.000 n=15) SetOperation/n=8/Go_Difference-2 23.27Ki ± 0% 21.71Ki ± 0% -6.71% (p=0.000 n=15) SetOperation/n=8/Go_SymmetricDifference-2 33.12Ki ± 0% 30.23Ki ± 0% -8.73% (p=0.000 n=15) SetOperation/n=8/Go_Union-2 23.45Ki ± 0% 21.88Ki ± 0% -6.66% (p=0.000 n=15) SetOperation/n=8/GEOS_Intersection-2 3.258Ki ± 0% 2.789Ki ± 0% -14.39% (p=0.000 n=15) SetOperation/n=8/GEOS_Difference-2 3.414Ki ± 0% 2.945Ki ± 0% -13.73% (p=0.000 n=15) SetOperation/n=8/GEOS_SymmetricDifference-2 12.98Ki ± 0% 11.19Ki ± 0% -13.84% (p=0.000 n=15) SetOperation/n=8/GEOS_Union-2 3.539Ki ± 0% 3.070Ki ± 0% -13.25% (p=0.000 n=15) SetOperation/n=16/Go_Intersection-2 32.81Ki ± 0% 30.62Ki ± 0% -6.66% (p=0.000 n=15) SetOperation/n=16/Go_Difference-2 35.61Ki ± 0% 32.79Ki ± 0% -7.90% (p=0.000 n=15) SetOperation/n=16/Go_SymmetricDifference-2 53.88Ki ± 0% 47.86Ki ± 0% -11.16% (p=0.000 n=15) SetOperation/n=16/Go_Union-2 37.15Ki ± 0% 34.03Ki ± 0% -8.42% (p=0.000 n=15) SetOperation/n=16/GEOS_Intersection-2 3.789Ki ± 0% 3.320Ki ± 0% -12.37% (p=0.000 n=15) SetOperation/n=16/GEOS_Difference-2 6.523Ki ± 0% 5.430Ki ± 0% -16.77% (p=0.000 n=15) SetOperation/n=16/GEOS_SymmetricDifference-2 24.72Ki ± 0% 20.42Ki ± 0% -17.38% (p=0.000 n=15) SetOperation/n=16/GEOS_Union-2 8.086Ki ± 0% 6.680Ki ± 0% -17.39% (p=0.000 n=15) SetOperation/n=32/Go_Intersection-2 61.83Ki ± 0% 56.21Ki ± 0% -9.10% (p=0.000 n=15) SetOperation/n=32/Go_Difference-2 63.64Ki ± 0% 57.71Ki ± 0% -9.32% (p=0.000 n=15) SetOperation/n=32/Go_SymmetricDifference-2 91.86Ki ± 0% 80.85Ki ± 0% -11.99% (p=0.000 n=15) SetOperation/n=32/Go_Union-2 64.28Ki ± 0% 58.35Ki ± 0% -9.24% (p=0.000 n=15) SetOperation/n=32/GEOS_Intersection-2 8.648Ki ± 0% 7.242Ki ± 0% -16.26% (p=0.000 n=15) SetOperation/n=32/GEOS_Difference-2 10.461Ki ± 0% 8.742Ki ± 0% -16.43% (p=0.000 n=15) SetOperation/n=32/GEOS_SymmetricDifference-2 38.92Ki ± 0% 32.12Ki ± 0% -17.46% (p=0.000 n=15) SetOperation/n=32/GEOS_Union-2 11.211Ki ± 0% 9.492Ki ± 0% -15.33% (p=0.000 n=15) SetOperation/n=64/Go_Intersection-2 104.24Ki ± 0% 95.81Ki ± 0% -8.09% (p=0.000 n=15) SetOperation/n=64/Go_Difference-2 114.7Ki ± 0% 103.7Ki ± 0% -9.54% (p=0.000 n=15) SetOperation/n=64/Go_SymmetricDifference-2 176.5Ki ± 0% 153.0Ki ± 0% -13.33% (p=0.000 n=15) SetOperation/n=64/Go_Union-2 118.7Ki ± 0% 107.2Ki ± 0% -9.74% (p=0.000 n=15) SetOperation/n=64/GEOS_Intersection-2 12.34Ki ± 0% 10.62Ki ± 0% -13.93% (p=0.000 n=15) SetOperation/n=64/GEOS_Difference-2 22.96Ki ± 0% 18.74Ki ± 0% -18.37% (p=0.000 n=15) SetOperation/n=64/GEOS_SymmetricDifference-2 85.47Ki ± 0% 68.67Ki ± 0% -19.65% (p=0.000 n=15) SetOperation/n=64/GEOS_Union-2 27.34Ki ± 0% 22.49Ki ± 0% -17.72% (p=0.000 n=15) SetOperation/n=128/Go_Intersection-2 215.1Ki ± 0% 193.5Ki ± 0% -10.03% (p=0.000 n=15) SetOperation/n=128/Go_Difference-2 224.0Ki ± 0% 200.5Ki ± 0% -10.47% (p=0.000 n=15) SetOperation/n=128/Go_SymmetricDifference-2 326.8Ki ± 0% 283.3Ki ± 0% -13.31% (p=0.000 n=15) SetOperation/n=128/Go_Union-2 226.3Ki ± 0% 202.8Ki ± 0% -10.36% (p=0.000 n=15) SetOperation/n=128/GEOS_Intersection-2 29.59Ki ± 0% 24.74Ki ± 0% -16.37% (p=0.000 n=15) SetOperation/n=128/GEOS_Difference-2 39.09Ki ± 0% 32.37Ki ± 0% -17.19% (p=0.000 n=15) SetOperation/n=128/GEOS_SymmetricDifference-2 144.0Ki ± 0% 117.2Ki ± 0% -18.61% (p=0.000 n=15) SetOperation/n=128/GEOS_Union-2 42.09Ki ± 0% 35.37Ki ± 0% -15.96% (p=0.000 n=15) SetOperation/n=256/Go_Intersection-2 382.7Ki ± 0% 349.3Ki ± 0% -8.74% (p=0.000 n=15) SetOperation/n=256/Go_Difference-2 424.5Ki ± 0% 381.1Ki ± 0% -10.23% (p=0.000 n=15) SetOperation/n=256/Go_SymmetricDifference-2 663.0Ki ± 0% 569.5Ki ± 0% -14.11% (p=0.000 n=15) SetOperation/n=256/Go_Union-2 436.0Ki ± 0% 390.7Ki ± 0% -10.39% (p=0.000 n=15) SetOperation/n=256/GEOS_Intersection-2 47.09Ki ± 0% 40.37Ki ± 0% -14.27% (p=0.000 n=15) SetOperation/n=256/GEOS_Difference-2 90.46Ki ± 0% 73.74Ki ± 0% -18.48% (p=0.000 n=15) SetOperation/n=256/GEOS_SymmetricDifference-2 333.0Ki ± 0% 266.2Ki ± 0% -20.06% (p=0.000 n=15) SetOperation/n=256/GEOS_Union-2 103.09Ki ± 0% 84.49Ki ± 0% -18.04% (p=0.000 n=15) SetOperation/n=512/Go_Intersection-2 799.7Ki ± 0% 714.4Ki ± 0% -10.67% (p=0.000 n=15) SetOperation/n=512/Go_Difference-2 839.6Ki ± 0% 746.2Ki ± 0% -11.13% (p=0.000 n=15) SetOperation/n=512/Go_SymmetricDifference-2 1.211Mi ± 0% 1.041Mi ± 0% -13.99% (p=0.000 n=15) SetOperation/n=512/Go_Union-2 849.2Ki ± 0% 755.8Ki ± 0% -11.00% (p=0.000 n=15) SetOperation/n=512/GEOS_Intersection-2 112.09Ki ± 0% 93.49Ki ± 0% -16.59% (p=0.000 n=15) SetOperation/n=512/GEOS_Difference-2 155.1Ki ± 0% 128.4Ki ± 0% -17.23% (p=0.000 n=15) SetOperation/n=512/GEOS_SymmetricDifference-2 563.7Ki ± 0% 456.9Ki ± 0% -18.95% (p=0.000 n=15) SetOperation/n=512/GEOS_Union-2 167.3Ki ± 0% 140.6Ki ± 0% -15.97% (p=0.000 n=15) SetOperation/n=1024/Go_Intersection-2 1.453Mi ± 0% 1.322Mi ± 0% -8.97% (p=0.000 n=15) SetOperation/n=1024/Go_Difference-2 1.619Mi ± 0% 1.450Mi ± 0% -10.46% (p=0.000 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 2.562Mi ± 0% 2.197Mi ± 0% -14.24% (p=0.000 n=15) SetOperation/n=1024/Go_Union-2 1.657Mi ± 0% 1.481Mi ± 0% -10.63% (p=0.000 n=15) SetOperation/n=1024/GEOS_Intersection-2 184.8Ki ± 0% 158.1Ki ± 0% -14.46% (p=0.000 n=15) SetOperation/n=1024/GEOS_Difference-2 360.8Ki ± 0% 294.1Ki ± 0% -18.49% (p=0.000 n=15) SetOperation/n=1024/GEOS_SymmetricDifference-2 1.316Mi ± 0% 1.056Mi ± 0% -19.80% (p=0.000 n=15) SetOperation/n=1024/GEOS_Union-2 405.6Ki ± 0% 332.0Ki ± 0% -18.15% (p=0.000 n=15) SetOperation/n=2048/Go_Intersection-2 3.194Mi ± 0% 2.861Mi ± 0% -10.41% (p=0.000 n=15) SetOperation/n=2048/Go_Difference-2 3.357Mi ± 0% 2.992Mi ± 0% -10.86% (p=0.000 n=15) SetOperation/n=2048/Go_SymmetricDifference-2 4.923Mi ± 0% 4.246Mi ± 0% -13.76% (p=0.000 n=15) SetOperation/n=2048/Go_Union-2 3.389Mi ± 0% 3.024Mi ± 0% -10.76% (p=0.000 n=15) SetOperation/n=2048/GEOS_Intersection-2 449.6Ki ± 0% 376.0Ki ± 0% -16.37% (p=0.000 n=15) SetOperation/n=2048/GEOS_Difference-2 632.8Ki ± 0% 526.1Ki ± 0% -16.86% (p=0.000 n=15) SetOperation/n=2048/GEOS_SymmetricDifference-2 2.215Mi ± 0% 1.798Mi ± 0% -18.82% (p=0.000 n=15) SetOperation/n=2048/GEOS_Union-2 672.8Ki ± 0% 566.1Ki ± 0% -15.86% (p=0.000 n=15) SetOperation/n=4096/Go_Intersection-2 6.098Mi ± 0% 5.577Mi ± 0% -8.54% (p=0.000 n=15) SetOperation/n=4096/Go_Difference-2 6.739Mi ± 0% 6.062Mi ± 0% -10.05% (p=0.000 n=15) SetOperation/n=4096/Go_SymmetricDifference-2 10.383Mi ± 0% 8.924Mi ± 0% -14.05% (p=0.000 n=15) SetOperation/n=4096/Go_Union-2 6.896Mi ± 0% 6.193Mi ± 0% -10.20% (p=0.000 n=15) SetOperation/n=4096/GEOS_Intersection-2 736.8Ki ± 0% 630.1Ki ± 0% -14.48% (p=0.000 n=15) SetOperation/n=4096/GEOS_Difference-2 1.384Mi ± 0% 1.123Mi ± 0% -18.82% (p=0.000 n=15) SetOperation/n=4096/GEOS_SymmetricDifference-2 5.090Mi ± 0% 4.048Mi ± 0% -20.47% (p=0.000 n=15) SetOperation/n=4096/GEOS_Union-2 1.556Mi ± 0% 1.270Mi ± 0% -18.42% (p=0.000 n=15) SetOperation/n=8192/Go_Intersection-2 13.10Mi ± 0% 11.77Mi ± 0% -10.14% (p=0.000 n=15) SetOperation/n=8192/Go_Difference-2 13.72Mi ± 0% 12.26Mi ± 0% -10.63% (p=0.000 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 19.83Mi ± 0% 17.13Mi ± 0% -13.66% (p=0.000 n=15) SetOperation/n=8192/Go_Union-2 13.86Mi ± 0% 12.40Mi ± 0% -10.52% (p=0.000 n=15) SetOperation/n=8192/GEOS_Intersection-2 1.681Mi ± 0% 1.395Mi ± 0% -17.05% (p=0.000 n=15) SetOperation/n=8192/GEOS_Difference-2 2.352Mi ± 0% 1.936Mi ± 0% -17.71% (p=0.000 n=15) SetOperation/n=8192/GEOS_SymmetricDifference-2 8.590Mi ± 0% 6.923Mi ± 0% -19.40% (p=0.000 n=15) SetOperation/n=8192/GEOS_Union-2 2.532Mi ± 0% 2.115Mi ± 0% -16.46% (p=0.000 n=15) SetOperation/n=16384/Go_Intersection-2 24.09Mi ± 0% 22.01Mi ± 0% -8.65% (p=0.000 n=15) SetOperation/n=16384/Go_Difference-2 26.64Mi ± 0% 23.93Mi ± 0% -10.17% (p=0.000 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 41.06Mi ± 0% 35.23Mi ± 0% -14.21% (p=0.000 n=15) SetOperation/n=16384/Go_Union-2 27.30Mi ± 0% 24.48Mi ± 0% -10.30% (p=0.000 n=15) SetOperation/n=16384/GEOS_Intersection-2 2.782Mi ± 0% 2.365Mi ± 0% -14.98% (p=0.000 n=15) SetOperation/n=16384/GEOS_Difference-2 5.415Mi ± 0% 4.373Mi ± 0% -19.24% (p=0.000 n=15) SetOperation/n=16384/GEOS_SymmetricDifference-2 20.09Mi ± 0% 15.92Mi ± 0% -20.74% (p=0.000 n=15) SetOperation/n=16384/GEOS_Union-2 6.150Mi ± 0% 5.004Mi ± 0% -18.64% (p=0.000 n=15) geomean 228.5Ki 196.4Ki -14.07% │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ allocs/op │ allocs/op vs base │ LineStringIsSimpleCircle/n=10-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleCircle/n=100-2 71.00 ± 0% 71.00 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleCircle/n=1000-2 343.0 ± 0% 343.0 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleCircle/n=10000-2 5.463k ± 0% 5.463k ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleZigZag/10-2 7.000 ± 0% 7.000 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleZigZag/100-2 71.00 ± 0% 71.00 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleZigZag/1000-2 343.0 ± 0% 343.0 ± 0% ~ (p=1.000 n=15) ¹ LineStringIsSimpleZigZag/10000-2 5.463k ± 0% 5.463k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/Go_Intersection-2 214.0 ± 0% 214.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/Go_Difference-2 219.0 ± 0% 219.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/Go_SymmetricDifference-2 320.0 ± 0% 320.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/Go_Union-2 225.0 ± 0% 225.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/GEOS_Intersection-2 52.00 ± 0% 52.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/GEOS_Difference-2 55.00 ± 0% 55.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/GEOS_SymmetricDifference-2 148.0 ± 0% 148.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4/GEOS_Union-2 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8/Go_Intersection-2 229.0 ± 0% 229.0 ± 0% ~ (p=1.000 n=15) SetOperation/n=8/Go_Difference-2 231.0 ± 0% 231.0 ± 0% ~ (p=0.598 n=15) SetOperation/n=8/Go_SymmetricDifference-2 337.0 ± 0% 337.0 ± 0% ~ (p=0.390 n=15) SetOperation/n=8/Go_Union-2 236.0 ± 0% 236.0 ± 0% ~ (p=0.330 n=15) SetOperation/n=8/GEOS_Intersection-2 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8/GEOS_Difference-2 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8/GEOS_SymmetricDifference-2 152.0 ± 0% 152.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8/GEOS_Union-2 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/Go_Intersection-2 241.0 ± 0% 241.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/Go_Difference-2 251.0 ± 0% 251.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/Go_SymmetricDifference-2 381.0 ± 0% 381.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/Go_Union-2 260.0 ± 0% 260.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/GEOS_Intersection-2 56.00 ± 0% 56.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/GEOS_Difference-2 64.00 ± 0% 64.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/GEOS_SymmetricDifference-2 185.0 ± 0% 185.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16/GEOS_Union-2 68.00 ± 0% 68.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/Go_Intersection-2 290.0 ± 0% 290.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/Go_Difference-2 296.0 ± 0% 296.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/Go_SymmetricDifference-2 449.0 ± 0% 449.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/Go_Union-2 301.0 ± 0% 301.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/GEOS_Intersection-2 68.00 ± 0% 68.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/GEOS_Difference-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/GEOS_SymmetricDifference-2 216.0 ± 0% 216.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=32/GEOS_Union-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/Go_Intersection-2 330.0 ± 0% 330.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/Go_Difference-2 364.0 ± 0% 364.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/Go_SymmetricDifference-2 614.0 ± 0% 614.0 ± 0% ~ (p=1.000 n=15) SetOperation/n=64/Go_Union-2 377.0 ± 0% 377.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/GEOS_Intersection-2 72.00 ± 0% 72.00 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/GEOS_Difference-2 104.0 ± 0% 104.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/GEOS_SymmetricDifference-2 345.0 ± 0% 345.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=64/GEOS_Union-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/Go_Intersection-2 503.0 ± 0% 503.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/Go_Difference-2 529.0 ± 0% 529.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/Go_SymmetricDifference-2 875.0 ± 0% 875.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/Go_Union-2 534.0 ± 0% 534.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/GEOS_Intersection-2 112.0 ± 0% 112.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/GEOS_Difference-2 136.0 ± 0% 136.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/GEOS_SymmetricDifference-2 473.0 ± 0% 473.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=128/GEOS_Union-2 136.0 ± 0% 136.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=256/Go_Intersection-2 661.0 ± 0% 661.0 ± 0% ~ (p=1.000 n=15) SetOperation/n=256/Go_Difference-2 791.0 ± 0% 791.0 ± 0% ~ (p=1.000 n=15) SetOperation/n=256/Go_SymmetricDifference-2 1.521k ± 0% 1.521k ± 0% ~ (p=1.000 n=15) SetOperation/n=256/Go_Union-2 820.0 ± 0% 820.0 ± 0% ~ (p=1.000 n=15) SetOperation/n=256/GEOS_Intersection-2 136.0 ± 0% 136.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=256/GEOS_Difference-2 264.0 ± 0% 264.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=256/GEOS_SymmetricDifference-2 985.0 ± 0% 985.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=256/GEOS_Union-2 288.0 ± 0% 288.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=512/Go_Intersection-2 1.330k ± 0% 1.330k ± 0% ~ (p=1.000 n=15) SetOperation/n=512/Go_Difference-2 1.436k ± 0% 1.436k ± 0% ~ (p=1.000 n=15) SetOperation/n=512/Go_SymmetricDifference-2 2.550k ± 0% 2.550k ± 0% ~ (p=1.000 n=15) SetOperation/n=512/Go_Union-2 1.441k ± 0% 1.441k ± 0% ~ (p=1.000 n=15) SetOperation/n=512/GEOS_Intersection-2 288.0 ± 0% 288.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=512/GEOS_Difference-2 392.0 ± 0% 392.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=512/GEOS_SymmetricDifference-2 1.497k ± 0% 1.497k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=512/GEOS_Union-2 392.0 ± 0% 392.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=1024/Go_Intersection-2 1.955k ± 0% 1.955k ± 0% ~ (p=1.000 n=15) SetOperation/n=1024/Go_Difference-2 2.469k ± 0% 2.469k ± 0% ~ (p=1.000 n=15) SetOperation/n=1024/Go_SymmetricDifference-2 5.119k ± 0% 5.119k ± 0% ~ (p=1.000 n=15) SetOperation/n=1024/Go_Union-2 2.562k ± 0% 2.562k ± 0% ~ (p=0.483 n=15) SetOperation/n=1024/GEOS_Intersection-2 392.0 ± 0% 392.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=1024/GEOS_Difference-2 904.0 ± 0% 904.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=1024/GEOS_SymmetricDifference-2 3.545k ± 0% 3.545k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=1024/GEOS_Union-2 992.0 ± 0% 992.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/Go_Intersection-2 4.611k ± 0% 4.611k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/Go_Difference-2 5.037k ± 0% 5.037k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/Go_SymmetricDifference-2 9.223k ± 0% 9.223k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/Go_Union-2 5.042k ± 0% 5.042k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/GEOS_Intersection-2 992.0 ± 0% 992.0 ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/GEOS_Difference-2 1.416k ± 0% 1.416k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/GEOS_SymmetricDifference-2 5.593k ± 0% 5.593k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=2048/GEOS_Union-2 1.416k ± 0% 1.416k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/Go_Intersection-2 7.092k ± 0% 7.092k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/Go_Difference-2 9.142k ± 0% 9.142k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/Go_SymmetricDifference-2 19.47k ± 0% 19.47k ± 0% ~ (p=1.000 n=15) SetOperation/n=4096/Go_Union-2 9.491k ± 0% 9.491k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/GEOS_Intersection-2 1.416k ± 0% 1.416k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/GEOS_Difference-2 3.464k ± 0% 3.464k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/GEOS_SymmetricDifference-2 13.79k ± 0% 13.79k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=4096/GEOS_Union-2 3.808k ± 0% 3.808k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8192/Go_Intersection-2 17.69k ± 0% 17.69k ± 0% ~ (p=1.000 n=15) SetOperation/n=8192/Go_Difference-2 19.39k ± 0% 19.39k ± 0% ~ (p=0.483 n=15) SetOperation/n=8192/Go_SymmetricDifference-2 35.87k ± 0% 35.87k ± 0% ~ (p=0.598 n=15) SetOperation/n=8192/Go_Union-2 19.40k ± 0% 19.40k ± 0% ~ (p=1.000 n=15) SetOperation/n=8192/GEOS_Intersection-2 3.808k ± 0% 3.808k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8192/GEOS_Difference-2 5.512k ± 0% 5.512k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8192/GEOS_SymmetricDifference-2 21.98k ± 0% 21.98k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=8192/GEOS_Union-2 5.512k ± 0% 5.512k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16384/Go_Intersection-2 27.59k ± 0% 27.59k ± 0% ~ (p=0.427 n=15) SetOperation/n=16384/Go_Difference-2 35.79k ± 0% 35.78k ± 0% ~ (p=0.272 n=15) SetOperation/n=16384/Go_SymmetricDifference-2 76.83k ± 0% 76.83k ± 0% ~ (p=1.000 n=15) SetOperation/n=16384/Go_Union-2 37.16k ± 0% 37.16k ± 0% ~ (p=0.651 n=15) SetOperation/n=16384/GEOS_Intersection-2 5.512k ± 0% 5.512k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16384/GEOS_Difference-2 13.70k ± 0% 13.70k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16384/GEOS_SymmetricDifference-2 54.74k ± 0% 54.74k ± 0% ~ (p=1.000 n=15) ¹ SetOperation/n=16384/GEOS_Union-2 15.07k ± 0% 15.07k ± 0% ~ (p=1.000 n=15) ¹ geomean 785.3 785.3 -0.00% ¹ all samples are equal pkg: github.com/peterstace/simplefeatures/rtree │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ sec/op │ sec/op vs base │ Delete/n=100-2 10.72µ ± 1% Delete/n=1000-2 436.1µ ± 1% Delete/n=10000-2 24.02m ± 0% Bulk/n=10-2 442.7n ± 12% 415.7n ± 4% -6.10% (p=0.000 n=15) Bulk/n=100-2 8.993µ ± 1% 8.612µ ± 2% -4.24% (p=0.000 n=15) Bulk/n=1000-2 188.9µ ± 2% 191.1µ ± 2% ~ (p=0.233 n=15) Bulk/n=10000-2 2.752m ± 1% 2.709m ± 1% -1.56% (p=0.002 n=15) Bulk/n=100000-2 32.24m ± 2% 31.37m ± 1% -2.69% (p=0.000 n=15) Insert/n=10-2 779.4n ± 0% Insert/n=100-2 13.54µ ± 0% Insert/n=1000-2 280.2µ ± 1% Insert/n=10000-2 3.745m ± 0% Insert/n=100000-2 44.81m ± 1% RangeSearch/n=10-2 10.26n ± 0% 10.39n ± 1% +1.27% (p=0.003 n=15) RangeSearch/n=100-2 43.60n ± 0% 43.24n ± 0% -0.83% (p=0.001 n=15) RangeSearch/n=1000-2 160.2n ± 0% 159.8n ± 0% -0.25% (p=0.034 n=15) RangeSearch/n=10000-2 574.9n ± 0% 576.1n ± 1% ~ (p=0.100 n=15) RangeSearch/n=100000-2 5.621µ ± 1% 5.308µ ± 3% -5.57% (p=0.000 n=15) geomean 31.36µ 5.136µ -1.89% ¹ ¹ benchmark set differs from baseline; geomeans may not be comparable │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ B/op │ B/op vs base │ Delete/n=100-2 712.0 ± 0% Delete/n=1000-2 25.47Ki ± 0% Delete/n=10000-2 402.2Ki ± 0% Bulk/n=10-2 1.422Ki ± 0% 1.031Ki ± 0% -27.47% (p=0.000 n=15) Bulk/n=100-2 19.42Ki ± 0% 14.03Ki ± 0% -27.76% (p=0.000 n=15) Bulk/n=1000-2 95.92Ki ± 0% 69.28Ki ± 0% -27.77% (p=0.000 n=15) Bulk/n=10000-2 1.500Mi ± 0% 1.083Mi ± 0% -27.78% (p=0.000 n=15) Bulk/n=100000-2 19.50Mi ± 0% 14.08Mi ± 0% -27.78% (p=0.000 n=15) Insert/n=10-2 1.406Ki ± 0% Insert/n=100-2 13.22Ki ± 0% Insert/n=1000-2 128.5Ki ± 0% Insert/n=10000-2 1.278Mi ± 0% Insert/n=100000-2 12.86Mi ± 0% 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 ² -14.98% ³ ² ¹ all samples are equal ² summaries must be >0 to compute geomean ³ benchmark set differs from baseline; geomeans may not be comparable │ /tmp/tmp.4Q3TPX7f8Q │ /tmp/tmp.WA74bwKl4o │ │ allocs/op │ allocs/op vs base │ Delete/n=100-2 65.00 ± 0% Delete/n=1000-2 480.0 ± 0% Delete/n=10000-2 7.622k ± 0% Bulk/n=10-2 6.000 ± 0% 6.000 ± 0% ~ (p=1.000 n=15) ¹ Bulk/n=100-2 70.00 ± 0% 70.00 ± 0% ~ (p=1.000 n=15) ¹ Bulk/n=1000-2 342.0 ± 0% 342.0 ± 0% ~ (p=1.000 n=15) ¹ Bulk/n=10000-2 5.462k ± 0% 5.462k ± 0% ~ (p=1.000 n=15) ¹ Bulk/n=100000-2 71.00k ± 0% 71.00k ± 0% ~ (p=1.000 n=15) ¹ Insert/n=10-2 5.000 ± 0% Insert/n=100-2 47.00 ± 0% Insert/n=1000-2 457.0 ± 0% Insert/n=10000-2 4.653k ± 0% Insert/n=100000-2 46.83k ± 0% 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 ² +0.00% ³ ² ¹ all samples are equal ² summaries must be >0 to compute geomean ³ benchmark set differs from baseline; geomeans may not be comparable ```