peterstace / simplefeatures

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

Reuse DCEL half edges (fix for geometry collection DCEL bugs) #472

Closed peterstace closed 1 year ago

peterstace commented 1 year ago

Description

commit c85bbacc35acfe974a783523e9c381cfab0a14a6 Author: Peter Stace peterstace@gmail.com Date: Fri Nov 11 11:21:29 2022 +1100

Reuse DCEL half edges (fix for geometry collection DCEL bugs)

The existing DCEL implementation has a bug where half-edge records are
not reused if they appear in multiple polygons in the input geometry.
Before the `simplefeatures` library supported GeometryCollection inputs,
this bug didn't occur because the OGC Simple Feature Access spec
prohibits MultiPolygons from self-touching along their boundaries.

Similar bugs have existed in the past in scenarios where input
LineStrings contain repeated or shared segments, or if the input
geometries overlap with the "ghost" lines that join together separate
parts of the input. Previously, the DCEL code handled cases via explicit
checks and workarounds.

This PR solves the same problem by using a more generic `addOrGetEdge`
method that either gets an existing edge or creates a new one. The DCEL
algorithm uses this new method to solve the existing repeated edge
problem (previously solved via workaround) and the GeometryCollection
bug.

This approach results in considerably simpler code for loading
geometries into a DCEL. It also means that the DCEL algorithm no longer
needs an "overlay" step since it can load both geometries directly into
the same DCEL structure. This is the opposite of the previous approach,
where a DCEL for each operand was created separately and then merged
together.

Check List

Have you:

Related Issue

Benchmark Results

