Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use Spanning Tree for Ghost Lines #339

Merged
merged 1 commit into from
Jan 29, 2021
Merged

Conversation

peterstace
Copy link
Owner

@peterstace peterstace commented Jan 28, 2021

Description

Previously, we used a spanning tree where one node was chosen arbitrarily as the root and edges created that span out to all other nodes. This causes many crossover points with the remaining geometries. By using a near-minimum spanning tree, we significantly reduce the number of crossovers.

Check List

Have you:

  • Added unit tests? Yes.

  • Add cmprefimpl tests? (if appropriate?) N/A, relies on existing.

Related Issue

Benchmark Results

No significant difference:

Click to expand
name                                                        old time/op    new time/op    delta
pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:amd64
LineEnvelope/0-4                                              1.62ns ±13%    1.68ns ±15%     ~     (p=0.143 n=13+14)
LineEnvelope/1-4                                              1.05ns ± 5%    1.09ns ±11%   +3.94%  (p=0.003 n=14+14)
LineEnvelope/2-4                                              1.31ns ± 7%    1.37ns ±12%   +4.79%  (p=0.003 n=15+14)
LineEnvelope/3-4                                              1.17ns ± 5%    1.22ns ± 8%   +4.09%  (p=0.001 n=15+15)
MarshalWKB/polygon/n=10-4                                      197ns ±15%     195ns ±14%     ~     (p=0.855 n=15+14)
MarshalWKB/polygon/n=100-4                                     630ns ±37%     575ns ± 9%   -8.77%  (p=0.045 n=13+13)
MarshalWKB/polygon/n=1000-4                                   3.91µs ±59%    5.51µs ±99%  +40.79%  (p=0.018 n=12+15)
MarshalWKB/polygon/n=10000-4                                  35.7µs ±36%    38.6µs ±63%     ~     (p=0.747 n=14+15)
UnmarshalWKB/polygon/n=10-4                                    324ns ±12%     326ns ±16%     ~     (p=0.692 n=14+14)
UnmarshalWKB/polygon/n=100-4                                   723ns ±28%     822ns ±66%     ~     (p=0.088 n=13+13)
UnmarshalWKB/polygon/n=1000-4                                 4.23µs ±39%    4.54µs ±31%     ~     (p=0.246 n=14+14)
UnmarshalWKB/polygon/n=10000-4                                38.5µs ±20%    40.1µs ±22%     ~     (p=0.376 n=12+13)
IntersectsLineStringWithLineString/n=10-4                     1.53µs ±19%    1.52µs ± 8%     ~     (p=0.641 n=13+15)
IntersectsLineStringWithLineString/n=100-4                    21.2µs ± 7%    21.3µs ±13%     ~     (p=1.000 n=14+13)
IntersectsLineStringWithLineString/n=1000-4                    208µs ±12%     214µs ±13%     ~     (p=0.354 n=15+14)
IntersectsLineStringWithLineString/n=10000-4                  3.00ms ±10%    3.06ms ±13%     ~     (p=0.458 n=13+14)
IntersectsMultiPointWithMultiPoint/n=20-4                     1.32µs ± 3%    1.34µs ± 4%     ~     (p=0.128 n=14+14)
IntersectsMultiPointWithMultiPoint/n=200-4                    13.9µs ± 2%    14.4µs ± 7%   +3.73%  (p=0.009 n=14+15)
IntersectsMultiPointWithMultiPoint/n=2000-4                    141µs ± 9%     144µs ± 9%     ~     (p=0.539 n=15+15)
IntersectsMultiPointWithMultiPoint/n=20000-4                  1.54ms ± 5%    1.54ms ± 5%     ~     (p=0.949 n=15+14)
PolygonSingleRingValidation/n=10-4                            2.55µs ±35%    2.52µs ± 8%     ~     (p=0.128 n=13+14)
PolygonSingleRingValidation/n=100-4                           32.4µs ± 4%    31.8µs ± 5%   -1.82%  (p=0.031 n=14+14)
PolygonSingleRingValidation/n=1000-4                           395µs ± 3%     395µs ± 5%     ~     (p=0.856 n=13+15)
PolygonSingleRingValidation/n=10000-4                         5.03ms ± 7%    4.96ms ±10%     ~     (p=0.339 n=15+13)
PolygonMultipleRingsValidation/n=4-4                          6.68µs ± 7%    6.73µs ± 6%     ~     (p=0.621 n=12+13)
PolygonMultipleRingsValidation/n=36-4                         56.9µs ±11%    61.1µs ±31%     ~     (p=0.279 n=13+15)
PolygonMultipleRingsValidation/n=400-4                         744µs ± 6%     827µs ±48%     ~     (p=0.550 n=13+14)
PolygonMultipleRingsValidation/n=4096-4                       8.83ms ± 8%    8.78ms ± 9%     ~     (p=0.603 n=14+14)
PolygonZigZagRingsValidation/n=10-4                           11.2µs ± 6%    11.2µs ± 8%     ~     (p=0.412 n=15+15)
PolygonZigZagRingsValidation/n=100-4                           131µs ±10%     131µs ± 7%     ~     (p=0.847 n=14+15)
PolygonZigZagRingsValidation/n=1000-4                         1.50ms ±12%    1.47ms ± 6%     ~     (p=0.616 n=13+14)
PolygonZigZagRingsValidation/n=10000-4                        19.8ms ± 6%    19.8ms ± 7%     ~     (p=1.000 n=15+14)
PolygonAnnulusValidation/n=10-4                               3.83µs ±12%    3.76µs ±10%     ~     (p=0.677 n=13+13)
PolygonAnnulusValidation/n=100-4                              33.5µs ±10%    32.6µs ± 5%     ~     (p=0.108 n=15+13)
PolygonAnnulusValidation/n=1000-4                              550µs ± 4%     555µs ± 9%     ~     (p=0.813 n=15+14)
PolygonAnnulusValidation/n=10000-4                            6.47ms ± 6%    6.71ms ±12%     ~     (p=0.069 n=14+14)
MultipolygonValidation/n=1-4                                   389ns ±16%     413ns ±18%   +6.40%  (p=0.040 n=13+15)
MultipolygonValidation/n=4-4                                   894ns ±10%     929ns ±21%     ~     (p=0.329 n=14+14)
MultipolygonValidation/n=16-4                                 3.56µs ± 5%    3.69µs ±10%   +3.71%  (p=0.022 n=14+15)
MultipolygonValidation/n=64-4                                 16.9µs ±12%    16.5µs ± 8%     ~     (p=0.259 n=14+13)
MultipolygonValidation/n=256-4                                 105µs ± 5%     104µs ± 4%     ~     (p=0.220 n=14+13)
MultipolygonValidation/n=1024-4                                485µs ± 9%     482µs ± 4%     ~     (p=0.914 n=15+14)
MultiPolygonTwoCircles/n=10-4                                 3.72µs ± 7%    3.80µs ±13%     ~     (p=0.535 n=12+14)
MultiPolygonTwoCircles/n=100-4                                38.6µs ± 9%    38.9µs ±16%     ~     (p=0.614 n=13+13)
MultiPolygonTwoCircles/n=1000-4                                412µs ± 7%     413µs ± 6%     ~     (p=0.964 n=13+15)
MultiPolygonTwoCircles/n=10000-4                              5.99ms ±12%    5.97ms ± 7%     ~     (p=0.701 n=14+14)
MultiPolygonMultipleTouchingPoints/n=1-4                      4.75µs ± 6%    4.84µs ±13%     ~     (p=0.856 n=13+15)
MultiPolygonMultipleTouchingPoints/n=10-4                     37.4µs ± 7%    37.2µs ± 9%     ~     (p=0.694 n=14+13)
MultiPolygonMultipleTouchingPoints/n=100-4                     441µs ±11%     441µs ± 8%     ~     (p=0.769 n=14+14)
MultiPolygonMultipleTouchingPoints/n=1000-4                   5.29ms ± 9%    5.33ms ± 5%     ~     (p=0.233 n=15+15)
WKTParsing/point-4                                            1.68µs ± 6%    1.71µs ±14%     ~     (p=0.369 n=13+13)
DistancePolygonToPolygonOrdering/n=100_swap=false-4           49.8µs ±11%    52.1µs ± 9%   +4.65%  (p=0.034 n=13+13)
DistancePolygonToPolygonOrdering/n=100_swap=true-4            50.0µs ± 8%    50.5µs ±12%     ~     (p=0.675 n=15+15)
DistancePolygonToPolygonOrdering/n=1000_swap=false-4           762µs ± 7%     768µs ± 6%     ~     (p=0.375 n=13+14)
DistancePolygonToPolygonOrdering/n=1000_swap=true-4            761µs ± 7%     750µs ± 6%     ~     (p=0.603 n=14+14)
IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4     5.78µs ±35%    5.52µs ±13%     ~     (p=0.586 n=13+15)
IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4      5.60µs ± 9%    5.45µs ±12%     ~     (p=0.169 n=14+13)
IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4    59.7µs ± 7%    62.5µs ±22%     ~     (p=0.451 n=15+14)
IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     63.8µs ±28%    60.8µs ±19%     ~     (p=0.239 n=14+13)
MultiLineStringIsSimpleManyLineStrings/n=100-4                50.9µs ± 6%    53.4µs ± 8%   +4.92%  (p=0.019 n=14+14)
MultiLineStringIsSimpleManyLineStrings/n=1000-4                551µs ±10%     543µs ± 4%     ~     (p=0.322 n=12+14)
pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
IntersectionWithoutValidation/n=10-4                          50.3µs ±12%    49.9µs ± 8%     ~     (p=0.806 n=15+15)
IntersectionWithoutValidation/n=100-4                         95.0µs ±10%    94.8µs ± 6%     ~     (p=0.830 n=14+13)
IntersectionWithoutValidation/n=1000-4                         413µs ±13%     391µs ± 9%   -5.14%  (p=0.022 n=15+13)
IntersectionWithoutValidation/n=10000-4                       3.72ms ±12%    3.49ms ± 8%   -6.37%  (p=0.009 n=15+14)
NoOp/n=10-4                                                   3.86µs ± 6%    3.86µs ± 4%     ~     (p=0.910 n=14+14)
NoOp/n=100-4                                                  12.6µs ± 8%    12.4µs ± 4%     ~     (p=0.541 n=14+14)
NoOp/n=1000-4                                                 88.2µs ± 4%    90.2µs ± 7%     ~     (p=0.139 n=12+15)
NoOp/n=10000-4                                                 933µs ±38%     998µs ±21%     ~     (p=0.186 n=15+14)
pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:amd64
LineStringIsSimpleCircle/n=10-4                               2.16µs ±10%    2.12µs ± 7%     ~     (p=0.193 n=14+12)
LineStringIsSimpleCircle/n=100-4                              31.1µs ± 8%    30.3µs ±13%     ~     (p=0.094 n=14+14)
LineStringIsSimpleCircle/n=1000-4                              382µs ± 8%     375µs ± 6%     ~     (p=0.306 n=14+14)
LineStringIsSimpleCircle/n=10000-4                            4.95ms ± 9%    4.90ms ± 6%     ~     (p=0.486 n=15+15)
LineStringIsSimpleZigZag/10-4                                 1.92µs ±11%    1.90µs ± 7%     ~     (p=0.609 n=13+15)
LineStringIsSimpleZigZag/100-4                                29.8µs ±10%    30.1µs ± 9%     ~     (p=0.430 n=13+14)
LineStringIsSimpleZigZag/1000-4                                363µs ± 5%     363µs ± 7%     ~     (p=0.847 n=15+14)
LineStringIsSimpleZigZag/10000-4                              4.88ms ± 9%    4.92ms ± 7%     ~     (p=0.505 n=14+15)
SetOperation/n=4/Go_Intersection-4                            41.6µs ± 6%    42.0µs ±11%     ~     (p=0.892 n=13+15)
SetOperation/n=4/Go_Difference-4                              42.4µs ± 7%    45.4µs ±14%   +7.08%  (p=0.008 n=15+15)
SetOperation/n=4/Go_SymmetricDifference-4                     55.8µs ± 5%    56.3µs ± 9%     ~     (p=0.813 n=15+14)
SetOperation/n=4/Go_Union-4                                   44.4µs ± 7%    44.3µs ± 7%     ~     (p=0.949 n=15+14)
SetOperation/n=4/GEOS_Intersection-4                          49.6µs ± 8%    48.8µs ± 4%     ~     (p=0.400 n=15+14)
SetOperation/n=4/GEOS_Difference-4                            50.6µs ± 4%    50.8µs ± 5%     ~     (p=0.720 n=13+14)
SetOperation/n=4/GEOS_SymmetricDifference-4                   71.6µs ± 4%    72.1µs ± 6%     ~     (p=0.511 n=14+14)
SetOperation/n=4/GEOS_Union-4                                 52.4µs ±11%    52.1µs ± 9%     ~     (p=0.806 n=15+15)
SetOperation/n=8/Go_Intersection-4                            52.9µs ± 6%    54.6µs ±12%     ~     (p=0.104 n=14+14)
SetOperation/n=8/Go_Difference-4                              53.6µs ± 4%    54.5µs ± 7%     ~     (p=0.412 n=15+15)
SetOperation/n=8/Go_SymmetricDifference-4                     69.7µs ± 6%    69.8µs ± 5%     ~     (p=0.839 n=14+14)
SetOperation/n=8/Go_Union-4                                   55.4µs ± 9%    55.2µs ± 9%     ~     (p=0.715 n=15+14)
SetOperation/n=8/GEOS_Intersection-4                          58.1µs ±13%    57.0µs ± 6%     ~     (p=0.400 n=14+15)
SetOperation/n=8/GEOS_Difference-4                            59.8µs ±10%    58.5µs ± 5%     ~     (p=0.621 n=15+14)
SetOperation/n=8/GEOS_SymmetricDifference-4                   86.7µs ± 8%    84.2µs ± 5%     ~     (p=0.093 n=15+14)
SetOperation/n=8/GEOS_Union-4                                 58.6µs ± 9%    58.7µs ± 5%     ~     (p=0.667 n=14+14)
SetOperation/n=16/Go_Intersection-4                           74.1µs ± 7%    75.6µs ± 7%     ~     (p=0.137 n=14+14)
SetOperation/n=16/Go_Difference-4                             78.3µs ± 6%    78.1µs ± 6%     ~     (p=0.856 n=15+13)
SetOperation/n=16/Go_SymmetricDifference-4                     111µs ± 9%     108µs ± 9%     ~     (p=0.217 n=15+14)
SetOperation/n=16/Go_Union-4                                  82.8µs ± 4%    82.3µs ± 4%     ~     (p=0.555 n=13+15)
SetOperation/n=16/GEOS_Intersection-4                         63.1µs ±14%    62.3µs ± 3%     ~     (p=0.451 n=15+14)
SetOperation/n=16/GEOS_Difference-4                           70.2µs ± 9%    68.0µs ± 5%   -3.07%  (p=0.041 n=15+14)
SetOperation/n=16/GEOS_SymmetricDifference-4                   109µs ± 5%     108µs ± 5%     ~     (p=0.362 n=13+13)
SetOperation/n=16/GEOS_Union-4                                71.6µs ± 6%    71.7µs ± 4%     ~     (p=0.847 n=14+15)
SetOperation/n=32/Go_Intersection-4                            132µs ± 6%     132µs ± 5%     ~     (p=0.979 n=14+11)
SetOperation/n=32/Go_Difference-4                              136µs ±10%     133µs ± 6%     ~     (p=0.813 n=14+15)
SetOperation/n=32/Go_SymmetricDifference-4                     182µs ± 9%     183µs ± 4%     ~     (p=0.685 n=14+13)
SetOperation/n=32/Go_Union-4                                   140µs ± 7%     143µs ± 8%     ~     (p=0.172 n=14+15)
SetOperation/n=32/GEOS_Intersection-4                         79.9µs ±17%    76.2µs ±12%     ~     (p=0.063 n=15+14)
SetOperation/n=32/GEOS_Difference-4                           87.8µs ± 7%    84.4µs ± 6%   -3.78%  (p=0.004 n=15+14)
SetOperation/n=32/GEOS_SymmetricDifference-4                   147µs ± 8%     143µs ± 5%   -3.02%  (p=0.022 n=13+15)
SetOperation/n=32/GEOS_Union-4                                92.4µs ± 7%    88.3µs ± 4%   -4.43%  (p=0.000 n=15+13)
SetOperation/n=64/Go_Intersection-4                            221µs ± 6%     221µs ± 8%     ~     (p=0.874 n=14+14)
SetOperation/n=64/Go_Difference-4                              232µs ± 8%     234µs ± 9%     ~     (p=0.541 n=14+14)
SetOperation/n=64/Go_SymmetricDifference-4                     324µs ± 5%     317µs ± 7%   -2.15%  (p=0.044 n=14+14)
SetOperation/n=64/Go_Union-4                                   251µs ± 4%     246µs ± 7%     ~     (p=0.131 n=12+14)
SetOperation/n=64/GEOS_Intersection-4                          100µs ± 4%      99µs ± 4%     ~     (p=0.265 n=14+14)
SetOperation/n=64/GEOS_Difference-4                            123µs ± 6%     124µs ± 7%     ~     (p=0.910 n=14+14)
SetOperation/n=64/GEOS_SymmetricDifference-4                   225µs ± 8%     223µs ± 7%     ~     (p=0.425 n=15+14)
SetOperation/n=64/GEOS_Union-4                                 136µs ± 8%     138µs ± 9%     ~     (p=0.561 n=14+15)
SetOperation/n=128/Go_Intersection-4                           407µs ± 9%     405µs ± 6%     ~     (p=0.983 n=15+14)
SetOperation/n=128/Go_Difference-4                             426µs ±11%     425µs ± 6%     ~     (p=0.756 n=13+14)
SetOperation/n=128/Go_SymmetricDifference-4                    582µs ±10%     566µs ± 8%     ~     (p=0.201 n=15+13)
SetOperation/n=128/Go_Union-4                                  447µs ± 5%     444µs ± 9%     ~     (p=0.683 n=15+14)
SetOperation/n=128/GEOS_Intersection-4                         152µs ± 5%     150µs ± 4%     ~     (p=0.061 n=14+13)
SetOperation/n=128/GEOS_Difference-4                           182µs ± 5%     179µs ± 6%     ~     (p=0.069 n=14+14)
SetOperation/n=128/GEOS_SymmetricDifference-4                  351µs ± 7%     356µs ± 6%     ~     (p=0.290 n=14+15)
SetOperation/n=128/GEOS_Union-4                                200µs ± 8%     196µs ± 3%     ~     (p=0.190 n=15+14)
SetOperation/n=256/Go_Intersection-4                           726µs ± 8%     714µs ± 6%     ~     (p=0.085 n=14+12)
SetOperation/n=256/Go_Difference-4                             788µs ± 6%     783µs ± 5%     ~     (p=0.482 n=14+14)
SetOperation/n=256/Go_SymmetricDifference-4                   1.16ms ±13%    1.12ms ± 8%     ~     (p=0.239 n=14+13)
SetOperation/n=256/Go_Union-4                                  820µs ±10%     839µs ±24%     ~     (p=0.579 n=13+13)
SetOperation/n=256/GEOS_Intersection-4                         225µs ± 7%     220µs ± 3%   -2.52%  (p=0.043 n=14+13)
SetOperation/n=256/GEOS_Difference-4                           296µs ± 9%     293µs ± 9%     ~     (p=0.310 n=14+15)
SetOperation/n=256/GEOS_SymmetricDifference-4                  643µs ± 5%     653µs ±11%     ~     (p=0.705 n=12+14)
SetOperation/n=256/GEOS_Union-4                                338µs ±16%     334µs ± 7%     ~     (p=0.943 n=13+14)
SetOperation/n=512/Go_Intersection-4                          1.49ms ± 5%    1.48ms ± 8%     ~     (p=0.376 n=14+14)
SetOperation/n=512/Go_Difference-4                            1.62ms ±27%    1.55ms ± 5%     ~     (p=0.264 n=13+13)
SetOperation/n=512/Go_SymmetricDifference-4                   2.12ms ± 4%    2.14ms ± 8%     ~     (p=0.402 n=13+14)
SetOperation/n=512/Go_Union-4                                 1.61ms ± 6%    1.61ms ± 5%     ~     (p=0.804 n=14+14)
SetOperation/n=512/GEOS_Intersection-4                         399µs ± 5%     399µs ± 5%     ~     (p=0.867 n=14+13)
SetOperation/n=512/GEOS_Difference-4                           536µs ± 7%     530µs ± 8%     ~     (p=0.505 n=15+14)
SetOperation/n=512/GEOS_SymmetricDifference-4                 1.24ms ±12%    1.24ms ±16%     ~     (p=0.511 n=14+14)
SetOperation/n=512/GEOS_Union-4                                603µs ± 9%     593µs ±10%     ~     (p=0.234 n=14+15)
SetOperation/n=1024/Go_Intersection-4                         2.90ms ± 6%    2.85ms ± 5%     ~     (p=0.186 n=14+15)
SetOperation/n=1024/Go_Difference-4                           3.07ms ± 4%    3.05ms ± 5%     ~     (p=0.290 n=15+14)
SetOperation/n=1024/Go_SymmetricDifference-4                  4.39ms ± 7%    4.31ms ± 5%     ~     (p=0.376 n=14+14)
SetOperation/n=1024/Go_Union-4                                3.30ms ±11%    3.22ms ± 4%     ~     (p=0.148 n=15+15)
SetOperation/n=1024/GEOS_Intersection-4                        741µs ± 7%     733µs ±10%     ~     (p=0.325 n=14+13)
SetOperation/n=1024/GEOS_Difference-4                         1.09ms ± 9%    1.06ms ± 5%     ~     (p=0.285 n=15+15)
SetOperation/n=1024/GEOS_SymmetricDifference-4                2.45ms ± 7%    2.38ms ± 4%   -3.09%  (p=0.031 n=14+14)
SetOperation/n=1024/GEOS_Union-4                              1.22ms ± 4%    1.23ms ± 5%     ~     (p=0.983 n=14+15)
SetOperation/n=2048/Go_Intersection-4                         6.16ms ±10%    6.06ms ± 7%     ~     (p=0.635 n=14+14)
SetOperation/n=2048/Go_Difference-4                           6.63ms ±10%    6.57ms ± 8%     ~     (p=0.533 n=15+14)
SetOperation/n=2048/Go_SymmetricDifference-4                  9.28ms ± 7%    9.27ms ±17%     ~     (p=0.621 n=14+15)
SetOperation/n=2048/Go_Union-4                                6.93ms ± 7%    7.04ms ±19%     ~     (p=1.000 n=13+13)
SetOperation/n=2048/GEOS_Intersection-4                       1.53ms ± 6%    1.51ms ± 4%     ~     (p=0.141 n=14+13)
SetOperation/n=2048/GEOS_Difference-4                         1.94ms ±14%    1.92ms ± 3%     ~     (p=0.683 n=15+13)
SetOperation/n=2048/GEOS_SymmetricDifference-4                4.67ms ± 4%    4.68ms ±10%     ~     (p=0.905 n=12+15)
SetOperation/n=2048/GEOS_Union-4                              2.30ms ± 6%    2.29ms ± 7%     ~     (p=0.847 n=14+15)
SetOperation/n=4096/Go_Intersection-4                         13.0ms ± 7%    13.0ms ±10%     ~     (p=0.949 n=14+15)
SetOperation/n=4096/Go_Difference-4                           14.4ms ±14%    13.5ms ± 4%   -5.82%  (p=0.001 n=14+14)
SetOperation/n=4096/Go_SymmetricDifference-4                  19.6ms ± 8%    19.1ms ± 9%     ~     (p=0.267 n=15+15)
SetOperation/n=4096/Go_Union-4                                14.7ms ±19%    14.2ms ± 8%     ~     (p=0.305 n=15+15)
SetOperation/n=4096/GEOS_Intersection-4                       2.77ms ± 9%    2.82ms ±10%     ~     (p=0.461 n=15+15)
SetOperation/n=4096/GEOS_Difference-4                         4.16ms ± 5%    4.31ms ± 8%     ~     (p=0.067 n=15+15)
SetOperation/n=4096/GEOS_SymmetricDifference-4                10.4ms ±21%    10.2ms ± 7%     ~     (p=0.960 n=13+13)
SetOperation/n=4096/GEOS_Union-4                              4.91ms ± 8%    4.94ms ± 9%     ~     (p=0.949 n=14+15)
SetOperation/n=8192/Go_Intersection-4                         26.6ms ± 8%    26.3ms ± 3%     ~     (p=0.403 n=14+12)
SetOperation/n=8192/Go_Difference-4                           27.9ms ± 8%    27.5ms ± 5%     ~     (p=0.401 n=14+14)
SetOperation/n=8192/Go_SymmetricDifference-4                  38.4ms ± 9%    37.5ms ± 4%     ~     (p=0.068 n=13+12)
SetOperation/n=8192/Go_Union-4                                28.9ms ±10%    28.9ms ± 7%     ~     (p=0.734 n=14+14)
SetOperation/n=8192/GEOS_Intersection-4                       5.92ms ± 3%    5.84ms ± 9%     ~     (p=0.176 n=12+14)
SetOperation/n=8192/GEOS_Difference-4                         8.56ms ± 9%    8.43ms ± 8%     ~     (p=0.201 n=14+15)
SetOperation/n=8192/GEOS_SymmetricDifference-4                19.9ms ± 8%    19.7ms ± 9%     ~     (p=0.683 n=15+15)
SetOperation/n=8192/GEOS_Union-4                              9.94ms ± 9%    9.83ms ± 8%     ~     (p=0.310 n=14+15)
SetOperation/n=16384/Go_Intersection-4                        55.7ms ±28%    54.7ms ± 7%     ~     (p=0.892 n=13+15)
SetOperation/n=16384/Go_Difference-4                          60.0ms ±22%    58.1ms ±13%     ~     (p=0.306 n=14+14)
SetOperation/n=16384/Go_SymmetricDifference-4                 80.2ms ± 7%    78.3ms ± 7%     ~     (p=0.102 n=14+15)
SetOperation/n=16384/Go_Union-4                               61.1ms ± 8%    60.4ms ± 7%     ~     (p=0.744 n=15+15)
SetOperation/n=16384/GEOS_Intersection-4                      12.1ms ± 5%    11.9ms ± 6%     ~     (p=0.331 n=15+14)
SetOperation/n=16384/GEOS_Difference-4                        18.1ms ± 9%    17.8ms ± 8%     ~     (p=0.461 n=15+15)
SetOperation/n=16384/GEOS_SymmetricDifference-4               40.7ms ± 7%    39.6ms ± 2%     ~     (p=0.125 n=13+13)
SetOperation/n=16384/GEOS_Union-4                             20.7ms ± 7%    21.5ms ±14%   +3.72%  (p=0.023 n=15+14)
pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
Bulk/n=10-4                                                    806ns ±18%     844ns ±39%     ~     (p=0.433 n=15+13)
Bulk/n=100-4                                                  13.9µs ±14%    13.9µs ±12%     ~     (p=0.813 n=14+15)
Bulk/n=1000-4                                                  228µs ± 7%     223µs ± 6%     ~     (p=0.072 n=15+13)
Bulk/n=10000-4                                                3.17ms ± 4%    3.08ms ± 4%   -2.77%  (p=0.004 n=15+12)
Bulk/n=100000-4                                               36.9ms ± 4%    36.2ms ± 5%     ~     (p=0.104 n=14+14)
RangeSearch/n=10-4                                            15.3ns ± 8%    15.0ns ± 4%     ~     (p=0.292 n=14+13)
RangeSearch/n=100-4                                           60.3ns ± 6%    58.8ns ± 4%   -2.56%  (p=0.004 n=14+14)
RangeSearch/n=1000-4                                           223ns ± 7%     214ns ± 2%   -3.86%  (p=0.000 n=15+13)
RangeSearch/n=10000-4                                          756ns ± 5%     745ns ± 3%   -1.53%  (p=0.044 n=14+13)
RangeSearch/n=100000-4                                        7.40µs ± 5%    7.20µs ± 5%   -2.67%  (p=0.012 n=14+14)