Click to expand ``` name old time/op new time/op delta pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:arm64 LineEnvelope/0-4 2.07ns ± 1% 2.06ns ± 1% -0.89% (p=0.007 n=13+14) LineEnvelope/1-4 2.10ns ± 2% 2.08ns ± 1% -0.70% (p=0.040 n=15+14) LineEnvelope/2-4 2.08ns ± 2% 2.06ns ± 2% -0.95% (p=0.008 n=15+14) LineEnvelope/3-4 2.09ns ± 2% 2.08ns ± 1% ~ (p=0.359 n=15+10) MarshalWKB/polygon/n=10-4 97.7ns ± 4% 97.1ns ± 2% ~ (p=0.496 n=15+13) MarshalWKB/polygon/n=100-4 282ns ± 5% 280ns ± 2% ~ (p=0.397 n=13+13) MarshalWKB/polygon/n=1000-4 1.92µs ± 6% 1.86µs ± 5% -2.76% (p=0.036 n=14+14) MarshalWKB/polygon/n=10000-4 21.6µs ±34% 20.4µs ±22% ~ (p=0.432 n=15+14) UnmarshalWKB/polygon/n=10-4 159ns ± 3% 158ns ± 2% ~ (p=0.511 n=13+14) UnmarshalWKB/polygon/n=100-4 344ns ± 6% 344ns ± 2% ~ (p=0.933 n=13+14) UnmarshalWKB/polygon/n=1000-4 2.09µs ± 6% 2.11µs ± 9% ~ (p=0.676 n=14+14) UnmarshalWKB/polygon/n=10000-4 21.0µs ±20% 21.2µs ±16% ~ (p=0.769 n=14+14) IntersectsLineStringWithLineString/n=10-4 803ns ± 4% 809ns ± 3% ~ (p=0.076 n=14+13) IntersectsLineStringWithLineString/n=100-4 12.1µs ± 2% 12.1µs ± 2% ~ (p=0.940 n=14+12) IntersectsLineStringWithLineString/n=1000-4 133µs ± 2% 134µs ± 4% ~ (p=0.252 n=14+15) IntersectsLineStringWithLineString/n=10000-4 2.20ms ±11% 2.30ms ±13% ~ (p=0.098 n=15+15) IntersectsMultiPointWithMultiPoint/n=20-4 546ns ± 1% 547ns ± 2% ~ (p=0.970 n=13+13) IntersectsMultiPointWithMultiPoint/n=200-4 7.38µs ± 2% 7.35µs ± 1% ~ (p=0.181 n=14+13) IntersectsMultiPointWithMultiPoint/n=2000-4 70.0µs ± 1% 70.1µs ± 1% ~ (p=0.480 n=14+13) IntersectsMultiPointWithMultiPoint/n=20000-4 765µs ± 2% 764µs ± 1% ~ (p=0.880 n=13+13) PolygonSingleRingValidation/n=10-4 1.29µs ± 2% 1.29µs ± 4% ~ (p=0.990 n=13+14) PolygonSingleRingValidation/n=100-4 19.1µs ± 2% 19.0µs ± 1% ~ (p=0.641 n=14+13) PolygonSingleRingValidation/n=1000-4 276µs ± 1% 276µs ± 1% ~ (p=0.494 n=14+12) PolygonSingleRingValidation/n=10000-4 3.75ms ± 8% 3.86ms ±10% ~ (p=0.387 n=13+15) PolygonMultipleRingsValidation/n=4-4 3.67µs ± 1% 3.69µs ± 3% ~ (p=0.519 n=13+13) PolygonMultipleRingsValidation/n=36-4 30.8µs ± 2% 30.9µs ± 2% ~ (p=0.302 n=14+13) PolygonMultipleRingsValidation/n=400-4 405µs ± 2% 406µs ± 2% ~ (p=0.982 n=14+14) PolygonMultipleRingsValidation/n=4096-4 5.06ms ± 2% 5.06ms ± 2% ~ (p=0.946 n=14+14) PolygonZigZagRingsValidation/n=10-4 6.11µs ± 1% 6.17µs ± 2% +0.96% (p=0.015 n=14+14) PolygonZigZagRingsValidation/n=100-4 73.1µs ± 2% 72.9µs ± 1% ~ (p=0.430 n=14+13) PolygonZigZagRingsValidation/n=1000-4 955µs ± 2% 952µs ± 1% ~ (p=0.571 n=14+14) PolygonZigZagRingsValidation/n=10000-4 13.7ms ±15% 13.2ms ± 4% ~ (p=0.354 n=15+14) PolygonAnnulusValidation/n=10-4 2.00µs ± 1% 2.02µs ± 2% +0.81% (p=0.015 n=14+14) PolygonAnnulusValidation/n=100-4 19.1µs ± 3% 19.1µs ± 3% ~ (p=0.780 n=15+14) PolygonAnnulusValidation/n=1000-4 339µs ± 1% 342µs ± 1% +0.93% (p=0.005 n=14+13) PolygonAnnulusValidation/n=10000-4 4.50ms ± 3% 4.62ms ± 9% ~ (p=0.156 n=13+15) MultipolygonValidation/n=1-4 220ns ± 2% 221ns ± 2% ~ (p=0.461 n=13+12) MultipolygonValidation/n=4-4 493ns ± 1% 499ns ± 3% +1.15% (p=0.022 n=14+14) MultipolygonValidation/n=16-4 2.17µs ± 2% 2.17µs ± 3% ~ (p=0.821 n=15+14) MultipolygonValidation/n=64-4 10.3µs ± 2% 10.3µs ± 2% ~ (p=0.905 n=14+13) MultipolygonValidation/n=256-4 54.8µs ± 2% 54.8µs ± 2% ~ (p=0.839 n=14+14) MultipolygonValidation/n=1024-4 336µs ± 3% 336µs ± 1% ~ (p=0.762 n=13+13) MultiPolygonTwoCircles/n=10-4 1.97µs ± 1% 1.99µs ± 3% ~ (p=0.128 n=14+14) MultiPolygonTwoCircles/n=100-4 23.4µs ± 3% 23.4µs ± 2% ~ (p=0.769 n=14+14) MultiPolygonTwoCircles/n=1000-4 269µs ± 1% 269µs ± 2% ~ (p=0.689 n=13+12) MultiPolygonTwoCircles/n=10000-4 4.51ms ± 5% 4.56ms ± 9% ~ (p=1.000 n=15+15) MultiPolygonMultipleTouchingPoints/n=1-4 2.59µs ± 2% 2.63µs ± 7% ~ (p=0.626 n=14+14) MultiPolygonMultipleTouchingPoints/n=10-4 20.9µs ± 2% 20.8µs ± 2% ~ (p=0.317 n=13+13) MultiPolygonMultipleTouchingPoints/n=100-4 260µs ± 3% 259µs ± 2% ~ (p=0.172 n=15+14) MultiPolygonMultipleTouchingPoints/n=1000-4 3.26ms ± 1% 3.26ms ± 3% ~ (p=0.259 n=14+13) WKTParsing/point-4 1.12µs ± 2% 1.12µs ± 3% ~ (p=0.245 n=14+12) DistancePolygonToPolygonOrdering/n=100_swap=false-4 26.8µs ± 1% 26.8µs ± 2% ~ (p=0.432 n=14+12) DistancePolygonToPolygonOrdering/n=100_swap=true-4 26.8µs ± 1% 26.9µs ± 3% ~ (p=0.756 n=14+13) DistancePolygonToPolygonOrdering/n=1000_swap=false-4 468µs ± 5% 463µs ± 3% ~ (p=0.525 n=15+13) DistancePolygonToPolygonOrdering/n=1000_swap=true-4 458µs ± 1% 460µs ± 0% ~ (p=0.183 n=14+11) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4 3.23µs ± 3% 3.25µs ± 4% ~ (p=0.510 n=13+14) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4 3.25µs ± 3% 3.25µs ± 4% ~ (p=0.830 n=14+13) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4 34.9µs ± 3% 34.6µs ± 1% -1.03% (p=0.023 n=14+12) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4 35.2µs ± 5% 34.7µs ± 1% ~ (p=0.217 n=15+13) MultiLineStringIsSimpleManyLineStrings/n=100-4 27.2µs ± 1% 27.1µs ± 2% ~ (p=0.225 n=13+12) MultiLineStringIsSimpleManyLineStrings/n=1000-4 327µs ± 2% 329µs ± 2% ~ (p=0.150 n=14+14) ForceCWandForceCCW/0-4 15.8ns ± 1% 38.7ns ±163% +144.79% (p=0.021 n=13+15) ForceCWandForceCCW/0#01-4 100ns ± 3% 78ns ±80% ~ (p=0.594 n=13+15) ForceCWandForceCCW/1-4 16.0ns ± 2% 44.2ns ±128% +176.22% (p=0.011 n=12+15) ForceCWandForceCCW/1#01-4 100ns ± 3% 73ns ±78% ~ (p=0.080 n=11+15) ForceCWandForceCCW/2-4 29.2ns ± 2% 29.2ns ± 1% ~ (p=0.812 n=14+14) ForceCWandForceCCW/2#01-4 154ns ± 2% 154ns ± 2% ~ (p=0.729 n=13+14) ForceCWandForceCCW/3-4 29.2ns ± 1% 29.4ns ± 2% ~ (p=0.091 n=14+12) ForceCWandForceCCW/3#01-4 155ns ± 2% 155ns ± 2% ~ (p=0.285 n=14+11) ForceCWandForceCCW/4-4 42.6ns ± 2% 42.6ns ± 1% ~ (p=0.622 n=15+12) ForceCWandForceCCW/4#01-4 239ns ± 2% 242ns ± 2% ~ (p=0.090 n=13+12) ForceCWandForceCCW/5-4 42.7ns ± 2% 42.8ns ± 1% ~ (p=0.721 n=13+11) ForceCWandForceCCW/5#01-4 241ns ± 5% 241ns ± 2% ~ (p=0.340 n=12+13) ForceCWandForceCCW/6-4 61.4ns ± 1% 61.6ns ± 1% ~ (p=0.639 n=12+11) ForceCWandForceCCW/6#01-4 386ns ± 3% 387ns ± 2% ~ (p=0.577 n=12+11) EnvelopeTransformXY-4 138ns ± 2% 137ns ± 1% -0.87% (p=0.007 n=15+12) WKBParse/0-4 412ns ± 1% 402ns ± 1% -2.30% (p=0.000 n=14+14) WKBParse/1-4 406ns ± 0% 407ns ± 1% ~ (p=0.323 n=14+14) WKBParse/2-4 471ns ± 1% 471ns ± 1% ~ (p=0.747 n=14+13) WKBParse/3-4 470ns ± 1% 471ns ± 1% ~ (p=0.117 n=12+12) WKBParse/4-4 555ns ± 1% 555ns ± 1% ~ (p=0.831 n=13+13) WKBParse/5-4 425ns ± 2% 424ns ± 1% ~ (p=0.356 n=15+13) WKBParse/6-4 474ns ± 1% 473ns ± 1% ~ (p=0.206 n=14+12) WKBParse/7-4 474ns ± 1% 476ns ± 1% +0.46% (p=0.014 n=14+13) WKBParse/8-4 555ns ± 1% 565ns ± 1% +1.83% (p=0.000 n=13+13) WKBParse/9-4 304ns ± 2% 304ns ± 1% ~ (p=0.292 n=13+13) WKBParse/10-4 305ns ± 1% 306ns ± 1% ~ (p=0.054 n=13+12) WKBParse/11-4 306ns ± 1% 307ns ± 3% ~ (p=0.850 n=13+13) WKBParse/12-4 301ns ± 1% 302ns ± 2% ~ (p=0.771 n=14+12) WKBParse/13-4 581ns ± 1% 593ns ± 2% +1.98% (p=0.000 n=13+13) WKBParse/14-4 686ns ± 0% 698ns ± 1% +1.72% (p=0.000 n=14+13) WKBParse/15-4 696ns ± 1% 687ns ± 1% -1.28% (p=0.000 n=14+12) WKBParse/16-4 820ns ± 1% 832ns ± 1% +1.42% (p=0.000 n=14+13) WKBParse/17-4 686ns ± 1% 695ns ± 1% +1.33% (p=0.000 n=14+13) WKBParse/18-4 888ns ± 1% 892ns ± 2% +0.54% (p=0.015 n=14+13) WKBParse/19-4 888ns ± 1% 879ns ± 1% -0.99% (p=0.000 n=14+12) WKBParse/20-4 1.08µs ± 1% 1.08µs ± 6% ~ (p=0.173 n=14+14) WKBParse/21-4 294ns ± 1% 298ns ± 5% ~ (p=0.083 n=15+14) WKBParse/22-4 296ns ± 1% 297ns ± 2% ~ (p=0.272 n=15+12) WKBParse/23-4 296ns ± 1% 298ns ± 6% ~ (p=0.901 n=15+13) WKBParse/24-4 292ns ± 1% 296ns ± 3% +1.27% (p=0.001 n=14+14) WKBParse/25-4 1.53µs ± 1% 1.56µs ± 6% ~ (p=0.164 n=13+15) WKBParse/26-4 1.93µs ± 1% 1.94µs ± 1% ~ (p=0.445 n=13+12) WKBParse/27-4 1.93µs ± 0% 1.94µs ± 1% +0.28% (p=0.003 n=9+12) WKBParse/28-4 2.43µs ± 1% 2.46µs ± 6% ~ (p=0.742 n=13+15) WKBParse/29-4 294ns ± 1% 294ns ± 1% ~ (p=1.000 n=13+12) WKBParse/30-4 295ns ± 1% 296ns ± 1% ~ (p=0.155 n=13+12) WKBParse/31-4 296ns ± 1% 296ns ± 1% ~ (p=0.810 n=14+12) WKBParse/32-4 291ns ± 1% 292ns ± 1% +0.36% (p=0.047 n=13+12) WKBParse/33-4 558ns ± 1% 562ns ± 4% ~ (p=0.504 n=14+14) WKBParse/34-4 636ns ± 1% 639ns ± 2% ~ (p=0.158 n=14+13) WKBParse/35-4 637ns ± 1% 648ns ± 1% +1.69% (p=0.000 n=15+13) WKBParse/36-4 698ns ± 1% 699ns ± 1% ~ (p=0.291 n=14+12) WKBParse/37-4 799ns ± 1% 800ns ± 1% ~ (p=0.640 n=14+12) WKBParse/38-4 938ns ± 1% 961ns ± 6% +2.48% (p=0.000 n=15+14) WKBParse/39-4 946ns ± 1% 953ns ± 3% ~ (p=0.095 n=15+13) WKBParse/40-4 1.06µs ± 1% 1.06µs ± 3% ~ (p=0.263 n=14+13) WKBParse/41-4 295ns ± 1% 296ns ± 1% +0.49% (p=0.032 n=14+13) WKBParse/42-4 296ns ± 0% 301ns ± 5% +1.66% (p=0.009 n=13+14) WKBParse/43-4 298ns ± 1% 298ns ± 1% ~ (p=0.971 n=15+12) WKBParse/44-4 294ns ± 1% 294ns ± 1% ~ (p=0.540 n=15+12) WKBParse/45-4 868ns ± 1% 872ns ± 1% +0.45% (p=0.024 n=15+12) WKBParse/46-4 1.06µs ± 1% 1.06µs ± 1% ~ (p=1.000 n=14+12) WKBParse/47-4 1.05µs ± 1% 1.06µs ± 1% +0.80% (p=0.000 n=14+12) WKBParse/48-4 1.21µs ± 1% 1.21µs ± 1% ~ (p=0.691 n=15+12) WKBParse/49-4 1.24µs ± 1% 1.24µs ± 1% ~ (p=0.581 n=13+12) WKBParse/50-4 1.57µs ± 1% 1.57µs ± 1% ~ (p=0.172 n=13+12) WKBParse/51-4 1.57µs ± 1% 1.57µs ± 1% +0.36% (p=0.037 n=15+12) WKBParse/52-4 1.84µs ± 1% 1.84µs ± 1% ~ (p=0.271 n=15+12) WKBParse/53-4 295ns ± 1% 297ns ± 2% +0.71% (p=0.004 n=15+13) WKBParse/54-4 297ns ± 1% 300ns ± 3% +0.89% (p=0.007 n=14+13) WKBParse/55-4 298ns ± 1% 299ns ± 2% ~ (p=0.289 n=15+13) WKBParse/56-4 294ns ± 1% 295ns ± 1% ~ (p=0.105 n=15+12) WKBParse/57-4 1.88µs ± 0% 1.90µs ± 2% +1.11% (p=0.000 n=14+13) WKBParse/58-4 2.32µs ± 1% 2.34µs ± 3% ~ (p=0.151 n=13+14) WKBParse/59-4 2.32µs ± 2% 2.33µs ± 2% +0.60% (p=0.012 n=14+14) WKBParse/60-4 2.81µs ± 1% 2.80µs ± 1% ~ (p=0.268 n=14+12) WKBParse/61-4 294ns ± 1% 296ns ± 2% ~ (p=0.215 n=14+13) WKBParse/62-4 296ns ± 1% 297ns ± 2% ~ (p=0.929 n=14+12) WKBParse/63-4 295ns ± 1% 296ns ± 1% ~ (p=0.291 n=14+12) WKBParse/64-4 292ns ± 1% 293ns ± 1% ~ (p=0.051 n=15+12) WKBParse/65-4 840ns ± 1% 859ns ± 4% +2.27% (p=0.000 n=13+13) WKBParse/66-4 1.01µs ± 2% 1.00µs ± 2% -0.66% (p=0.031 n=15+13) WKBParse/67-4 1.00µs ± 1% 1.01µs ± 1% ~ (p=0.282 n=15+12) WKBParse/68-4 1.11µs ± 1% 1.13µs ± 6% +1.53% (p=0.015 n=15+14) pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:arm64 IntersectionWithoutValidation/n=10-4 13.2µs ± 3% 13.3µs ± 2% ~ (p=0.176 n=14+12) IntersectionWithoutValidation/n=100-4 28.7µs ± 3% 28.7µs ± 2% ~ (p=0.910 n=14+14) IntersectionWithoutValidation/n=1000-4 146µs ± 4% 146µs ± 5% ~ (p=0.838 n=15+15) IntersectionWithoutValidation/n=10000-4 1.39ms ± 6% 1.39ms ±10% ~ (p=0.512 n=15+15) NoOp/n=10-4 2.18µs ± 7% 2.16µs ± 3% ~ (p=0.594 n=15+13) NoOp/n=100-4 5.70µs ± 3% 5.67µs ± 3% ~ (p=0.166 n=14+13) NoOp/n=1000-4 39.7µs ± 2% 39.6µs ± 2% ~ (p=0.719 n=15+12) NoOp/n=10000-4 446µs ± 6% 453µs ± 9% ~ (p=0.267 n=15+15) pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:arm64 LineStringIsSimpleCircle/n=10-4 1.08µs ± 2% 1.09µs ± 2% ~ (p=0.973 n=15+13) LineStringIsSimpleCircle/n=100-4 16.9µs ± 2% 16.9µs ± 1% ~ (p=0.477 n=15+14) LineStringIsSimpleCircle/n=1000-4 257µs ± 1% 258µs ± 1% +0.67% (p=0.021 n=14+14) LineStringIsSimpleCircle/n=10000-4 3.82ms ±10% 3.88ms ±12% ~ (p=0.701 n=14+14) LineStringIsSimpleZigZag/10-4 971ns ± 2% 974ns ± 3% ~ (p=0.467 n=15+13) LineStringIsSimpleZigZag/100-4 16.8µs ± 2% 16.8µs ± 2% ~ (p=0.293 n=13+13) LineStringIsSimpleZigZag/1000-4 236µs ± 1% 237µs ± 1% ~ (p=0.069 n=14+14) LineStringIsSimpleZigZag/10000-4 3.54ms ± 9% 3.60ms ±11% ~ (p=0.477 n=14+15) SetOperation/n=4/Go_Intersection-4 19.8µs ± 3% 18.1µs ± 2% -8.86% (p=0.000 n=15+13) SetOperation/n=4/Go_Difference-4 20.4µs ± 2% 18.5µs ± 1% -9.08% (p=0.000 n=15+13) SetOperation/n=4/Go_SymmetricDifference-4 26.2µs ± 1% 24.8µs ± 3% -5.21% (p=0.000 n=15+14) SetOperation/n=4/Go_Union-4 21.0µs ± 1% 19.5µs ± 2% -7.19% (p=0.000 n=13+15) SetOperation/n=4/GEOS_Intersection-4 11.6µs ± 5% 11.6µs ± 2% ~ (p=0.991 n=15+15) SetOperation/n=4/GEOS_Difference-4 12.0µs ± 2% 11.9µs ± 4% ~ (p=0.098 n=15+13) SetOperation/n=4/GEOS_SymmetricDifference-4 18.6µs ± 4% 18.5µs ± 6% ~ (p=0.482 n=14+14) SetOperation/n=4/GEOS_Union-4 12.2µs ± 2% 12.1µs ± 1% -0.98% (p=0.041 n=14+15) SetOperation/n=8/Go_Intersection-4 25.5µs ± 2% 23.7µs ± 3% -6.89% (p=0.000 n=14+14) SetOperation/n=8/Go_Difference-4 25.7µs ± 1% 23.8µs ± 3% -7.57% (p=0.000 n=11+15) SetOperation/n=8/Go_SymmetricDifference-4 32.6µs ± 3% 31.0µs ± 3% -5.02% (p=0.000 n=13+14) SetOperation/n=8/Go_Union-4 26.3µs ± 1% 24.7µs ± 1% -6.31% (p=0.000 n=12+15) SetOperation/n=8/GEOS_Intersection-4 15.3µs ± 1% 15.2µs ± 2% ~ (p=0.066 n=13+14) SetOperation/n=8/GEOS_Difference-4 15.2µs ± 2% 15.1µs ± 2% ~ (p=0.798 n=15+15) SetOperation/n=8/GEOS_SymmetricDifference-4 22.3µs ± 2% 22.3µs ± 2% ~ (p=0.890 n=15+14) SetOperation/n=8/GEOS_Union-4 14.7µs ± 2% 14.7µs ± 4% ~ (p=0.983 n=14+15) SetOperation/n=16/Go_Intersection-4 35.8µs ± 3% 33.3µs ± 2% -7.02% (p=0.000 n=15+13) SetOperation/n=16/Go_Difference-4 37.6µs ± 3% 35.4µs ± 6% -5.74% (p=0.000 n=14+14) SetOperation/n=16/Go_SymmetricDifference-4 49.0µs ± 1% 47.2µs ± 1% -3.67% (p=0.000 n=13+13) SetOperation/n=16/Go_Union-4 38.7µs ± 1% 37.3µs ± 5% -3.48% (p=0.007 n=12+15) SetOperation/n=16/GEOS_Intersection-4 17.2µs ± 4% 17.2µs ± 3% ~ (p=0.274 n=15+13) SetOperation/n=16/GEOS_Difference-4 18.3µs ± 5% 18.1µs ± 3% ~ (p=0.098 n=15+13) SetOperation/n=16/GEOS_SymmetricDifference-4 29.8µs ± 2% 29.9µs ± 4% ~ (p=0.571 n=14+14) SetOperation/n=16/GEOS_Union-4 18.7µs ± 2% 18.6µs ± 2% ~ (p=0.296 n=14+13) SetOperation/n=32/Go_Intersection-4 59.6µs ± 2% 57.0µs ± 2% -4.47% (p=0.000 n=14+14) SetOperation/n=32/Go_Difference-4 62.1µs ± 3% 59.3µs ± 1% -4.53% (p=0.000 n=14+13) SetOperation/n=32/Go_SymmetricDifference-4 83.4µs ± 3% 82.0µs ± 2% -1.68% (p=0.002 n=14+14) SetOperation/n=32/Go_Union-4 64.5µs ± 2% 62.0µs ± 2% -3.83% (p=0.000 n=13+14) SetOperation/n=32/GEOS_Intersection-4 22.5µs ± 4% 22.4µs ± 4% ~ (p=0.723 n=15+14) SetOperation/n=32/GEOS_Difference-4 23.9µs ± 5% 23.6µs ± 3% ~ (p=0.270 n=15+14) SetOperation/n=32/GEOS_SymmetricDifference-4 42.1µs ± 2% 42.4µs ± 2% ~ (p=0.104 n=14+14) SetOperation/n=32/GEOS_Union-4 24.0µs ± 4% 23.9µs ± 3% ~ (p=0.294 n=15+13) SetOperation/n=64/Go_Intersection-4 108µs ± 2% 103µs ± 2% -4.21% (p=0.000 n=13+14) SetOperation/n=64/Go_Difference-4 117µs ± 4% 112µs ± 2% -4.31% (p=0.000 n=14+13) SetOperation/n=64/Go_SymmetricDifference-4 162µs ± 1% 162µs ± 1% ~ (p=0.482 n=14+14) SetOperation/n=64/Go_Union-4 123µs ± 2% 119µs ± 1% -2.79% (p=0.000 n=14+14) SetOperation/n=64/GEOS_Intersection-4 30.4µs ± 2% 30.2µs ± 3% ~ (p=0.210 n=14+14) SetOperation/n=64/GEOS_Difference-4 36.3µs ± 3% 36.3µs ± 3% ~ (p=0.964 n=13+15) SetOperation/n=64/GEOS_SymmetricDifference-4 78.0µs ± 4% 78.0µs ± 4% ~ (p=0.778 n=14+14) SetOperation/n=64/GEOS_Union-4 39.0µs ± 2% 38.9µs ± 3% ~ (p=0.540 n=15+14) SetOperation/n=128/Go_Intersection-4 224µs ± 1% 216µs ± 1% -3.39% (p=0.000 n=12+13) SetOperation/n=128/Go_Difference-4 238µs ± 1% 232µs ± 3% -2.39% (p=0.000 n=13+12) SetOperation/n=128/Go_SymmetricDifference-4 326µs ± 2% 328µs ± 2% +0.62% (p=0.041 n=14+13) SetOperation/n=128/Go_Union-4 248µs ± 1% 243µs ± 1% -1.97% (p=0.000 n=13+13) SetOperation/n=128/GEOS_Intersection-4 50.2µs ± 5% 50.0µs ± 2% ~ (p=0.874 n=14+14) SetOperation/n=128/GEOS_Difference-4 58.6µs ± 4% 58.8µs ± 3% ~ (p=0.285 n=14+14) SetOperation/n=128/GEOS_SymmetricDifference-4 142µs ± 3% 144µs ± 2% +1.27% (p=0.011 n=14+14) SetOperation/n=128/GEOS_Union-4 65.1µs ± 2% 65.3µs ± 1% ~ (p=0.545 n=13+13) SetOperation/n=256/Go_Intersection-4 439µs ± 1% 424µs ± 1% -3.34% (p=0.000 n=13+13) SetOperation/n=256/Go_Difference-4 477µs ± 1% 466µs ± 3% -2.22% (p=0.000 n=13+14) SetOperation/n=256/Go_SymmetricDifference-4 677µs ± 1% 673µs ± 3% -0.58% (p=0.044 n=14+14) SetOperation/n=256/Go_Union-4 502µs ± 2% 493µs ± 5% -1.76% (p=0.005 n=13+14) SetOperation/n=256/GEOS_Intersection-4 82.6µs ± 2% 83.8µs ± 4% +1.40% (p=0.014 n=13+14) SetOperation/n=256/GEOS_Difference-4 117µs ± 2% 120µs ± 3% +2.12% (p=0.000 n=14+15) SetOperation/n=256/GEOS_SymmetricDifference-4 318µs ± 1% 318µs ± 2% ~ (p=0.928 n=15+13) SetOperation/n=256/GEOS_Union-4 136µs ± 1% 137µs ± 2% ~ (p=0.265 n=14+14) SetOperation/n=512/Go_Intersection-4 913µs ± 4% 899µs ± 4% ~ (p=0.093 n=14+15) SetOperation/n=512/Go_Difference-4 954µs ± 6% 937µs ± 6% -1.76% (p=0.008 n=13+14) SetOperation/n=512/Go_SymmetricDifference-4 1.38ms ± 8% 1.34ms ± 5% -2.95% (p=0.001 n=14+13) SetOperation/n=512/Go_Union-4 1.03ms ± 9% 1.03ms ± 8% ~ (p=0.982 n=14+14) SetOperation/n=512/GEOS_Intersection-4 171µs ± 3% 170µs ± 1% ~ (p=0.801 n=13+13) SetOperation/n=512/GEOS_Difference-4 232µs ± 1% 234µs ± 4% ~ (p=0.077 n=14+15) SetOperation/n=512/GEOS_SymmetricDifference-4 638µs ± 1% 639µs ± 2% ~ (p=0.982 n=14+14) SetOperation/n=512/GEOS_Union-4 271µs ± 2% 275µs ± 9% ~ (p=0.519 n=14+13) SetOperation/n=1024/Go_Intersection-4 1.78ms ± 1% 1.76ms ± 3% -1.57% (p=0.003 n=14+15) SetOperation/n=1024/Go_Difference-4 1.99ms ± 2% 1.95ms ± 3% -2.02% (p=0.000 n=14+14) SetOperation/n=1024/Go_SymmetricDifference-4 3.00ms ± 7% 2.91ms ± 1% -2.92% (p=0.000 n=15+14) SetOperation/n=1024/Go_Union-4 2.16ms ± 3% 2.10ms ± 1% -2.73% (p=0.000 n=14+13) SetOperation/n=1024/GEOS_Intersection-4 347µs ± 4% 347µs ± 6% ~ (p=0.914 n=15+14) SetOperation/n=1024/GEOS_Difference-4 525µs ± 8% 519µs ± 7% ~ (p=0.252 n=14+15) SetOperation/n=1024/GEOS_SymmetricDifference-4 1.40ms ± 2% 1.40ms ± 2% ~ (p=0.270 n=12+13) SetOperation/n=1024/GEOS_Union-4 618µs ± 9% 636µs ±12% ~ (p=0.137 n=15+15) SetOperation/n=2048/Go_Intersection-4 4.04ms ±13% 3.73ms ± 2% -7.56% (p=0.000 n=14+12) SetOperation/n=2048/Go_Difference-4 4.13ms ± 3% 4.08ms ± 5% -1.21% (p=0.022 n=13+15) SetOperation/n=2048/Go_SymmetricDifference-4 5.97ms ± 2% 5.94ms ± 1% ~ (p=0.169 n=13+13) SetOperation/n=2048/Go_Union-4 4.42ms ± 2% 4.42ms ± 7% ~ (p=0.080 n=13+15) SetOperation/n=2048/GEOS_Intersection-4 736µs ± 5% 730µs ± 1% ~ (p=0.280 n=13+14) SetOperation/n=2048/GEOS_Difference-4 1.03ms ± 2% 1.03ms ± 1% -0.69% (p=0.043 n=13+14) SetOperation/n=2048/GEOS_SymmetricDifference-4 2.93ms ± 9% 3.03ms ±15% ~ (p=0.505 n=14+15) SetOperation/n=2048/GEOS_Union-4 1.23ms ± 6% 1.22ms ± 6% ~ (p=0.486 n=15+15) SetOperation/n=4096/Go_Intersection-4 8.42ms ±16% 8.41ms ±17% ~ (p=0.377 n=14+15) SetOperation/n=4096/Go_Difference-4 8.80ms ± 6% 8.76ms ±11% ~ (p=0.267 n=15+15) SetOperation/n=4096/Go_SymmetricDifference-4 13.4ms ± 7% 13.5ms ±17% ~ (p=0.967 n=15+15) SetOperation/n=4096/Go_Union-4 9.71ms ±16% 9.35ms ± 9% ~ (p=0.061 n=15+15) SetOperation/n=4096/GEOS_Intersection-4 1.44ms ± 3% 1.44ms ± 3% ~ (p=0.830 n=13+14) SetOperation/n=4096/GEOS_Difference-4 2.17ms ± 6% 2.14ms ± 3% ~ (p=0.400 n=15+14) SetOperation/n=4096/GEOS_SymmetricDifference-4 5.88ms ± 2% 5.92ms ± 3% ~ (p=0.270 n=12+13) SetOperation/n=4096/GEOS_Union-4 2.70ms ±15% 2.69ms ±14% ~ (p=0.946 n=14+14) SetOperation/n=8192/Go_Intersection-4 18.1ms ±16% 19.1ms ±16% ~ (p=0.094 n=13+14) SetOperation/n=8192/Go_Difference-4 20.7ms ±21% 20.4ms ±12% ~ (p=0.847 n=15+14) SetOperation/n=8192/Go_SymmetricDifference-4 31.5ms ±34% 30.3ms ±14% ~ (p=0.775 n=15+15) SetOperation/n=8192/Go_Union-4 22.2ms ±24% 21.7ms ±21% ~ (p=0.652 n=15+14) SetOperation/n=8192/GEOS_Intersection-4 3.13ms ± 6% 3.19ms ±13% ~ (p=0.892 n=13+15) SetOperation/n=8192/GEOS_Difference-4 4.29ms ± 2% 4.28ms ± 1% ~ (p=0.527 n=14+12) SetOperation/n=8192/GEOS_SymmetricDifference-4 13.1ms ±10% 13.0ms ±11% ~ (p=0.539 n=15+15) SetOperation/n=8192/GEOS_Union-4 5.30ms ±11% 5.14ms ± 5% ~ (p=0.217 n=15+14) SetOperation/n=16384/Go_Intersection-4 52.7ms ±26% 53.7ms ±91% ~ (p=0.720 n=14+13) SetOperation/n=16384/Go_Difference-4 60.7ms ±41% 59.0ms ±32% ~ (p=0.804 n=14+14) SetOperation/n=16384/Go_SymmetricDifference-4 78.6ms ±58% 74.5ms ±60% ~ (p=0.935 n=15+15) SetOperation/n=16384/Go_Union-4 57.6ms ±30% 72.0ms ±58% ~ (p=0.085 n=14+15) SetOperation/n=16384/GEOS_Intersection-4 6.69ms ±23% 7.22ms ±18% ~ (p=0.057 n=14+15) SetOperation/n=16384/GEOS_Difference-4 9.77ms ±13% 9.39ms ± 7% -3.94% (p=0.037 n=15+14) SetOperation/n=16384/GEOS_SymmetricDifference-4 26.8ms ±14% 27.1ms ±14% ~ (p=0.880 n=15+14) SetOperation/n=16384/GEOS_Union-4 11.2ms ± 2% 11.2ms ± 3% ~ (p=0.960 n=13+13) pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:arm64 Delete/n=100-4 10.7µs ± 1% 10.7µs ± 2% -0.74% (p=0.012 n=12+12) Delete/n=1000-4 432µs ± 3% 429µs ± 3% ~ (p=0.164 n=14+14) Delete/n=10000-4 24.0ms ± 5% 23.6ms ± 4% -1.69% (p=0.041 n=15+13) Bulk/n=10-4 465ns ± 4% 466ns ± 2% ~ (p=0.765 n=14+13) Bulk/n=100-4 9.33µs ± 8% 9.16µs ± 2% ~ (p=0.325 n=14+13) Bulk/n=1000-4 186µs ± 2% 187µs ± 5% ~ (p=0.519 n=13+14) Bulk/n=10000-4 2.73ms ± 2% 2.72ms ± 1% ~ (p=0.061 n=14+13) Bulk/n=100000-4 31.5ms ± 1% 31.5ms ± 2% ~ (p=0.867 n=14+13) Insert/n=10-4 795ns ± 2% 790ns ± 3% ~ (p=0.149 n=15+14) Insert/n=100-4 13.4µs ± 2% 13.5µs ± 5% ~ (p=0.150 n=13+13) Insert/n=1000-4 273µs ± 2% 275µs ± 4% ~ (p=0.125 n=13+13) Insert/n=10000-4 3.70ms ± 2% 3.72ms ± 3% ~ (p=0.454 n=14+14) Insert/n=100000-4 43.4ms ± 2% 43.3ms ± 3% ~ (p=0.905 n=14+13) RangeSearch/n=10-4 10.1ns ± 1% 10.1ns ± 1% ~ (p=0.486 n=13+13) RangeSearch/n=100-4 43.0ns ± 1% 43.1ns ± 1% ~ (p=0.510 n=14+13) RangeSearch/n=1000-4 158ns ± 2% 159ns ± 1% ~ (p=1.000 n=15+13) RangeSearch/n=10000-4 568ns ± 0% 572ns ± 3% ~ (p=0.312 n=10+14) RangeSearch/n=100000-4 5.51µs ± 3% 5.56µs ± 2% ~ (p=0.062 n=14+14) name old alloc/op new alloc/op delta pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:arm64 LineEnvelope/0-4 0.00B 0.00B ~ (all equal) LineEnvelope/1-4 0.00B 0.00B ~ (all equal) LineEnvelope/2-4 0.00B 0.00B ~ (all equal) LineEnvelope/3-4 0.00B 0.00B ~ (all equal) MarshalWKB/polygon/n=10-4 232B ± 0% 232B ± 0% ~ (all equal) MarshalWKB/polygon/n=100-4 1.83kB ± 0% 1.83kB ± 0% ~ (all equal) MarshalWKB/polygon/n=1000-4 16.4kB ± 0% 16.4kB ± 0% ~ (all equal) MarshalWKB/polygon/n=10000-4 164kB ± 0% 164kB ± 0% ~ (all equal) UnmarshalWKB/polygon/n=10-4 284B ± 0% 284B ± 0% ~ (all equal) UnmarshalWKB/polygon/n=100-4 1.90kB ± 0% 1.90kB ± 0% ~ (all equal) UnmarshalWKB/polygon/n=1000-4 16.5kB ± 0% 16.5kB ± 0% ~ (all equal) UnmarshalWKB/polygon/n=10000-4 164kB ± 0% 164kB ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=10-4 2.42kB ± 0% 2.42kB ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=100-4 30.4kB ± 0% 30.4kB ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=1000-4 205kB ± 0% 205kB ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=10000-4 2.63MB ± 0% 2.63MB ± 0% ~ (p=0.073 n=15+15) IntersectsMultiPointWithMultiPoint/n=20-4 324B ± 0% 324B ± 0% ~ (all equal) IntersectsMultiPointWithMultiPoint/n=200-4 3.07kB ± 0% 3.07kB ± 0% ~ (p=0.808 n=12+14) IntersectsMultiPointWithMultiPoint/n=2000-4 49.3kB ± 0% 49.3kB ± 0% -0.00% (p=0.037 n=14+15) IntersectsMultiPointWithMultiPoint/n=20000-4 339kB ± 0% 339kB ± 0% ~ (p=0.431 n=14+15) PolygonSingleRingValidation/n=10-4 2.29kB ± 0% 2.29kB ± 0% ~ (all equal) PolygonSingleRingValidation/n=100-4 24.4kB ± 0% 24.4kB ± 0% ~ (all equal) PolygonSingleRingValidation/n=1000-4 140kB ± 0% 140kB ± 0% ~ (all equal) PolygonSingleRingValidation/n=10000-4 1.97MB ± 0% 1.97MB ± 0% -0.00% (p=0.049 n=15+13) PolygonMultipleRingsValidation/n=4-4 6.61kB ± 0% 6.61kB ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=36-4 53.2kB ± 0% 53.2kB ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=400-4 597kB ± 0% 597kB ± 0% -0.00% (p=0.026 n=15+13) PolygonMultipleRingsValidation/n=4096-4 6.28MB ± 0% 6.28MB ± 0% ~ (p=0.656 n=15+15) PolygonZigZagRingsValidation/n=10-4 9.62kB ± 0% 9.62kB ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=100-4 88.0kB ± 0% 88.0kB ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=1000-4 551kB ± 0% 551kB ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=10000-4 7.24MB ± 0% 7.24MB ± 0% ~ (p=0.106 n=12+14) PolygonAnnulusValidation/n=10-4 4.10kB ± 0% 4.10kB ± 0% ~ (all equal) PolygonAnnulusValidation/n=100-4 28.4kB ± 0% 28.4kB ± 0% ~ (all equal) PolygonAnnulusValidation/n=1000-4 379kB ± 0% 379kB ± 0% ~ (all equal) PolygonAnnulusValidation/n=10000-4 3.89MB ± 0% 3.89MB ± 0% ~ (p=1.000 n=15+15) MultipolygonValidation/n=1-4 481B ± 0% 481B ± 0% ~ (all equal) MultipolygonValidation/n=4-4 980B ± 0% 980B ± 0% ~ (all equal) MultipolygonValidation/n=16-4 4.16kB ± 0% 4.16kB ± 0% ~ (all equal) MultipolygonValidation/n=64-4 17.0kB ± 0% 17.0kB ± 0% ~ (all equal) MultipolygonValidation/n=256-4 67.8kB ± 0% 67.8kB ± 0% ~ (all equal) MultipolygonValidation/n=1024-4 271kB ± 0% 271kB ± 0% ~ (all equal) MultiPolygonTwoCircles/n=10-4 5.15kB ± 0% 5.15kB ± 0% ~ (all equal) MultiPolygonTwoCircles/n=100-4 55.1kB ± 0% 55.1kB ± 0% ~ (all equal) MultiPolygonTwoCircles/n=1000-4 345kB ± 0% 345kB ± 0% +0.00% (p=0.034 n=12+15) MultiPolygonTwoCircles/n=10000-4 4.60MB ± 0% 4.60MB ± 0% ~ (p=0.403 n=15+15) MultiPolygonMultipleTouchingPoints/n=1-4 4.16kB ± 0% 4.16kB ± 0% ~ (all equal) MultiPolygonMultipleTouchingPoints/n=10-4 23.9kB ± 0% 23.9kB ± 0% ~ (all equal) MultiPolygonMultipleTouchingPoints/n=100-4 182kB ± 0% 182kB ± 0% ~ (p=0.170 n=15+15) MultiPolygonMultipleTouchingPoints/n=1000-4 2.16MB ± 0% 2.16MB ± 0% ~ (p=0.532 n=15+15) WKTParsing/point-4 1.89kB ± 0% 1.89kB ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=100_swap=false-4 40.7kB ± 0% 40.7kB ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=100_swap=true-4 40.7kB ± 0% 40.7kB ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=1000_swap=false-4 369kB ± 0% 369kB ± 0% ~ (p=0.900 n=15+12) DistancePolygonToPolygonOrdering/n=1000_swap=true-4 369kB ± 0% 369kB ± 0% ~ (p=0.400 n=14+13) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4 5.52kB ± 0% 5.52kB ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4 5.52kB ± 0% 5.52kB ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4 60.1kB ± 0% 60.1kB ± 0% ~ (p=0.715 n=15+15) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4 60.1kB ± 0% 60.1kB ± 0% ~ (p=0.314 n=15+15) MultiLineStringIsSimpleManyLineStrings/n=100-4 59.2kB ± 0% 59.2kB ± 0% ~ (all equal) MultiLineStringIsSimpleManyLineStrings/n=1000-4 491kB ± 0% 491kB ± 0% ~ (all equal) ForceCWandForceCCW/0-4 0.00B 38.40B ±275% ~ (p=0.115 n=14+15) ForceCWandForceCCW/0#01-4 144B ± 0% 106B ±100% ~ (p=0.084 n=14+15) ForceCWandForceCCW/1-4 0.00B 48.00B ±200% ~ (p=0.074 n=12+15) ForceCWandForceCCW/1#01-4 144B ± 0% 96B ±100% -33.33% (p=0.020 n=12+15) ForceCWandForceCCW/2-4 0.00B 0.00B ~ (all equal) ForceCWandForceCCW/2#01-4 256B ± 0% 256B ± 0% ~ (all equal) ForceCWandForceCCW/3-4 0.00B 0.00B ~ (all equal) ForceCWandForceCCW/3#01-4 256B ± 0% 256B ± 0% ~ (all equal) ForceCWandForceCCW/4-4 0.00B 0.00B ~ (all equal) ForceCWandForceCCW/4#01-4 416B ± 0% 416B ± 0% ~ (all equal) ForceCWandForceCCW/5-4 0.00B 0.00B ~ (all equal) ForceCWandForceCCW/5#01-4 416B ± 0% 416B ± 0% ~ (all equal) ForceCWandForceCCW/6-4 0.00B 0.00B ~ (all equal) ForceCWandForceCCW/6#01-4 624B ± 0% 624B ± 0% ~ (all equal) EnvelopeTransformXY-4 0.00B 0.00B ~ (all equal) WKBParse/0-4 112B ± 0% 112B ± 0% ~ (all equal) WKBParse/1-4 112B ± 0% 112B ± 0% ~ (all equal) WKBParse/2-4 112B ± 0% 112B ± 0% ~ (all equal) WKBParse/3-4 112B ± 0% 112B ± 0% ~ (all equal) WKBParse/4-4 176B ± 0% 176B ± 0% ~ (all equal) WKBParse/5-4 120B ± 0% 120B ± 0% ~ (all equal) WKBParse/6-4 120B ± 0% 120B ± 0% ~ (all equal) WKBParse/7-4 120B ± 0% 120B ± 0% ~ (all equal) WKBParse/8-4 184B ± 0% 184B ± 0% ~ (all equal) WKBParse/9-4 72.0B ± 0% 72.0B ± 0% ~ (all equal) WKBParse/10-4 72.0B ± 0% 72.0B ± 0% ~ (all equal) WKBParse/11-4 72.0B ± 0% 72.0B ± 0% ~ (all equal) WKBParse/12-4 72.0B ± 0% 72.0B ± 0% ~ (all equal) WKBParse/13-4 200B ± 0% 200B ± 0% ~ (all equal) WKBParse/14-4 216B ± 0% 216B ± 0% ~ (all equal) WKBParse/15-4 216B ± 0% 216B ± 0% ~ (all equal) WKBParse/16-4 360B ± 0% 360B ± 0% ~ (all equal) WKBParse/17-4 216B ± 0% 216B ± 0% ~ (all equal) WKBParse/18-4 376B ± 0% 376B ± 0% ~ (all equal) WKBParse/19-4 376B ± 0% 376B ± 0% ~ (all equal) WKBParse/20-4 392B ± 0% 392B ± 0% ~ (all equal) WKBParse/21-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/22-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/23-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/24-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/25-4 808B ± 0% 808B ± 0% ~ (all equal) WKBParse/26-4 872B ± 0% 872B ± 0% ~ (all equal) WKBParse/27-4 872B ± 0% 872B ± 0% ~ (all equal) WKBParse/28-4 1.45kB ± 0% 1.45kB ± 0% ~ (all equal) WKBParse/29-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/30-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/31-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/32-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/33-4 248B ± 0% 248B ± 0% ~ (all equal) WKBParse/34-4 312B ± 0% 312B ± 0% ~ (all equal) WKBParse/35-4 312B ± 0% 312B ± 0% ~ (all equal) WKBParse/36-4 312B ± 0% 312B ± 0% ~ (all equal) WKBParse/37-4 456B ± 0% 456B ± 0% ~ (all equal) WKBParse/38-4 584B ± 0% 584B ± 0% ~ (all equal) WKBParse/39-4 584B ± 0% 584B ± 0% ~ (all equal) WKBParse/40-4 584B ± 0% 584B ± 0% ~ (all equal) WKBParse/41-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/42-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/43-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/44-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/45-4 440B ± 0% 440B ± 0% ~ (all equal) WKBParse/46-4 472B ± 0% 472B ± 0% ~ (all equal) WKBParse/47-4 472B ± 0% 472B ± 0% ~ (all equal) WKBParse/48-4 488B ± 0% 488B ± 0% ~ (all equal) WKBParse/49-4 568B ± 0% 568B ± 0% ~ (all equal) WKBParse/50-4 872B ± 0% 872B ± 0% ~ (all equal) WKBParse/51-4 872B ± 0% 872B ± 0% ~ (all equal) WKBParse/52-4 904B ± 0% 904B ± 0% ~ (all equal) WKBParse/53-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/54-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/55-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/56-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/57-4 1.07kB ± 0% 1.07kB ± 0% ~ (all equal) WKBParse/58-4 1.14kB ± 0% 1.14kB ± 0% ~ (all equal) WKBParse/59-4 1.14kB ± 0% 1.14kB ± 0% ~ (all equal) WKBParse/60-4 1.71kB ± 0% 1.71kB ± 0% ~ (all equal) WKBParse/61-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/62-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/63-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/64-4 64.0B ± 0% 64.0B ± 0% ~ (all equal) WKBParse/65-4 424B ± 0% 424B ± 0% ~ (all equal) WKBParse/66-4 552B ± 0% 552B ± 0% ~ (all equal) WKBParse/67-4 552B ± 0% 552B ± 0% ~ (all equal) WKBParse/68-4 552B ± 0% 552B ± 0% ~ (all equal) pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:arm64 IntersectionWithoutValidation/n=10-4 1.32kB ± 0% 1.32kB ± 0% ~ (all equal) IntersectionWithoutValidation/n=100-4 6.46kB ± 0% 6.46kB ± 0% ~ (all equal) IntersectionWithoutValidation/n=1000-4 55.1kB ± 0% 55.1kB ± 0% ~ (all equal) IntersectionWithoutValidation/n=10000-4 558kB ± 0% 558kB ± 0% ~ (p=0.845 n=15+15) NoOp/n=10-4 952B ± 0% 952B ± 0% ~ (all equal) NoOp/n=100-4 5.77kB ± 0% 5.77kB ± 0% ~ (all equal) NoOp/n=1000-4 49.5kB ± 0% 49.5kB ± 0% ~ (all equal) NoOp/n=10000-4 492kB ± 0% 492kB ± 0% ~ (p=0.182 n=15+14) pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:arm64 LineStringIsSimpleCircle/n=10-4 1.87kB ± 0% 1.87kB ± 0% ~ (all equal) LineStringIsSimpleCircle/n=100-4 24.0kB ± 0% 24.0kB ± 0% ~ (all equal) LineStringIsSimpleCircle/n=1000-4 139kB ± 0% 139kB ± 0% ~ (all equal) LineStringIsSimpleCircle/n=10000-4 1.97MB ± 0% 1.97MB ± 0% ~ (p=0.207 n=15+15) LineStringIsSimpleZigZag/10-4 1.84kB ± 0% 1.84kB ± 0% ~ (all equal) LineStringIsSimpleZigZag/100-4 24.0kB ± 0% 24.0kB ± 0% ~ (all equal) LineStringIsSimpleZigZag/1000-4 139kB ± 0% 139kB ± 0% ~ (all equal) LineStringIsSimpleZigZag/10000-4 1.97MB ± 0% 1.97MB ± 0% ~ (p=0.871 n=15+14) SetOperation/n=4/Go_Intersection-4 19.2kB ± 0% 17.1kB ± 0% -11.08% (p=0.000 n=15+14) SetOperation/n=4/Go_Difference-4 20.2kB ± 0% 18.0kB ± 0% -10.56% (p=0.000 n=15+15) SetOperation/n=4/Go_SymmetricDifference-4 28.3kB ± 0% 26.1kB ± 0% -7.54% (p=0.000 n=15+14) SetOperation/n=4/Go_Union-4 20.9kB ± 0% 18.7kB ± 0% -10.20% (p=0.000 n=15+15) SetOperation/n=4/GEOS_Intersection-4 1.77kB ± 0% 1.77kB ± 0% ~ (all equal) SetOperation/n=4/GEOS_Difference-4 2.78kB ± 0% 2.78kB ± 0% ~ (all equal) SetOperation/n=4/GEOS_SymmetricDifference-4 10.7kB ± 0% 10.7kB ± 0% ~ (all equal) SetOperation/n=4/GEOS_Union-4 3.21kB ± 0% 3.21kB ± 0% ~ (all equal) SetOperation/n=8/Go_Intersection-4 25.8kB ± 0% 23.7kB ± 0% -8.26% (p=0.000 n=15+15) SetOperation/n=8/Go_Difference-4 25.9kB ± 0% 23.8kB ± 0% -8.21% (p=0.000 n=14+15) SetOperation/n=8/Go_SymmetricDifference-4 35.6kB ± 0% 33.5kB ± 0% -5.99% (p=0.000 n=15+15) SetOperation/n=8/Go_Union-4 26.1kB ± 0% 23.9kB ± 0% -8.17% (p=0.000 n=15+15) SetOperation/n=8/GEOS_Intersection-4 3.34kB ± 0% 3.34kB ± 0% ~ (all equal) SetOperation/n=8/GEOS_Difference-4 3.50kB ± 0% 3.50kB ± 0% ~ (all equal) SetOperation/n=8/GEOS_SymmetricDifference-4 13.0kB ± 0% 13.0kB ± 0% ~ (all equal) SetOperation/n=8/GEOS_Union-4 3.62kB ± 0% 3.62kB ± 0% ~ (all equal) SetOperation/n=16/Go_Intersection-4 35.8kB ± 0% 33.7kB ± 0% -5.95% (p=0.000 n=15+15) SetOperation/n=16/Go_Difference-4 38.9kB ± 0% 36.8kB ± 0% -5.47% (p=0.000 n=15+15) SetOperation/n=16/Go_SymmetricDifference-4 57.2kB ± 0% 55.1kB ± 0% -3.72% (p=0.000 n=15+15) SetOperation/n=16/Go_Union-4 40.4kB ± 0% 38.3kB ± 0% -5.27% (p=0.000 n=15+15) SetOperation/n=16/GEOS_Intersection-4 3.88kB ± 0% 3.88kB ± 0% ~ (all equal) SetOperation/n=16/GEOS_Difference-4 6.68kB ± 0% 6.68kB ± 0% ~ (all equal) SetOperation/n=16/GEOS_SymmetricDifference-4 24.7kB ± 0% 24.7kB ± 0% ~ (all equal) SetOperation/n=16/GEOS_Union-4 8.28kB ± 0% 8.28kB ± 0% ~ (all equal) SetOperation/n=32/Go_Intersection-4 65.8kB ± 0% 63.7kB ± 0% -3.27% (p=0.000 n=15+15) SetOperation/n=32/Go_Difference-4 68.4kB ± 0% 66.3kB ± 0% -3.15% (p=0.000 n=15+15) SetOperation/n=32/Go_SymmetricDifference-4 97.7kB ± 0% 95.5kB ± 0% -2.21% (p=0.000 n=15+15) SetOperation/n=32/Go_Union-4 68.9kB ± 0% 66.7kB ± 0% -3.13% (p=0.000 n=14+15) SetOperation/n=32/GEOS_Intersection-4 8.86kB ± 0% 8.86kB ± 0% ~ (all equal) SetOperation/n=32/GEOS_Difference-4 10.7kB ± 0% 10.7kB ± 0% ~ (all equal) SetOperation/n=32/GEOS_SymmetricDifference-4 38.9kB ± 0% 38.9kB ± 0% ~ (all equal) SetOperation/n=32/GEOS_Union-4 11.5kB ± 0% 11.5kB ± 0% ~ (all equal) SetOperation/n=64/Go_Intersection-4 110kB ± 0% 108kB ± 0% -1.96% (p=0.000 n=15+15) SetOperation/n=64/Go_Difference-4 122kB ± 0% 120kB ± 0% -1.76% (p=0.000 n=15+14) SetOperation/n=64/Go_SymmetricDifference-4 188kB ± 0% 186kB ± 0% -1.14% (p=0.000 n=15+15) SetOperation/n=64/Go_Union-4 126kB ± 0% 124kB ± 0% -1.71% (p=0.000 n=15+15) SetOperation/n=64/GEOS_Intersection-4 12.6kB ± 0% 12.6kB ± 0% ~ (all equal) SetOperation/n=64/GEOS_Difference-4 23.5kB ± 0% 23.5kB ± 0% ~ (all equal) SetOperation/n=64/GEOS_SymmetricDifference-4 87.1kB ± 0% 87.1kB ± 0% ~ (all equal) SetOperation/n=64/GEOS_Union-4 28.0kB ± 0% 28.0kB ± 0% ~ (all equal) SetOperation/n=128/Go_Intersection-4 225kB ± 0% 223kB ± 0% -0.96% (p=0.000 n=14+15) SetOperation/n=128/Go_Difference-4 237kB ± 0% 235kB ± 0% -0.91% (p=0.000 n=15+15) SetOperation/n=128/Go_SymmetricDifference-4 347kB ± 0% 345kB ± 0% -0.62% (p=0.000 n=15+15) SetOperation/n=128/Go_Union-4 239kB ± 0% 236kB ± 0% -0.90% (p=0.000 n=14+15) SetOperation/n=128/GEOS_Intersection-4 30.3kB ± 0% 30.3kB ± 0% ~ (all equal) SetOperation/n=128/GEOS_Difference-4 40.0kB ± 0% 40.0kB ± 0% ~ (all equal) SetOperation/n=128/GEOS_SymmetricDifference-4 147kB ± 0% 147kB ± 0% ~ (all equal) SetOperation/n=128/GEOS_Union-4 43.1kB ± 0% 43.1kB ± 0% ~ (all equal) SetOperation/n=256/Go_Intersection-4 399kB ± 0% 397kB ± 0% -0.54% (p=0.000 n=15+14) SetOperation/n=256/Go_Difference-4 447kB ± 0% 444kB ± 0% -0.48% (p=0.000 n=13+15) SetOperation/n=256/Go_SymmetricDifference-4 700kB ± 0% 698kB ± 0% -0.31% (p=0.000 n=15+15) SetOperation/n=256/Go_Union-4 457kB ± 0% 455kB ± 0% -0.47% (p=0.000 n=15+15) SetOperation/n=256/GEOS_Intersection-4 48.2kB ± 0% 48.2kB ± 0% ~ (all equal) SetOperation/n=256/GEOS_Difference-4 92.6kB ± 0% 92.6kB ± 0% ~ (all equal) SetOperation/n=256/GEOS_SymmetricDifference-4 340kB ± 0% 340kB ± 0% ~ (p=0.115 n=14+15) SetOperation/n=256/GEOS_Union-4 106kB ± 0% 106kB ± 0% ~ (all equal) SetOperation/n=512/Go_Intersection-4 830kB ± 0% 828kB ± 0% -0.26% (p=0.000 n=15+15) SetOperation/n=512/Go_Difference-4 877kB ± 0% 875kB ± 0% -0.25% (p=0.000 n=15+15) SetOperation/n=512/Go_SymmetricDifference-4 1.30MB ± 0% 1.30MB ± 0% -0.16% (p=0.000 n=14+15) SetOperation/n=512/Go_Union-4 899kB ± 0% 896kB ± 0% -0.24% (p=0.000 n=15+13) SetOperation/n=512/GEOS_Intersection-4 115kB ± 0% 115kB ± 0% ~ (all equal) SetOperation/n=512/GEOS_Difference-4 159kB ± 0% 159kB ± 0% ~ (all equal) SetOperation/n=512/GEOS_SymmetricDifference-4 576kB ± 0% 576kB ± 0% ~ (p=0.756 n=15+15) SetOperation/n=512/GEOS_Union-4 171kB ± 0% 171kB ± 0% ~ (all equal) SetOperation/n=1024/Go_Intersection-4 1.55MB ± 0% 1.55MB ± 0% -0.14% (p=0.000 n=15+14) SetOperation/n=1024/Go_Difference-4 1.74MB ± 0% 1.74MB ± 0% -0.12% (p=0.000 n=15+15) SetOperation/n=1024/Go_SymmetricDifference-4 2.77MB ± 0% 2.77MB ± 0% -0.08% (p=0.000 n=15+15) SetOperation/n=1024/Go_Union-4 1.80MB ± 0% 1.80MB ± 0% -0.12% (p=0.000 n=15+15) SetOperation/n=1024/GEOS_Intersection-4 189kB ± 0% 189kB ± 0% ~ (p=0.100 n=15+15) SetOperation/n=1024/GEOS_Difference-4 369kB ± 0% 369kB ± 0% ~ (p=1.174 n=15+14) SetOperation/n=1024/GEOS_SymmetricDifference-4 1.38MB ± 0% 1.38MB ± 0% ~ (p=0.932 n=15+15) SetOperation/n=1024/GEOS_Union-4 415kB ± 0% 415kB ± 0% ~ (p=0.346 n=14+13) SetOperation/n=2048/Go_Intersection-4 3.41MB ± 0% 3.41MB ± 0% -0.06% (p=0.000 n=15+15) SetOperation/n=2048/Go_Difference-4 3.61MB ± 0% 3.61MB ± 0% -0.06% (p=0.000 n=14+15) SetOperation/n=2048/Go_SymmetricDifference-4 5.34MB ± 0% 5.34MB ± 0% -0.04% (p=0.000 n=15+15) SetOperation/n=2048/Go_Union-4 3.69MB ± 0% 3.69MB ± 0% -0.06% (p=0.000 n=13+15) SetOperation/n=2048/GEOS_Intersection-4 460kB ± 0% 460kB ± 0% ~ (p=0.208 n=15+15) SetOperation/n=2048/GEOS_Difference-4 648kB ± 0% 648kB ± 0% ~ (p=0.071 n=14+14) SetOperation/n=2048/GEOS_SymmetricDifference-4 2.32MB ± 0% 2.32MB ± 0% ~ (p=1.000 n=15+15) SetOperation/n=2048/GEOS_Union-4 689kB ± 0% 689kB ± 0% ~ (p=0.897 n=15+15) SetOperation/n=4096/Go_Intersection-4 6.53MB ± 0% 6.53MB ± 0% -0.03% (p=0.000 n=15+14) SetOperation/n=4096/Go_Difference-4 7.25MB ± 0% 7.25MB ± 0% -0.03% (p=0.000 n=15+15) SetOperation/n=4096/Go_SymmetricDifference-4 11.3MB ± 0% 11.3MB ± 0% -0.02% (p=0.000 n=14+15) SetOperation/n=4096/Go_Union-4 7.50MB ± 0% 7.50MB ± 0% -0.03% (p=0.000 n=15+15) SetOperation/n=4096/GEOS_Intersection-4 755kB ± 0% 755kB ± 0% ~ (p=0.833 n=15+15) SetOperation/n=4096/GEOS_Difference-4 1.45MB ± 0% 1.45MB ± 0% ~ (p=0.335 n=14+14) SetOperation/n=4096/GEOS_SymmetricDifference-4 5.34MB ± 0% 5.34MB ± 0% +0.00% (p=0.004 n=13+15) SetOperation/n=4096/GEOS_Union-4 1.63MB ± 0% 1.63MB ± 0% ~ (p=0.861 n=15+15) SetOperation/n=8192/Go_Intersection-4 14.0MB ± 0% 14.0MB ± 0% -0.02% (p=0.000 n=15+13) SetOperation/n=8192/Go_Difference-4 14.9MB ± 0% 14.9MB ± 0% -0.01% (p=0.000 n=15+15) SetOperation/n=8192/Go_SymmetricDifference-4 21.8MB ± 0% 21.8MB ± 0% -0.01% (p=0.000 n=14+15) SetOperation/n=8192/Go_Union-4 15.2MB ± 0% 15.2MB ± 0% -0.01% (p=0.000 n=14+15) SetOperation/n=8192/GEOS_Intersection-4 1.76MB ± 0% 1.76MB ± 0% ~ (p=0.740 n=13+15) SetOperation/n=8192/GEOS_Difference-4 2.47MB ± 0% 2.47MB ± 0% ~ (p=0.852 n=14+14) SetOperation/n=8192/GEOS_SymmetricDifference-4 9.01MB ± 0% 9.01MB ± 0% ~ (p=0.451 n=14+14) SetOperation/n=8192/GEOS_Union-4 2.66MB ± 0% 2.66MB ± 0% ~ (p=0.105 n=14+15) SetOperation/n=16384/Go_Intersection-4 26.0MB ± 0% 26.0MB ± 0% -0.01% (p=0.000 n=15+15) SetOperation/n=16384/Go_Difference-4 28.8MB ± 0% 28.8MB ± 0% -0.01% (p=0.000 n=15+15) SetOperation/n=16384/Go_SymmetricDifference-4 44.8MB ± 0% 44.8MB ± 0% -0.00% (p=0.000 n=15+15) SetOperation/n=16384/Go_Union-4 29.8MB ± 0% 29.8MB ± 0% -0.01% (p=0.000 n=14+15) SetOperation/n=16384/GEOS_Intersection-4 2.92MB ± 0% 2.92MB ± 0% ~ (p=0.957 n=14+15) SetOperation/n=16384/GEOS_Difference-4 5.68MB ± 0% 5.68MB ± 0% ~ (p=0.215 n=14+15) SetOperation/n=16384/GEOS_SymmetricDifference-4 21.1MB ± 0% 21.1MB ± 0% ~ (p=0.906 n=15+14) SetOperation/n=16384/GEOS_Union-4 6.45MB ± 0% 6.45MB ± 0% ~ (p=0.537 n=15+15) pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:arm64 Delete/n=100-4 712B ± 0% 712B ± 0% ~ (all equal) Delete/n=1000-4 26.1kB ± 0% 26.1kB ± 0% ~ (all equal) Delete/n=10000-4 412kB ± 0% 412kB ± 0% ~ (all equal) Bulk/n=10-4 1.46kB ± 0% 1.46kB ± 0% ~ (all equal) Bulk/n=100-4 19.9kB ± 0% 19.9kB ± 0% ~ (all equal) Bulk/n=1000-4 98.2kB ± 0% 98.2kB ± 0% ~ (all equal) Bulk/n=10000-4 1.57MB ± 0% 1.57MB ± 0% ~ (p=0.288 n=14+14) Bulk/n=100000-4 20.4MB ± 0% 20.4MB ± 0% ~ (p=0.466 n=14+15) Insert/n=10-4 1.44kB ± 0% 1.44kB ± 0% ~ (all equal) Insert/n=100-4 13.5kB ± 0% 13.5kB ± 0% ~ (all equal) Insert/n=1000-4 132kB ± 0% 132kB ± 0% ~ (all equal) Insert/n=10000-4 1.34MB ± 0% 1.34MB ± 0% ~ (p=0.394 n=15+14) Insert/n=100000-4 13.5MB ± 0% 13.5MB ± 0% ~ (p=0.249 n=13+14) RangeSearch/n=10-4 0.00B 0.00B ~ (all equal) RangeSearch/n=100-4 0.00B 0.00B ~ (all equal) RangeSearch/n=1000-4 0.00B 0.00B ~ (all equal) RangeSearch/n=10000-4 0.00B 0.00B ~ (all equal) RangeSearch/n=100000-4 0.00B 0.00B ~ (all equal) name old allocs/op new allocs/op delta pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:arm64 LineEnvelope/0-4 0.00 0.00 ~ (all equal) LineEnvelope/1-4 0.00 0.00 ~ (all equal) LineEnvelope/2-4 0.00 0.00 ~ (all equal) LineEnvelope/3-4 0.00 0.00 ~ (all equal) MarshalWKB/polygon/n=10-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) MarshalWKB/polygon/n=100-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) MarshalWKB/polygon/n=1000-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) MarshalWKB/polygon/n=10000-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) UnmarshalWKB/polygon/n=10-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) UnmarshalWKB/polygon/n=100-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) UnmarshalWKB/polygon/n=1000-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) UnmarshalWKB/polygon/n=10000-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=10-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=100-4 73.0 ± 0% 73.0 ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=1000-4 345 ± 0% 345 ± 0% ~ (all equal) IntersectsLineStringWithLineString/n=10000-4 5.46k ± 0% 5.46k ± 0% ~ (all equal) IntersectsMultiPointWithMultiPoint/n=20-4 1.00 ± 0% 1.00 ± 0% ~ (all equal) IntersectsMultiPointWithMultiPoint/n=200-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) IntersectsMultiPointWithMultiPoint/n=2000-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) IntersectsMultiPointWithMultiPoint/n=20000-4 11.0 ± 0% 11.0 ± 0% ~ (all equal) PolygonSingleRingValidation/n=10-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) PolygonSingleRingValidation/n=100-4 76.0 ± 0% 76.0 ± 0% ~ (all equal) PolygonSingleRingValidation/n=1000-4 348 ± 0% 348 ± 0% ~ (all equal) PolygonSingleRingValidation/n=10000-4 5.47k ± 0% 5.47k ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=4-4 42.0 ± 0% 42.0 ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=36-4 316 ± 0% 316 ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=400-4 3.48k ± 0% 3.48k ± 0% ~ (all equal) PolygonMultipleRingsValidation/n=4096-4 36.2k ± 0% 36.2k ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=10-4 41.0 ± 0% 41.0 ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=100-4 233 ± 0% 233 ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=1000-4 1.05k ± 0% 1.05k ± 0% ~ (all equal) PolygonZigZagRingsValidation/n=10000-4 16.4k ± 0% 16.4k ± 0% ~ (all equal) PolygonAnnulusValidation/n=10-4 22.0 ± 0% 22.0 ± 0% ~ (all equal) PolygonAnnulusValidation/n=100-4 76.0 ± 0% 76.0 ± 0% ~ (all equal) PolygonAnnulusValidation/n=1000-4 1.00k ± 0% 1.00k ± 0% ~ (all equal) PolygonAnnulusValidation/n=10000-4 10.3k ± 0% 10.3k ± 0% ~ (all equal) MultipolygonValidation/n=1-4 8.00 ± 0% 8.00 ± 0% ~ (all equal) MultipolygonValidation/n=4-4 11.0 ± 0% 11.0 ± 0% ~ (all equal) MultipolygonValidation/n=16-4 27.0 ± 0% 27.0 ± 0% ~ (all equal) MultipolygonValidation/n=64-4 91.0 ± 0% 91.0 ± 0% ~ (all equal) MultipolygonValidation/n=256-4 347 ± 0% 347 ± 0% ~ (all equal) MultipolygonValidation/n=1024-4 1.37k ± 0% 1.37k ± 0% ~ (all equal) MultiPolygonTwoCircles/n=10-4 29.0 ± 0% 29.0 ± 0% ~ (all equal) MultiPolygonTwoCircles/n=100-4 157 ± 0% 157 ± 0% ~ (all equal) MultiPolygonTwoCircles/n=1000-4 701 ± 0% 701 ± 0% ~ (all equal) MultiPolygonTwoCircles/n=10000-4 10.9k ± 0% 10.9k ± 0% ~ (all equal) MultiPolygonMultipleTouchingPoints/n=1-4 51.0 ± 0% 51.0 ± 0% ~ (all equal) MultiPolygonMultipleTouchingPoints/n=10-4 298 ± 0% 298 ± 0% ~ (all equal) MultiPolygonMultipleTouchingPoints/n=100-4 2.61k ± 0% 2.61k ± 0% +0.02% (p=0.006 n=12+15) MultiPolygonMultipleTouchingPoints/n=1000-4 26.7k ± 0% 26.7k ± 0% ~ (p=0.654 n=15+15) WKTParsing/point-4 22.0 ± 0% 22.0 ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=100_swap=false-4 234 ± 0% 234 ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=100_swap=true-4 234 ± 0% 234 ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=1000_swap=false-4 2.10k ± 0% 2.10k ± 0% ~ (all equal) DistancePolygonToPolygonOrdering/n=1000_swap=true-4 2.10k ± 0% 2.10k ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4 13.0 ± 0% 13.0 ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4 13.0 ± 0% 13.0 ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4 77.0 ± 0% 77.0 ± 0% ~ (all equal) IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4 77.0 ± 0% 77.0 ± 0% ~ (all equal) MultiLineStringIsSimpleManyLineStrings/n=100-4 371 ± 0% 371 ± 0% ~ (all equal) MultiLineStringIsSimpleManyLineStrings/n=1000-4 3.34k ± 0% 3.34k ± 0% ~ (all equal) ForceCWandForceCCW/0-4 0.00 0.80 ±275% ~ (p=0.115 n=14+15) ForceCWandForceCCW/0#01-4 3.00 ± 0% 2.20 ±100% ~ (p=0.084 n=14+15) ForceCWandForceCCW/1-4 0.00 1.00 ±200% ~ (p=0.074 n=12+15) ForceCWandForceCCW/1#01-4 3.00 ± 0% 2.00 ±100% -33.33% (p=0.020 n=12+15) ForceCWandForceCCW/2-4 0.00 0.00 ~ (all equal) ForceCWandForceCCW/2#01-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) ForceCWandForceCCW/3-4 0.00 0.00 ~ (all equal) ForceCWandForceCCW/3#01-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) ForceCWandForceCCW/4-4 0.00 0.00 ~ (all equal) ForceCWandForceCCW/4#01-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) ForceCWandForceCCW/5-4 0.00 0.00 ~ (all equal) ForceCWandForceCCW/5#01-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) ForceCWandForceCCW/6-4 0.00 0.00 ~ (all equal) ForceCWandForceCCW/6#01-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) EnvelopeTransformXY-4 0.00 0.00 ~ (all equal) WKBParse/0-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/1-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/2-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/3-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/4-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) WKBParse/5-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) WKBParse/6-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) WKBParse/7-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) WKBParse/8-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) WKBParse/9-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/10-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/11-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/12-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) WKBParse/13-4 8.00 ± 0% 8.00 ± 0% ~ (all equal) WKBParse/14-4 8.00 ± 0% 8.00 ± 0% ~ (all equal) WKBParse/15-4 8.00 ± 0% 8.00 ± 0% ~ (all equal) WKBParse/16-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) WKBParse/17-4 8.00 ± 0% 8.00 ± 0% ~ (all equal) WKBParse/18-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) WKBParse/19-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) WKBParse/20-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) WKBParse/21-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/22-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/23-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/24-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/25-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/26-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/27-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/28-4 16.0 ± 0% 16.0 ± 0% ~ (all equal) WKBParse/29-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/30-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/31-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/32-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/33-4 9.00 ± 0% 9.00 ± 0% ~ (all equal) WKBParse/34-4 10.0 ± 0% 10.0 ± 0% ~ (all equal) WKBParse/35-4 10.0 ± 0% 10.0 ± 0% ~ (all equal) WKBParse/36-4 10.0 ± 0% 10.0 ± 0% ~ (all equal) WKBParse/37-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) WKBParse/38-4 13.0 ± 0% 13.0 ± 0% ~ (all equal) WKBParse/39-4 13.0 ± 0% 13.0 ± 0% ~ (all equal) WKBParse/40-4 13.0 ± 0% 13.0 ± 0% ~ (all equal) WKBParse/41-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/42-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/43-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/44-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/45-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) WKBParse/46-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) WKBParse/47-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) WKBParse/48-4 12.0 ± 0% 12.0 ± 0% ~ (all equal) WKBParse/49-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/50-4 16.0 ± 0% 16.0 ± 0% ~ (all equal) WKBParse/51-4 16.0 ± 0% 16.0 ± 0% ~ (all equal) WKBParse/52-4 16.0 ± 0% 16.0 ± 0% ~ (all equal) WKBParse/53-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/54-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/55-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/56-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/57-4 25.0 ± 0% 25.0 ± 0% ~ (all equal) WKBParse/58-4 25.0 ± 0% 25.0 ± 0% ~ (all equal) WKBParse/59-4 25.0 ± 0% 25.0 ± 0% ~ (all equal) WKBParse/60-4 26.0 ± 0% 26.0 ± 0% ~ (all equal) WKBParse/61-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/62-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/63-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/64-4 4.00 ± 0% 4.00 ± 0% ~ (all equal) WKBParse/65-4 14.0 ± 0% 14.0 ± 0% ~ (all equal) WKBParse/66-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/67-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) WKBParse/68-4 15.0 ± 0% 15.0 ± 0% ~ (all equal) pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:arm64 IntersectionWithoutValidation/n=10-4 48.0 ± 0% 48.0 ± 0% ~ (all equal) IntersectionWithoutValidation/n=100-4 48.0 ± 0% 48.0 ± 0% ~ (all equal) IntersectionWithoutValidation/n=1000-4 48.0 ± 0% 48.0 ± 0% ~ (all equal) IntersectionWithoutValidation/n=10000-4 48.0 ± 0% 48.0 ± 0% ~ (all equal) NoOp/n=10-4 33.0 ± 0% 33.0 ± 0% ~ (all equal) NoOp/n=100-4 33.0 ± 0% 33.0 ± 0% ~ (all equal) NoOp/n=1000-4 33.0 ± 0% 33.0 ± 0% ~ (all equal) NoOp/n=10000-4 33.0 ± 0% 33.0 ± 0% ~ (all equal) pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:arm64 LineStringIsSimpleCircle/n=10-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) LineStringIsSimpleCircle/n=100-4 71.0 ± 0% 71.0 ± 0% ~ (all equal) LineStringIsSimpleCircle/n=1000-4 343 ± 0% 343 ± 0% ~ (all equal) LineStringIsSimpleCircle/n=10000-4 5.46k ± 0% 5.46k ± 0% ~ (all equal) LineStringIsSimpleZigZag/10-4 7.00 ± 0% 7.00 ± 0% ~ (all equal) LineStringIsSimpleZigZag/100-4 71.0 ± 0% 71.0 ± 0% ~ (all equal) LineStringIsSimpleZigZag/1000-4 343 ± 0% 343 ± 0% ~ (all equal) LineStringIsSimpleZigZag/10000-4 5.46k ± 0% 5.46k ± 0% ~ (all equal) SetOperation/n=4/Go_Intersection-4 268 ± 0% 211 ± 0% -21.27% (p=0.000 n=15+15) SetOperation/n=4/Go_Difference-4 272 ± 0% 215 ± 0% -20.96% (p=0.000 n=15+15) SetOperation/n=4/Go_SymmetricDifference-4 370 ± 0% 313 ± 0% -15.41% (p=0.000 n=15+15) SetOperation/n=4/Go_Union-4 279 ± 0% 222 ± 0% -20.43% (p=0.000 n=15+15) SetOperation/n=4/GEOS_Intersection-4 52.0 ± 0% 52.0 ± 0% ~ (all equal) SetOperation/n=4/GEOS_Difference-4 55.0 ± 0% 55.0 ± 0% ~ (all equal) SetOperation/n=4/GEOS_SymmetricDifference-4 146 ± 0% 146 ± 0% ~ (all equal) SetOperation/n=4/GEOS_Union-4 56.0 ± 0% 56.0 ± 0% ~ (all equal) SetOperation/n=8/Go_Intersection-4 284 ± 0% 227 ± 0% -20.15% (p=0.000 n=15+15) SetOperation/n=8/Go_Difference-4 285 ± 0% 228 ± 0% -20.00% (p=0.000 n=14+13) SetOperation/n=8/Go_SymmetricDifference-4 379 ± 0% 322 ± 0% -15.10% (p=0.000 n=15+14) SetOperation/n=8/Go_Union-4 290 ± 0% 233 ± 0% -19.66% (p=0.000 n=14+13) SetOperation/n=8/GEOS_Intersection-4 56.0 ± 0% 56.0 ± 0% ~ (all equal) SetOperation/n=8/GEOS_Difference-4 56.0 ± 0% 56.0 ± 0% ~ (all equal) SetOperation/n=8/GEOS_SymmetricDifference-4 143 ± 0% 143 ± 0% ~ (all equal) SetOperation/n=8/GEOS_Union-4 56.0 ± 0% 56.0 ± 0% ~ (all equal) SetOperation/n=16/Go_Intersection-4 296 ± 0% 239 ± 0% -19.26% (p=0.000 n=15+15) SetOperation/n=16/Go_Difference-4 306 ± 0% 249 ± 0% -18.63% (p=0.000 n=15+15) SetOperation/n=16/Go_SymmetricDifference-4 413 ± 0% 356 ± 0% -13.80% (p=0.000 n=15+15) SetOperation/n=16/Go_Union-4 315 ± 0% 258 ± 0% -18.10% (p=0.000 n=15+15) SetOperation/n=16/GEOS_Intersection-4 56.0 ± 0% 56.0 ± 0% ~ (all equal) SetOperation/n=16/GEOS_Difference-4 64.0 ± 0% 64.0 ± 0% ~ (all equal) SetOperation/n=16/GEOS_SymmetricDifference-4 169 ± 0% 169 ± 0% ~ (all equal) SetOperation/n=16/GEOS_Union-4 68.0 ± 0% 68.0 ± 0% ~ (all equal) SetOperation/n=32/Go_Intersection-4 347 ± 0% 289 ± 0% -16.71% (p=0.000 n=15+15) SetOperation/n=32/Go_Difference-4 353 ± 0% 295 ± 0% -16.43% (p=0.000 n=15+15) SetOperation/n=32/Go_SymmetricDifference-4 485 ± 0% 427 ± 0% -11.96% (p=0.000 n=15+15) SetOperation/n=32/Go_Union-4 358 ± 0% 300 ± 0% -16.20% (p=0.000 n=15+15) SetOperation/n=32/GEOS_Intersection-4 68.0 ± 0% 68.0 ± 0% ~ (all equal) SetOperation/n=32/GEOS_Difference-4 72.0 ± 0% 72.0 ± 0% ~ (all equal) SetOperation/n=32/GEOS_SymmetricDifference-4 189 ± 0% 189 ± 0% ~ (all equal) SetOperation/n=32/GEOS_Union-4 72.0 ± 0% 72.0 ± 0% ~ (all equal) SetOperation/n=64/Go_Intersection-4 388 ± 0% 330 ± 0% -14.95% (p=0.000 n=14+15) SetOperation/n=64/Go_Difference-4 422 ± 0% 364 ± 0% -13.74% (p=0.000 n=15+15) SetOperation/n=64/Go_SymmetricDifference-4 669 ± 0% 611 ± 0% -8.67% (p=0.000 n=15+14) SetOperation/n=64/Go_Union-4 435 ± 0% 377 ± 0% -13.33% (p=0.000 n=14+15) SetOperation/n=64/GEOS_Intersection-4 72.0 ± 0% 72.0 ± 0% ~ (all equal) SetOperation/n=64/GEOS_Difference-4 104 ± 0% 104 ± 0% ~ (all equal) SetOperation/n=64/GEOS_SymmetricDifference-4 335 ± 0% 335 ± 0% ~ (all equal) SetOperation/n=64/GEOS_Union-4 112 ± 0% 112 ± 0% ~ (all equal) SetOperation/n=128/Go_Intersection-4 562 ± 0% 504 ± 0% -10.32% (p=0.000 n=15+15) SetOperation/n=128/Go_Difference-4 588 ± 0% 530 ± 0% -9.86% (p=0.000 n=15+15) SetOperation/n=128/Go_SymmetricDifference-4 914 ± 0% 856 ± 0% -6.35% (p=0.000 n=15+15) SetOperation/n=128/Go_Union-4 593 ± 0% 535 ± 0% -9.78% (p=0.000 n=15+15) SetOperation/n=128/GEOS_Intersection-4 112 ± 0% 112 ± 0% ~ (all equal) SetOperation/n=128/GEOS_Difference-4 136 ± 0% 136 ± 0% ~ (all equal) SetOperation/n=128/GEOS_SymmetricDifference-4 457 ± 0% 457 ± 0% ~ (all equal) SetOperation/n=128/GEOS_Union-4 136 ± 0% 136 ± 0% ~ (all equal) SetOperation/n=256/Go_Intersection-4 721 ± 0% 663 ± 0% -8.04% (p=0.000 n=15+15) SetOperation/n=256/Go_Difference-4 851 ± 0% 793 ± 0% -6.82% (p=0.000 n=14+13) SetOperation/n=256/Go_SymmetricDifference-4 1.57k ± 0% 1.52k ± 0% -3.68% (p=0.000 n=15+14) SetOperation/n=256/Go_Union-4 880 ± 0% 822 ± 0% -6.59% (p=0.000 n=14+14) SetOperation/n=256/GEOS_Intersection-4 136 ± 0% 136 ± 0% ~ (all equal) SetOperation/n=256/GEOS_Difference-4 264 ± 0% 264 ± 0% ~ (all equal) SetOperation/n=256/GEOS_SymmetricDifference-4 969 ± 0% 969 ± 0% ~ (all equal) SetOperation/n=256/GEOS_Union-4 288 ± 0% 288 ± 0% ~ (all equal) SetOperation/n=512/Go_Intersection-4 1.39k ± 0% 1.33k ± 0% -4.17% (p=0.000 n=13+15) SetOperation/n=512/Go_Difference-4 1.50k ± 0% 1.44k ± 0% -3.87% (p=0.000 n=15+12) SetOperation/n=512/Go_SymmetricDifference-4 2.61k ± 0% 2.55k ± 0% -2.22% (p=0.000 n=14+14) SetOperation/n=512/Go_Union-4 1.50k ± 0% 1.45k ± 0% -3.86% (p=0.000 n=13+14) SetOperation/n=512/GEOS_Intersection-4 288 ± 0% 288 ± 0% ~ (all equal) SetOperation/n=512/GEOS_Difference-4 392 ± 0% 392 ± 0% ~ (all equal) SetOperation/n=512/GEOS_SymmetricDifference-4 1.48k ± 0% 1.48k ± 0% ~ (all equal) SetOperation/n=512/GEOS_Union-4 392 ± 0% 392 ± 0% ~ (all equal) SetOperation/n=1024/Go_Intersection-4 2.02k ± 0% 1.96k ± 0% -2.87% (p=0.000 n=13+14) SetOperation/n=1024/Go_Difference-4 2.53k ± 0% 2.47k ± 0% -2.29% (p=0.000 n=13+15) SetOperation/n=1024/Go_SymmetricDifference-4 5.18k ± 0% 5.12k ± 0% -1.12% (p=0.000 n=15+13) SetOperation/n=1024/Go_Union-4 2.63k ± 0% 2.57k ± 0% -2.21% (p=0.000 n=14+15) SetOperation/n=1024/GEOS_Intersection-4 392 ± 0% 392 ± 0% ~ (all equal) SetOperation/n=1024/GEOS_Difference-4 904 ± 0% 904 ± 0% ~ (all equal) SetOperation/n=1024/GEOS_SymmetricDifference-4 3.52k ± 0% 3.52k ± 0% ~ (all equal) SetOperation/n=1024/GEOS_Union-4 992 ± 0% 992 ± 0% ~ (all equal) SetOperation/n=2048/Go_Intersection-4 4.68k ± 0% 4.62k ± 0% -1.24% (p=0.000 n=15+15) SetOperation/n=2048/Go_Difference-4 5.10k ± 0% 5.04k ± 0% -1.14% (p=0.000 n=15+15) SetOperation/n=2048/Go_SymmetricDifference-4 9.28k ± 0% 9.22k ± 0% -0.62% (p=0.000 n=14+15) SetOperation/n=2048/Go_Union-4 5.11k ± 0% 5.05k ± 0% -1.14% (p=0.000 n=15+15) SetOperation/n=2048/GEOS_Intersection-4 992 ± 0% 992 ± 0% ~ (all equal) SetOperation/n=2048/GEOS_Difference-4 1.42k ± 0% 1.42k ± 0% ~ (all equal) SetOperation/n=2048/GEOS_SymmetricDifference-4 5.58k ± 0% 5.58k ± 0% ~ (all equal) SetOperation/n=2048/GEOS_Union-4 1.42k ± 0% 1.42k ± 0% ~ (all equal) SetOperation/n=4096/Go_Intersection-4 7.16k ± 0% 7.10k ± 0% -0.81% (p=0.000 n=14+13) SetOperation/n=4096/Go_Difference-4 9.21k ± 0% 9.15k ± 0% -0.63% (p=0.000 n=14+15) SetOperation/n=4096/Go_SymmetricDifference-4 19.5k ± 0% 19.5k ± 0% -0.30% (p=0.000 n=15+15) SetOperation/n=4096/Go_Union-4 9.56k ± 0% 9.50k ± 0% -0.60% (p=0.000 n=12+15) SetOperation/n=4096/GEOS_Intersection-4 1.42k ± 0% 1.42k ± 0% ~ (all equal) SetOperation/n=4096/GEOS_Difference-4 3.46k ± 0% 3.46k ± 0% ~ (all equal) SetOperation/n=4096/GEOS_SymmetricDifference-4 13.8k ± 0% 13.8k ± 0% ~ (all equal) SetOperation/n=4096/GEOS_Union-4 3.81k ± 0% 3.81k ± 0% ~ (all equal) SetOperation/n=8192/Go_Intersection-4 17.8k ± 0% 17.7k ± 0% -0.33% (p=0.000 n=15+15) SetOperation/n=8192/Go_Difference-4 19.5k ± 0% 19.4k ± 0% -0.30% (p=0.000 n=15+13) SetOperation/n=8192/Go_SymmetricDifference-4 35.9k ± 0% 35.9k ± 0% -0.16% (p=0.000 n=15+15) SetOperation/n=8192/Go_Union-4 19.5k ± 0% 19.4k ± 0% -0.30% (p=0.000 n=15+15) SetOperation/n=8192/GEOS_Intersection-4 3.81k ± 0% 3.81k ± 0% ~ (all equal) SetOperation/n=8192/GEOS_Difference-4 5.51k ± 0% 5.51k ± 0% ~ (all equal) SetOperation/n=8192/GEOS_SymmetricDifference-4 22.0k ± 0% 22.0k ± 0% ~ (all equal) SetOperation/n=8192/GEOS_Union-4 5.51k ± 0% 5.51k ± 0% ~ (all equal) SetOperation/n=16384/Go_Intersection-4 27.7k ± 0% 27.6k ± 0% -0.21% (p=0.000 n=15+15) SetOperation/n=16384/Go_Difference-4 35.9k ± 0% 35.8k ± 0% -0.16% (p=0.000 n=15+15) SetOperation/n=16384/Go_SymmetricDifference-4 76.9k ± 0% 76.8k ± 0% -0.08% (p=0.000 n=15+15) SetOperation/n=16384/Go_Union-4 37.2k ± 0% 37.2k ± 0% -0.15% (p=0.000 n=15+12) SetOperation/n=16384/GEOS_Intersection-4 5.51k ± 0% 5.51k ± 0% ~ (all equal) SetOperation/n=16384/GEOS_Difference-4 13.7k ± 0% 13.7k ± 0% ~ (all equal) SetOperation/n=16384/GEOS_SymmetricDifference-4 54.7k ± 0% 54.7k ± 0% ~ (all equal) SetOperation/n=16384/GEOS_Union-4 15.1k ± 0% 15.1k ± 0% ~ (all equal) pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:arm64 Delete/n=100-4 65.0 ± 0% 65.0 ± 0% ~ (all equal) Delete/n=1000-4 480 ± 0% 480 ± 0% ~ (all equal) Delete/n=10000-4 7.62k ± 0% 7.62k ± 0% ~ (all equal) Bulk/n=10-4 6.00 ± 0% 6.00 ± 0% ~ (all equal) Bulk/n=100-4 70.0 ± 0% 70.0 ± 0% ~ (all equal) Bulk/n=1000-4 342 ± 0% 342 ± 0% ~ (all equal) Bulk/n=10000-4 5.46k ± 0% 5.46k ± 0% ~ (all equal) Bulk/n=100000-4 71.0k ± 0% 71.0k ± 0% ~ (all equal) Insert/n=10-4 5.00 ± 0% 5.00 ± 0% ~ (all equal) Insert/n=100-4 47.0 ± 0% 47.0 ± 0% ~ (all equal) Insert/n=1000-4 457 ± 0% 457 ± 0% ~ (all equal) Insert/n=10000-4 4.65k ± 0% 4.65k ± 0% ~ (all equal) Insert/n=100000-4 46.8k ± 0% 46.8k ± 0% ~ (all equal) RangeSearch/n=10-4 0.00 0.00 ~ (all equal) RangeSearch/n=100-4 0.00 0.00 ~ (all equal) RangeSearch/n=1000-4 0.00 0.00 ~ (all equal) RangeSearch/n=10000-4 0.00 0.00 ~ (all equal) RangeSearch/n=100000-4 0.00 0.00 ~ (all equal) ```
peterstace commented 1 year ago

Thanks for the review!