name                                                        old alloc/op   new alloc/op   delta
pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:amd64
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%     ~     (p=0.133 n=13+15)
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%     ~     (p=0.691 n=15+14)
IntersectsLineStringWithLineString/n=10000-4                  2.63MB ± 0%    2.63MB ± 0%     ~     (p=0.504 n=15+15)
IntersectsMultiPointWithMultiPoint/n=20-4                       324B ± 0%      325B ± 0%     ~     (p=0.264 n=15+15)
IntersectsMultiPointWithMultiPoint/n=200-4                    3.08kB ± 0%    3.08kB ± 0%     ~     (p=0.345 n=15+15)
IntersectsMultiPointWithMultiPoint/n=2000-4                   49.3kB ± 0%    49.3kB ± 0%     ~     (p=0.420 n=15+15)
IntersectsMultiPointWithMultiPoint/n=20000-4                   339kB ± 0%     339kB ± 0%     ~     (p=0.140 n=15+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%     ~     (p=0.242 n=15+15)
PolygonSingleRingValidation/n=10000-4                         1.97MB ± 0%    1.97MB ± 0%     ~     (p=0.142 n=14+12)
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.003 n=12+15)
PolygonMultipleRingsValidation/n=4096-4                       6.28MB ± 0%    6.28MB ± 0%     ~     (p=0.130 n=15+14)
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%   +0.00%  (p=0.028 n=15+15)
PolygonZigZagRingsValidation/n=10000-4                        7.24MB ± 0%    7.24MB ± 0%     ~     (p=0.287 n=15+15)
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%     ~     (p=0.306 n=15+15)
PolygonAnnulusValidation/n=10000-4                            3.89MB ± 0%    3.89MB ± 0%     ~     (p=0.235 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%     ~     (p=0.056 n=15+12)
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%     ~     (p=0.818 n=15+15)
MultiPolygonTwoCircles/n=10000-4                              4.60MB ± 0%    4.60MB ± 0%     ~     (p=0.596 n=15+14)
MultiPolygonMultipleTouchingPoints/n=1-4                      4.11kB ± 0%    4.11kB ± 0%     ~     (all equal)
MultiPolygonMultipleTouchingPoints/n=10-4                     22.7kB ± 0%    22.7kB ± 0%     ~     (p=0.183 n=15+11)
MultiPolygonMultipleTouchingPoints/n=100-4                     172kB ± 0%     172kB ± 0%     ~     (p=0.782 n=15+15)
MultiPolygonMultipleTouchingPoints/n=1000-4                   2.04MB ± 0%    2.04MB ± 0%     ~     (p=0.713 n=15+15)
WKTParsing/point-4                                            1.93kB ± 0%    1.93kB ± 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.972 n=14+13)
DistancePolygonToPolygonOrdering/n=1000_swap=true-4            369kB ± 0%     369kB ± 0%     ~     (p=0.608 n=13+15)
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.896 n=15+15)
IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     60.1kB ± 0%    60.1kB ± 0%     ~     (p=1.000 n=14+14)
MultiLineStringIsSimpleManyLineStrings/n=100-4                59.2kB ± 0%    59.2kB ± 0%     ~     (all equal)
MultiLineStringIsSimpleManyLineStrings/n=1000-4                491kB ± 0%     491kB ± 0%     ~     (p=0.352 n=15+15)
pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
IntersectionWithoutValidation/n=10-4                          1.34kB ± 0%    1.34kB ± 0%     ~     (all equal)
IntersectionWithoutValidation/n=100-4                         6.47kB ± 0%    6.47kB ± 0%     ~     (p=1.000 n=15+15)
IntersectionWithoutValidation/n=1000-4                        55.1kB ± 0%    55.1kB ± 0%     ~     (p=0.087 n=15+12)
IntersectionWithoutValidation/n=10000-4                        558kB ± 0%     558kB ± 0%     ~     (p=0.152 n=14+15)
NoOp/n=10-4                                                     968B ± 0%      968B ± 0%     ~     (all equal)
NoOp/n=100-4                                                  5.78kB ± 0%    5.78kB ± 0%     ~     (all equal)
NoOp/n=1000-4                                                 49.6kB ± 0%    49.6kB ± 0%     ~     (all equal)
NoOp/n=10000-4                                                 492kB ± 0%     492kB ± 0%     ~     (p=0.156 n=15+15)
pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:amd64
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%     ~     (p=0.518 n=15+15)
LineStringIsSimpleCircle/n=10000-4                            1.97MB ± 0%    1.97MB ± 0%     ~     (p=0.852 n=15+14)
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%     ~     (p=0.220 n=13+13)
LineStringIsSimpleZigZag/10000-4                              1.97MB ± 0%    1.97MB ± 0%     ~     (p=0.210 n=15+14)
SetOperation/n=4/Go_Intersection-4                            20.0kB ± 0%    20.4kB ± 0%   +2.12%  (p=0.000 n=14+15)
SetOperation/n=4/Go_Difference-4                              21.0kB ± 0%    21.4kB ± 0%   +2.03%  (p=0.000 n=15+15)
SetOperation/n=4/Go_SymmetricDifference-4                     28.9kB ± 0%    29.3kB ± 0%   +1.46%  (p=0.000 n=15+15)
SetOperation/n=4/Go_Union-4                                   21.7kB ± 0%    22.1kB ± 0%   +1.94%  (p=0.000 n=14+15)
SetOperation/n=4/GEOS_Intersection-4                          1.78kB ± 0%    1.78kB ± 0%     ~     (all equal)
SetOperation/n=4/GEOS_Difference-4                            2.79kB ± 0%    2.79kB ± 0%     ~     (all equal)
SetOperation/n=4/GEOS_SymmetricDifference-4                   10.7kB ± 0%    10.7kB ± 0%     ~     (all equal)
SetOperation/n=4/GEOS_Union-4                                 3.22kB ± 0%    3.22kB ± 0%     ~     (all equal)
SetOperation/n=8/Go_Intersection-4                            26.7kB ± 0%    27.1kB ± 0%   +1.58%  (p=0.000 n=15+14)
SetOperation/n=8/Go_Difference-4                              26.8kB ± 0%    27.3kB ± 0%   +1.58%  (p=0.000 n=13+15)
SetOperation/n=8/Go_SymmetricDifference-4                     36.8kB ± 0%    37.2kB ± 0%   +1.16%  (p=0.000 n=15+13)
SetOperation/n=8/Go_Union-4                                   27.0kB ± 0%    27.4kB ± 0%   +1.57%  (p=0.000 n=15+13)
SetOperation/n=8/GEOS_Intersection-4                          3.35kB ± 0%    3.35kB ± 0%     ~     (all equal)
SetOperation/n=8/GEOS_Difference-4                            3.51kB ± 0%    3.51kB ± 0%     ~     (all equal)
SetOperation/n=8/GEOS_SymmetricDifference-4                   13.2kB ± 0%    13.2kB ± 0%     ~     (all equal)
SetOperation/n=8/GEOS_Union-4                                 3.64kB ± 0%    3.64kB ± 0%     ~     (all equal)
SetOperation/n=16/Go_Intersection-4                           37.0kB ± 0%    37.4kB ± 0%   +1.14%  (p=0.000 n=14+15)
SetOperation/n=16/Go_Difference-4                             40.1kB ± 0%    40.5kB ± 0%   +1.06%  (p=0.000 n=15+14)
SetOperation/n=16/Go_SymmetricDifference-4                    59.0kB ± 0%    59.5kB ± 0%   +0.72%  (p=0.000 n=15+15)
SetOperation/n=16/Go_Union-4                                  41.6kB ± 0%    42.0kB ± 0%   +1.03%  (p=0.000 n=15+15)
SetOperation/n=16/GEOS_Intersection-4                         3.90kB ± 0%    3.90kB ± 0%     ~     (all equal)
SetOperation/n=16/GEOS_Difference-4                           6.70kB ± 0%    6.70kB ± 0%     ~     (all equal)
SetOperation/n=16/GEOS_SymmetricDifference-4                  25.2kB ± 0%    25.2kB ± 0%     ~     (all equal)
SetOperation/n=16/GEOS_Union-4                                8.30kB ± 0%    8.30kB ± 0%     ~     (all equal)
SetOperation/n=32/Go_Intersection-4                           67.5kB ± 0%    68.0kB ± 0%   +0.63%  (p=0.000 n=15+15)
SetOperation/n=32/Go_Difference-4                             70.1kB ± 0%    70.6kB ± 0%   +0.60%  (p=0.000 n=15+15)
SetOperation/n=32/Go_SymmetricDifference-4                     100kB ± 0%     100kB ± 0%   +0.42%  (p=0.000 n=14+15)
SetOperation/n=32/Go_Union-4                                  70.6kB ± 0%    71.0kB ± 0%   +0.60%  (p=0.000 n=15+15)
SetOperation/n=32/GEOS_Intersection-4                         8.87kB ± 0%    8.87kB ± 0%     ~     (all equal)
SetOperation/n=32/GEOS_Difference-4                           10.7kB ± 0%    10.7kB ± 0%     ~     (all equal)
SetOperation/n=32/GEOS_SymmetricDifference-4                  39.7kB ± 0%    39.7kB ± 0%     ~     (all equal)
SetOperation/n=32/GEOS_Union-4                                11.5kB ± 0%    11.5kB ± 0%     ~     (all equal)
SetOperation/n=64/Go_Intersection-4                            113kB ± 0%     113kB ± 0%   +0.38%  (p=0.000 n=15+15)
SetOperation/n=64/Go_Difference-4                              125kB ± 0%     125kB ± 0%   +0.34%  (p=0.000 n=15+15)
SetOperation/n=64/Go_SymmetricDifference-4                     191kB ± 0%     191kB ± 0%   +0.22%  (p=0.000 n=15+15)
SetOperation/n=64/Go_Union-4                                   129kB ± 0%     129kB ± 0%   +0.33%  (p=0.000 n=15+14)
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.4kB ± 0%    87.4kB ± 0%   +0.00%  (p=0.027 n=13+15)
SetOperation/n=64/GEOS_Union-4                                28.0kB ± 0%    28.0kB ± 0%     ~     (all equal)
SetOperation/n=128/Go_Intersection-4                           230kB ± 0%     230kB ± 0%   +0.18%  (p=0.000 n=15+15)
SetOperation/n=128/Go_Difference-4                             242kB ± 0%     242kB ± 0%   +0.17%  (p=0.000 n=15+15)
SetOperation/n=128/Go_SymmetricDifference-4                    353kB ± 0%     353kB ± 0%   +0.12%  (p=0.000 n=15+15)
SetOperation/n=128/Go_Union-4                                  244kB ± 0%     244kB ± 0%   +0.18%  (p=0.000 n=15+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%     ~     (p=0.652 n=15+15)
SetOperation/n=128/GEOS_Union-4                               43.1kB ± 0%    43.1kB ± 0%     ~     (all equal)
SetOperation/n=256/Go_Intersection-4                           417kB ± 0%     417kB ± 0%   +0.10%  (p=0.000 n=15+15)
SetOperation/n=256/Go_Difference-4                             466kB ± 0%     466kB ± 0%   +0.09%  (p=0.000 n=14+15)
SetOperation/n=256/Go_SymmetricDifference-4                    721kB ± 0%     722kB ± 0%   +0.06%  (p=0.000 n=15+15)
SetOperation/n=256/Go_Union-4                                  476kB ± 0%     477kB ± 0%   +0.09%  (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                  341kB ± 0%     341kB ± 0%     ~     (p=0.633 n=14+15)
SetOperation/n=256/GEOS_Union-4                                106kB ± 0%     106kB ± 0%     ~     (p=1.000 n=15+15)
SetOperation/n=512/Go_Intersection-4                           857kB ± 0%     858kB ± 0%   +0.05%  (p=0.000 n=15+15)
SetOperation/n=512/Go_Difference-4                             905kB ± 0%     905kB ± 0%   +0.05%  (p=0.000 n=13+15)
SetOperation/n=512/Go_SymmetricDifference-4                   1.33MB ± 0%    1.33MB ± 0%   +0.03%  (p=0.000 n=13+15)
SetOperation/n=512/Go_Union-4                                  926kB ± 0%     926kB ± 0%   +0.05%  (p=0.000 n=15+15)
SetOperation/n=512/GEOS_Intersection-4                         115kB ± 0%     115kB ± 0%     ~     (p=0.054 n=15+15)
SetOperation/n=512/GEOS_Difference-4                           159kB ± 0%     159kB ± 0%   -0.00%  (p=0.032 n=14+13)
SetOperation/n=512/GEOS_SymmetricDifference-4                  577kB ± 0%     577kB ± 0%     ~     (p=0.769 n=14+15)
SetOperation/n=512/GEOS_Union-4                                171kB ± 0%     171kB ± 0%     ~     (p=0.972 n=15+15)
SetOperation/n=1024/Go_Intersection-4                         1.58MB ± 0%    1.58MB ± 0%   +0.03%  (p=0.000 n=15+14)
SetOperation/n=1024/Go_Difference-4                           1.77MB ± 0%    1.77MB ± 0%   +0.02%  (p=0.000 n=11+15)
SetOperation/n=1024/Go_SymmetricDifference-4                  2.80MB ± 0%    2.80MB ± 0%   +0.02%  (p=0.000 n=15+15)
SetOperation/n=1024/Go_Union-4                                1.83MB ± 0%    1.83MB ± 0%   +0.02%  (p=0.000 n=15+14)
SetOperation/n=1024/GEOS_Intersection-4                        189kB ± 0%     189kB ± 0%     ~     (p=1.000 n=15+15)
SetOperation/n=1024/GEOS_Difference-4                          370kB ± 0%     370kB ± 0%     ~     (p=0.198 n=14+15)
SetOperation/n=1024/GEOS_SymmetricDifference-4                1.38MB ± 0%    1.38MB ± 0%     ~     (p=0.643 n=15+15)
SetOperation/n=1024/GEOS_Union-4                               415kB ± 0%     415kB ± 0%     ~     (p=0.231 n=14+15)
SetOperation/n=2048/Go_Intersection-4                         3.64MB ± 0%    3.64MB ± 0%   +0.01%  (p=0.000 n=15+14)
SetOperation/n=2048/Go_Difference-4                           3.87MB ± 0%    3.87MB ± 0%   +0.01%  (p=0.000 n=13+15)
SetOperation/n=2048/Go_SymmetricDifference-4                  5.63MB ± 0%    5.63MB ± 0%   +0.01%  (p=0.000 n=15+15)
SetOperation/n=2048/Go_Union-4                                3.95MB ± 0%    3.95MB ± 0%   +0.01%  (p=0.000 n=15+15)
SetOperation/n=2048/GEOS_Intersection-4                        460kB ± 0%     460kB ± 0%     ~     (p=0.600 n=15+14)
SetOperation/n=2048/GEOS_Difference-4                          648kB ± 0%     648kB ± 0%   +0.00%  (p=0.012 n=15+11)
SetOperation/n=2048/GEOS_SymmetricDifference-4                2.32MB ± 0%    2.32MB ± 0%     ~     (p=0.278 n=15+15)
SetOperation/n=2048/GEOS_Union-4                               689kB ± 0%     689kB ± 0%     ~     (p=0.050 n=15+15)
SetOperation/n=4096/Go_Intersection-4                         6.82MB ± 0%    6.82MB ± 0%   +0.01%  (p=0.000 n=15+15)
SetOperation/n=4096/Go_Difference-4                           7.54MB ± 0%    7.54MB ± 0%   +0.01%  (p=0.000 n=15+14)
SetOperation/n=4096/Go_SymmetricDifference-4                  11.6MB ± 0%    11.6MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=4096/Go_Union-4                                7.79MB ± 0%    7.79MB ± 0%   +0.01%  (p=0.000 n=15+15)
SetOperation/n=4096/GEOS_Intersection-4                        755kB ± 0%     755kB ± 0%   -0.00%  (p=0.046 n=15+15)
SetOperation/n=4096/GEOS_Difference-4                         1.45MB ± 0%    1.45MB ± 0%     ~     (p=0.891 n=15+15)
SetOperation/n=4096/GEOS_SymmetricDifference-4                5.34MB ± 0%    5.34MB ± 0%     ~     (p=0.080 n=14+14)
SetOperation/n=4096/GEOS_Union-4                              1.63MB ± 0%    1.63MB ± 0%     ~     (p=0.871 n=15+14)
SetOperation/n=8192/Go_Intersection-4                         14.9MB ± 0%    14.9MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=8192/Go_Difference-4                           15.8MB ± 0%    15.8MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=8192/Go_SymmetricDifference-4                  22.7MB ± 0%    22.7MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=8192/Go_Union-4                                16.1MB ± 0%    16.1MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=8192/GEOS_Intersection-4                       1.76MB ± 0%    1.76MB ± 0%     ~     (p=0.826 n=15+15)
SetOperation/n=8192/GEOS_Difference-4                         2.47MB ± 0%    2.47MB ± 0%     ~     (p=0.426 n=15+14)
SetOperation/n=8192/GEOS_SymmetricDifference-4                9.01MB ± 0%    9.01MB ± 0%     ~     (p=0.910 n=15+15)
SetOperation/n=8192/GEOS_Union-4                              2.66MB ± 0%    2.66MB ± 0%     ~     (p=0.498 n=15+15)
SetOperation/n=16384/Go_Intersection-4                        27.9MB ± 0%    27.9MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=16384/Go_Difference-4                          31.0MB ± 0%    31.0MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=16384/Go_SymmetricDifference-4                 47.3MB ± 0%    47.3MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=16384/Go_Union-4                               32.0MB ± 0%    32.0MB ± 0%   +0.00%  (p=0.000 n=15+15)
SetOperation/n=16384/GEOS_Intersection-4                      2.92MB ± 0%    2.92MB ± 0%     ~     (p=0.188 n=15+15)
SetOperation/n=16384/GEOS_Difference-4                        5.68MB ± 0%    5.68MB ± 0%     ~     (p=0.403 n=15+15)
SetOperation/n=16384/GEOS_SymmetricDifference-4               21.1MB ± 0%    21.1MB ± 0%     ~     (p=0.237 n=14+15)
SetOperation/n=16384/GEOS_Union-4                             6.45MB ± 0%    6.45MB ± 0%     ~     (p=0.659 n=15+15)
pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
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%     ~     (p=1.000 n=15+15)
Bulk/n=10000-4                                                1.57MB ± 0%    1.57MB ± 0%     ~     (p=0.490 n=15+15)
Bulk/n=100000-4                                               20.4MB ± 0%    20.4MB ± 0%     ~     (p=0.093 n=15+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:amd64
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                        50.0 ± 0%      50.0 ± 0%     ~     (all equal)
MultiPolygonMultipleTouchingPoints/n=10-4                        297 ± 0%       297 ± 0%     ~     (all equal)
MultiPolygonMultipleTouchingPoints/n=100-4                     2.61k ± 0%     2.61k ± 0%     ~     (all equal)
MultiPolygonMultipleTouchingPoints/n=1000-4                    26.7k ± 0%     26.7k ± 0%     ~     (p=0.682 n=15+15)
WKTParsing/point-4                                              21.0 ± 0%      21.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)
pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
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:amd64
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                               270 ± 0%       276 ± 0%   +2.22%  (p=0.000 n=15+15)
SetOperation/n=4/Go_Difference-4                                 274 ± 0%       280 ± 0%   +2.19%  (p=0.000 n=15+15)
SetOperation/n=4/Go_SymmetricDifference-4                        371 ± 0%       377 ± 0%   +1.62%  (p=0.000 n=15+15)
SetOperation/n=4/Go_Union-4                                      281 ± 0%       287 ± 0%   +2.14%  (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                      147 ± 0%       147 ± 0%     ~     (all equal)
SetOperation/n=4/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%     ~     (all equal)
SetOperation/n=8/Go_Intersection-4                               286 ± 0%       292 ± 0%   +2.00%  (p=0.000 n=15+12)
SetOperation/n=8/Go_Difference-4                                 287 ± 0%       293 ± 0%   +2.11%  (p=0.000 n=15+15)
SetOperation/n=8/Go_SymmetricDifference-4                        390 ± 0%       396 ± 0%   +1.62%  (p=0.000 n=13+15)
SetOperation/n=8/Go_Union-4                                      292 ± 0%       298 ± 0%   +2.03%  (p=0.000 n=15+15)
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                      151 ± 0%       151 ± 0%     ~     (all equal)
SetOperation/n=8/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%     ~     (all equal)
SetOperation/n=16/Go_Intersection-4                              300 ± 0%       306 ± 0%   +2.00%  (p=0.000 n=15+15)
SetOperation/n=16/Go_Difference-4                                310 ± 0%       316 ± 0%   +1.94%  (p=0.000 n=15+15)
SetOperation/n=16/Go_SymmetricDifference-4                       438 ± 0%       444 ± 0%   +1.37%  (p=0.000 n=15+15)
SetOperation/n=16/Go_Union-4                                     319 ± 0%       325 ± 0%   +1.88%  (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                     184 ± 0%       184 ± 0%     ~     (all equal)
SetOperation/n=16/GEOS_Union-4                                  68.0 ± 0%      68.0 ± 0%     ~     (all equal)
SetOperation/n=32/Go_Intersection-4                              351 ± 0%       357 ± 0%   +1.71%  (p=0.000 n=15+15)
SetOperation/n=32/Go_Difference-4                                357 ± 0%       363 ± 0%   +1.68%  (p=0.000 n=15+15)
SetOperation/n=32/Go_SymmetricDifference-4                       509 ± 0%       515 ± 0%   +1.18%  (p=0.000 n=15+15)
SetOperation/n=32/Go_Union-4                                     362 ± 0%       368 ± 0%   +1.66%  (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                     215 ± 0%       215 ± 0%     ~     (all equal)
SetOperation/n=32/GEOS_Union-4                                  72.0 ± 0%      72.0 ± 0%     ~     (all equal)
SetOperation/n=64/Go_Intersection-4                              392 ± 0%       398 ± 0%   +1.46%  (p=0.000 n=15+15)
SetOperation/n=64/Go_Difference-4                                426 ± 0%       432 ± 0%   +1.41%  (p=0.000 n=15+13)
SetOperation/n=64/Go_SymmetricDifference-4                       676 ± 0%       682 ± 0%   +0.89%  (p=0.000 n=12+12)
SetOperation/n=64/Go_Union-4                                     439 ± 0%       445 ± 0%   +1.37%  (p=0.000 n=13+13)
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                     344 ± 0%       344 ± 0%     ~     (all equal)
SetOperation/n=64/GEOS_Union-4                                   112 ± 0%       112 ± 0%     ~     (all equal)
SetOperation/n=128/Go_Intersection-4                             566 ± 0%       572 ± 0%   +1.06%  (p=0.000 n=15+15)
SetOperation/n=128/Go_Difference-4                               592 ± 0%       598 ± 0%   +1.01%  (p=0.000 n=14+14)
SetOperation/n=128/Go_SymmetricDifference-4                      939 ± 0%       945 ± 0%   +0.64%  (p=0.000 n=14+15)
SetOperation/n=128/Go_Union-4                                    597 ± 0%       603 ± 0%   +1.01%  (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                    472 ± 0%       472 ± 0%     ~     (all equal)
SetOperation/n=128/GEOS_Union-4                                  136 ± 0%       136 ± 0%     ~     (all equal)
SetOperation/n=256/Go_Intersection-4                             725 ± 0%       731 ± 0%   +0.83%  (p=0.000 n=14+15)
SetOperation/n=256/Go_Difference-4                               855 ± 0%       861 ± 0%   +0.70%  (p=0.000 n=14+15)
SetOperation/n=256/Go_SymmetricDifference-4                    1.59k ± 0%     1.59k ± 0%   +0.38%  (p=0.000 n=14+14)
SetOperation/n=256/Go_Union-4                                    884 ± 0%       890 ± 0%   +0.68%  (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                    984 ± 0%       984 ± 0%     ~     (all equal)
SetOperation/n=256/GEOS_Union-4                                  288 ± 0%       288 ± 0%     ~     (all equal)
SetOperation/n=512/Go_Intersection-4                           1.40k ± 0%     1.40k ± 0%   +0.41%  (p=0.000 n=15+15)
SetOperation/n=512/Go_Difference-4                             1.50k ± 0%     1.51k ± 0%   +0.41%  (p=0.000 n=15+15)
SetOperation/n=512/Go_SymmetricDifference-4                    2.62k ± 0%     2.62k ± 0%   +0.20%  (p=0.000 n=15+14)
SetOperation/n=512/Go_Union-4                                  1.51k ± 0%     1.51k ± 0%   +0.42%  (p=0.000 n=12+15)
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.50k ± 0%     1.50k ± 0%     ~     (all equal)
SetOperation/n=512/GEOS_Union-4                                  392 ± 0%       392 ± 0%     ~     (all equal)
SetOperation/n=1024/Go_Intersection-4                          2.02k ± 0%     2.03k ± 0%   +0.30%  (p=0.000 n=15+12)
SetOperation/n=1024/Go_Difference-4                            2.54k ± 0%     2.54k ± 0%   +0.24%  (p=0.000 n=15+15)
SetOperation/n=1024/Go_SymmetricDifference-4                   5.19k ± 0%     5.20k ± 0%   +0.12%  (p=0.000 n=14+15)
SetOperation/n=1024/Go_Union-4                                 2.63k ± 0%     2.64k ± 0%   +0.23%  (p=0.000 n=15+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.54k ± 0%     3.54k ± 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.69k ± 0%   +0.13%  (p=0.000 n=14+15)
SetOperation/n=2048/Go_Difference-4                            5.11k ± 0%     5.12k ± 0%   +0.12%  (p=0.000 n=15+15)
SetOperation/n=2048/Go_SymmetricDifference-4                   9.30k ± 0%     9.31k ± 0%   +0.06%  (p=0.000 n=15+14)
SetOperation/n=2048/Go_Union-4                                 5.12k ± 0%     5.12k ± 0%   +0.12%  (p=0.000 n=15+14)
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.59k ± 0%     5.59k ± 0%     ~     (all equal)
SetOperation/n=2048/GEOS_Union-4                               1.42k ± 0%     1.42k ± 0%     ~     (all equal)
SetOperation/n=4096/Go_Intersection-4                          7.17k ± 0%     7.17k ± 0%   +0.09%  (p=0.000 n=15+15)
SetOperation/n=4096/Go_Difference-4                            9.22k ± 0%     9.22k ± 0%   +0.06%  (p=0.000 n=15+15)
SetOperation/n=4096/Go_SymmetricDifference-4                   19.6k ± 0%     19.6k ± 0%   +0.03%  (p=0.000 n=15+15)
SetOperation/n=4096/Go_Union-4                                 9.57k ± 0%     9.57k ± 0%   +0.06%  (p=0.000 n=15+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.8k ± 0%   +0.03%  (p=0.000 n=15+15)
SetOperation/n=8192/Go_Difference-4                            19.5k ± 0%     19.5k ± 0%   +0.03%  (p=0.000 n=9+15)
SetOperation/n=8192/Go_SymmetricDifference-4                   36.0k ± 0%     36.0k ± 0%   +0.02%  (p=0.000 n=15+15)
SetOperation/n=8192/Go_Union-4                                 19.5k ± 0%     19.5k ± 0%   +0.03%  (p=0.000 n=11+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.7k ± 0%   +0.02%  (p=0.000 n=15+14)
SetOperation/n=16384/Go_Difference-4                           35.9k ± 0%     35.9k ± 0%   +0.02%  (p=0.000 n=15+15)
SetOperation/n=16384/Go_SymmetricDifference-4                  76.9k ± 0%     76.9k ± 0%   +0.01%  (p=0.000 n=15+15)
SetOperation/n=16384/Go_Union-4                                37.2k ± 0%     37.3k ± 0%   +0.02%  (p=0.000 n=14+15)
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%     ~     (p=0.422 n=15+15)
SetOperation/n=16384/GEOS_Union-4                              15.1k ± 0%     15.1k ± 0%     ~     (all equal)
pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
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)
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)

Previously, we used a spanning tree where one node was chosen
arbitrarily as the root and edges created that span out to all other
nodes. This causes _many_ crossover points with the remaining
geometries. By using a near-minimum spanning tree, we significantly
reduce the number of crossovers.
@peterstace peterstace merged commit bc4715a into master Jan 29, 2021
@peterstace peterstace deleted the use_spanning_tree_for_ghosts branch January 29, 2021 22:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant