simple python keylogger

Overview

HELLogger

simple python keyloggerphoto_2021-10-23_12-46-38

DISCLAIMERS:

DON'T DO BAD THINGS. THIS PROGRAM IS MEANT FOR PERSONAL USES ONLY. USE IT ONLY IN COMPUTERS WHERE YOU HAVE AUTHORIZED ACCESS. / IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

HOW TO USE

on linux do $ sudo pip3 install pynput. and on windows do $ pip install pynput. simply use the nohup command on linux and .pyw on windows use it without noticing.

        use this command to run 
              python3 HELLogger.py
Comments
  • Implement GeometryType

    Implement GeometryType

    See https://postgis.net/docs/GeometryType.html

    This function needs to be implemented both for Geometry, and for each concrete geometry type (e.g. LineString).

    feature good first issue 
    opened by peterstace 6
  • wkb: add benchmarking script

    wkb: add benchmarking script

    as mentioned in https://github.com/peterstace/simplefeatures/pull/421, this PR adds the benchmarking script used to generate the diffs shown on that PR description.

    I'm opening this as a DRAFT since I'm not happy with the current state of this and would like some feedback about how to make it better before opening it up for merging:

    • the test fixtures are a copy->paste of the ones from wkb_test.go, how best to share these?
    • the decode function is a copy of hexStringToBytes with the t *testing.T removed

    I tried a few things but none felt quite right:

    • create a wkb_util_test.go file which has the hex decoder and the PostGIS/Spatialite fixtures in it
    • create a testdata/xxx file which could be shared.

    What do you think? what's the best way to share these between the wkb_test.go and wkb_bench_test.go files?

    Usage:

    go test -bench=. -count=5 -test.run=none -benchmem geom/wkb_bench_test.go > master.bench
    
    # switch branch
    go test -bench=. -count=5 -test.run=none -benchmem geom/wkb_bench_test.go > pr.bench
    
    # note the count=5 above, the benchstat command requires each file 
    # contains the concatenated output of several runs.
    benchstat master.bench pr.bench
    
    opened by missinglink 5
  • Allow Envelopes to be optionally empty

    Allow Envelopes to be optionally empty

    Description

    Allow Envelopes to be optionally empty.

    Envelopes now act more like regular geometries, in in the sense that they can be empty or not. This helps to eliminate a large amount of bool checking code outside of the envelope whenever envelopes are used.

    Check List

    Have you:

    • Added unit tests? Yes.

    • Add cmprefimpl tests? (if appropriate?) No, relies on existing.

    Related Issue

    • https://github.com/peterstace/simplefeatures/issues/412

    Benchmark Results

    There are some regressions in multipolygon validation performance:

    Click to expand
    COMPARISON
    name                                                        old time/op    new time/op    delta
    pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:amd64
    LineEnvelope/0-4                                              2.06ns ±53%    7.09ns ±12%  +243.93%  (p=0.000 n=15+12)
    LineEnvelope/1-4                                              1.06ns ± 5%    6.57ns ± 6%  +519.68%  (p=0.000 n=13+15)
    LineEnvelope/2-4                                              1.32ns ± 4%    7.08ns ± 7%  +438.22%  (p=0.000 n=14+15)
    LineEnvelope/3-4                                              1.17ns ± 3%    6.69ns ± 4%  +471.99%  (p=0.000 n=13+15)
    MarshalWKB/polygon/n=10-4                                      191ns ±14%     187ns ±12%      ~     (p=0.458 n=15+14)
    MarshalWKB/polygon/n=100-4                                     525ns ±27%     539ns ±18%      ~     (p=0.471 n=13+13)
    MarshalWKB/polygon/n=1000-4                                   3.69µs ±37%    3.49µs ±40%      ~     (p=0.652 n=15+14)
    MarshalWKB/polygon/n=10000-4                                  31.7µs ±49%    33.5µs ±55%      ~     (p=0.910 n=14+14)
    UnmarshalWKB/polygon/n=10-4                                    332ns ±33%     318ns ±16%      ~     (p=0.432 n=15+14)
    UnmarshalWKB/polygon/n=100-4                                   668ns ±12%     703ns ±14%      ~     (p=0.123 n=12+13)
    UnmarshalWKB/polygon/n=1000-4                                 4.23µs ±36%    3.92µs ±28%      ~     (p=0.222 n=13+15)
    UnmarshalWKB/polygon/n=10000-4                                40.3µs ±36%    35.7µs ±23%      ~     (p=0.123 n=14+15)
    IntersectsLineStringWithLineString/n=10-4                     1.45µs ± 9%    1.44µs ±15%      ~     (p=0.367 n=12+14)
    IntersectsLineStringWithLineString/n=100-4                    20.7µs ±11%    21.5µs ±27%      ~     (p=0.591 n=14+15)
    IntersectsLineStringWithLineString/n=1000-4                    202µs ±15%     201µs ±13%      ~     (p=0.839 n=14+14)
    IntersectsLineStringWithLineString/n=10000-4                  2.97ms ± 9%    2.97ms ±13%      ~     (p=0.804 n=14+14)
    IntersectsMultiPointWithMultiPoint/n=20-4                      949ns ±14%     937ns ±15%      ~     (p=0.340 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=200-4                    10.6µs ±11%    10.7µs ± 7%      ~     (p=0.488 n=13+14)
    IntersectsMultiPointWithMultiPoint/n=2000-4                    110µs ±18%     105µs ±11%      ~     (p=0.125 n=14+14)
    IntersectsMultiPointWithMultiPoint/n=20000-4                  1.22ms ± 9%    1.20ms ±19%      ~     (p=0.264 n=13+13)
    PolygonSingleRingValidation/n=10-4                            2.45µs ± 7%    2.66µs ±12%    +8.38%  (p=0.001 n=15+14)
    PolygonSingleRingValidation/n=100-4                           32.7µs ±11%    33.8µs ± 7%      ~     (p=0.102 n=15+14)
    PolygonSingleRingValidation/n=1000-4                           384µs ± 9%     402µs ±11%    +4.73%  (p=0.020 n=14+15)
    PolygonSingleRingValidation/n=10000-4                         4.98ms ±10%    5.05ms ±18%      ~     (p=0.829 n=12+15)
    PolygonMultipleRingsValidation/n=4-4                          7.24µs ±13%    7.24µs ±12%      ~     (p=0.949 n=14+15)
    PolygonMultipleRingsValidation/n=36-4                         59.9µs ±11%    62.6µs ±10%    +4.57%  (p=0.050 n=14+14)
    PolygonMultipleRingsValidation/n=400-4                         766µs ± 9%     773µs ± 9%      ~     (p=1.000 n=14+14)
    PolygonMultipleRingsValidation/n=4096-4                       8.73ms ± 8%    9.09ms ±12%      ~     (p=0.125 n=14+14)
    PolygonZigZagRingsValidation/n=10-4                           11.6µs ±18%    11.8µs ± 5%    +1.84%  (p=0.033 n=14+13)
    PolygonZigZagRingsValidation/n=100-4                           133µs ±17%     132µs ± 9%      ~     (p=0.461 n=15+15)
    PolygonZigZagRingsValidation/n=1000-4                         1.44ms ± 9%    1.47ms ± 9%      ~     (p=0.158 n=15+14)
    PolygonZigZagRingsValidation/n=10000-4                        20.0ms ±18%    20.3ms ±31%      ~     (p=0.946 n=14+14)
    PolygonAnnulusValidation/n=10-4                               3.81µs ±15%    3.80µs ± 7%      ~     (p=0.720 n=14+13)
    PolygonAnnulusValidation/n=100-4                              34.0µs ±23%    35.1µs ±11%      ~     (p=0.142 n=15+13)
    PolygonAnnulusValidation/n=1000-4                              541µs ± 5%     565µs ±13%    +4.43%  (p=0.008 n=14+13)
    PolygonAnnulusValidation/n=10000-4                            6.76ms ±13%    6.52ms ± 5%      ~     (p=0.246 n=14+14)
    MultipolygonValidation/n=1-4                                   402ns ± 9%     440ns ± 7%    +9.28%  (p=0.000 n=15+15)
    MultipolygonValidation/n=4-4                                   872ns ± 9%    1121ns ± 7%   +28.50%  (p=0.000 n=14+13)
    MultipolygonValidation/n=16-4                                 3.57µs ±10%    4.47µs ± 6%   +25.16%  (p=0.000 n=14+14)
    MultipolygonValidation/n=64-4                                 15.8µs ± 7%    19.7µs ± 6%   +24.19%  (p=0.000 n=14+14)
    MultipolygonValidation/n=256-4                                 101µs ± 8%     116µs ± 2%   +14.96%  (p=0.000 n=14+11)
    MultipolygonValidation/n=1024-4                                480µs ± 8%     554µs ±17%   +15.40%  (p=0.000 n=15+15)
    MultiPolygonTwoCircles/n=10-4                                 3.81µs ±12%    3.89µs ±26%      ~     (p=0.667 n=14+14)
    MultiPolygonTwoCircles/n=100-4                                37.8µs ±11%    39.8µs ±14%      ~     (p=0.077 n=14+15)
    MultiPolygonTwoCircles/n=1000-4                                394µs ±10%     410µs ±11%      ~     (p=0.072 n=13+13)
    MultiPolygonTwoCircles/n=10000-4                              5.88ms ±20%    6.04ms ±18%      ~     (p=0.186 n=15+14)
    MultiPolygonMultipleTouchingPoints/n=1-4                      4.67µs ±12%    4.88µs ± 7%    +4.44%  (p=0.037 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=10-4                     38.4µs ±13%    37.4µs ± 8%      ~     (p=0.432 n=15+14)
    MultiPolygonMultipleTouchingPoints/n=100-4                     447µs ±12%     443µs ± 7%      ~     (p=0.960 n=13+13)
    MultiPolygonMultipleTouchingPoints/n=1000-4                   5.28ms ±11%    5.08ms ± 3%      ~     (p=0.193 n=14+12)
    WKTParsing/point-4                                            1.76µs ± 8%    1.86µs ±24%      ~     (p=0.223 n=14+14)
    DistancePolygonToPolygonOrdering/n=100_swap=false-4           49.1µs ±14%    50.0µs ± 9%      ~     (p=0.295 n=13+12)
    DistancePolygonToPolygonOrdering/n=100_swap=true-4            49.5µs ±11%    49.5µs ±12%      ~     (p=0.813 n=14+15)
    DistancePolygonToPolygonOrdering/n=1000_swap=false-4           764µs ±10%     767µs ±10%      ~     (p=0.867 n=14+13)
    DistancePolygonToPolygonOrdering/n=1000_swap=true-4            749µs ± 7%     766µs ± 5%      ~     (p=0.145 n=14+12)
    IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4     5.38µs ± 8%    5.54µs ±11%      ~     (p=0.212 n=12+14)
    IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4      5.47µs ±11%    5.58µs ±13%      ~     (p=0.347 n=12+14)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4    58.9µs ± 9%    60.2µs ±15%      ~     (p=0.496 n=15+13)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     60.5µs ±11%    59.2µs ±16%      ~     (p=0.234 n=15+14)
    MultiLineStringIsSimpleManyLineStrings/n=100-4                53.7µs ±17%    54.0µs ±10%      ~     (p=0.567 n=15+15)
    MultiLineStringIsSimpleManyLineStrings/n=1000-4                546µs ±14%     551µs ±13%      ~     (p=0.541 n=14+14)
    pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
    IntersectionWithoutValidation/n=10-4                          38.0µs ± 6%    37.1µs ± 5%      ~     (p=0.072 n=13+13)
    IntersectionWithoutValidation/n=100-4                         74.6µs ± 8%    72.7µs ± 5%    -2.59%  (p=0.020 n=14+15)
    IntersectionWithoutValidation/n=1000-4                         328µs ±15%     327µs ±14%      ~     (p=1.000 n=14+15)
    IntersectionWithoutValidation/n=10000-4                       3.03ms ±15%    3.01ms ± 9%      ~     (p=0.914 n=15+14)
    NoOp/n=10-4                                                   3.84µs ± 5%    3.94µs ±13%      ~     (p=0.285 n=13+14)
    NoOp/n=100-4                                                  11.9µs ±10%    11.9µs ± 8%      ~     (p=0.870 n=15+15)
    NoOp/n=1000-4                                                 84.3µs ±12%    82.9µs ±13%      ~     (p=0.561 n=15+14)
    NoOp/n=10000-4                                                 982µs ±19%     979µs ±15%      ~     (p=0.744 n=15+15)
    pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:amd64
    LineStringIsSimpleCircle/n=10-4                               2.12µs ±17%    2.11µs ±10%      ~     (p=0.717 n=15+13)
    LineStringIsSimpleCircle/n=100-4                              30.1µs ±11%    30.0µs ± 6%      ~     (p=0.982 n=14+14)
    LineStringIsSimpleCircle/n=1000-4                              375µs ±11%     372µs ± 6%      ~     (p=0.874 n=14+14)
    LineStringIsSimpleCircle/n=10000-4                            4.81ms ±19%    4.92ms ±14%      ~     (p=0.201 n=14+15)
    LineStringIsSimpleZigZag/10-4                                 1.83µs ±11%    1.91µs ±12%    +4.03%  (p=0.044 n=13+14)
    LineStringIsSimpleZigZag/100-4                                30.5µs ±13%    29.8µs ± 8%      ~     (p=0.444 n=14+15)
    LineStringIsSimpleZigZag/1000-4                                364µs ±10%     361µs ± 9%      ~     (p=0.367 n=15+15)
    LineStringIsSimpleZigZag/10000-4                              4.93ms ± 7%    5.11ms ±14%      ~     (p=0.270 n=15+14)
    SetOperation/n=4/Go_Intersection-4                            42.8µs ± 5%    44.3µs ±19%      ~     (p=0.847 n=14+15)
    SetOperation/n=4/Go_Difference-4                              43.5µs ± 8%    43.6µs ± 7%      ~     (p=0.960 n=13+13)
    SetOperation/n=4/Go_SymmetricDifference-4                     57.5µs ±11%    59.5µs ±22%      ~     (p=0.310 n=14+15)
    SetOperation/n=4/Go_Union-4                                   45.9µs ± 7%    46.9µs ±16%      ~     (p=0.541 n=14+14)
    SetOperation/n=4/GEOS_Intersection-4                          33.9µs ± 9%    35.4µs ±15%      ~     (p=0.108 n=13+15)
    SetOperation/n=4/GEOS_Difference-4                            34.9µs ± 5%    36.2µs ±12%      ~     (p=0.186 n=13+13)
    SetOperation/n=4/GEOS_SymmetricDifference-4                   50.9µs ± 7%    51.1µs ± 4%      ~     (p=0.856 n=15+13)
    SetOperation/n=4/GEOS_Union-4                                 35.1µs ± 4%    36.3µs ±10%    +3.32%  (p=0.027 n=14+14)
    SetOperation/n=8/Go_Intersection-4                            56.1µs ±13%    57.2µs ±17%      ~     (p=0.591 n=14+15)
    SetOperation/n=8/Go_Difference-4                              56.5µs ±13%    56.5µs ± 8%      ~     (p=0.914 n=14+15)
    SetOperation/n=8/Go_SymmetricDifference-4                     72.9µs ±12%    76.7µs ±35%      ~     (p=0.401 n=14+14)
    SetOperation/n=8/Go_Union-4                                   56.7µs ±11%    57.9µs ±15%      ~     (p=0.331 n=14+15)
    SetOperation/n=8/GEOS_Intersection-4                          43.3µs ± 7%    43.7µs ± 8%      ~     (p=0.652 n=14+15)
    SetOperation/n=8/GEOS_Difference-4                            42.4µs ± 6%    42.3µs ± 6%      ~     (p=0.880 n=15+14)
    SetOperation/n=8/GEOS_SymmetricDifference-4                   59.5µs ± 5%    61.9µs ± 8%    +3.98%  (p=0.018 n=14+15)
    SetOperation/n=8/GEOS_Union-4                                 41.9µs ±11%    41.0µs ±10%      ~     (p=0.158 n=15+14)
    SetOperation/n=16/Go_Intersection-4                           77.5µs ±12%    78.8µs ±16%      ~     (p=0.539 n=15+15)
    SetOperation/n=16/Go_Difference-4                             82.7µs ±14%    79.7µs ±10%      ~     (p=0.112 n=15+14)
    SetOperation/n=16/Go_SymmetricDifference-4                     109µs ± 4%     111µs ±10%      ~     (p=0.374 n=12+14)
    SetOperation/n=16/Go_Union-4                                  84.3µs ± 9%    88.9µs ±13%    +5.50%  (p=0.015 n=13+15)
    SetOperation/n=16/GEOS_Intersection-4                         47.4µs ± 7%    47.3µs ± 4%      ~     (p=0.981 n=15+12)
    SetOperation/n=16/GEOS_Difference-4                           50.1µs ± 7%    51.9µs ± 9%      ~     (p=0.126 n=15+15)
    SetOperation/n=16/GEOS_SymmetricDifference-4                  76.8µs ± 5%    79.9µs ±10%      ~     (p=0.072 n=13+15)
    SetOperation/n=16/GEOS_Union-4                                51.1µs ±10%    52.6µs ±14%      ~     (p=0.126 n=15+15)
    SetOperation/n=32/Go_Intersection-4                            130µs ±10%     141µs ±19%    +8.17%  (p=0.010 n=15+14)
    SetOperation/n=32/Go_Difference-4                              136µs ±10%     141µs ±12%      ~     (p=0.112 n=15+14)
    SetOperation/n=32/Go_SymmetricDifference-4                     188µs ±16%     182µs ± 6%      ~     (p=0.302 n=13+14)
    SetOperation/n=32/Go_Union-4                                   142µs ±14%     145µs ±13%      ~     (p=0.210 n=14+14)
    SetOperation/n=32/GEOS_Intersection-4                         60.0µs ±10%    61.4µs ± 5%      ~     (p=0.088 n=15+13)
    SetOperation/n=32/GEOS_Difference-4                           62.8µs ±12%    64.6µs ± 7%    +2.81%  (p=0.039 n=14+14)
    SetOperation/n=32/GEOS_SymmetricDifference-4                   114µs ±17%     113µs ± 6%      ~     (p=0.902 n=15+15)
    SetOperation/n=32/GEOS_Union-4                                65.4µs ±21%    64.3µs ± 3%      ~     (p=0.541 n=14+14)
    SetOperation/n=64/Go_Intersection-4                            225µs ±10%     218µs ± 6%      ~     (p=0.108 n=15+13)
    SetOperation/n=64/Go_Difference-4                              241µs ±10%     237µs ±13%      ~     (p=0.715 n=15+14)
    SetOperation/n=64/Go_SymmetricDifference-4                     324µs ± 7%     331µs ±14%      ~     (p=0.427 n=14+14)
    SetOperation/n=64/Go_Union-4                                   254µs ±13%     258µs ±13%      ~     (p=0.595 n=15+15)
    SetOperation/n=64/GEOS_Intersection-4                         81.7µs ±17%    82.1µs ±12%      ~     (p=0.451 n=15+14)
    SetOperation/n=64/GEOS_Difference-4                           98.3µs ± 9%    98.6µs ± 9%      ~     (p=0.376 n=14+14)
    SetOperation/n=64/GEOS_SymmetricDifference-4                   188µs ±12%     188µs ± 7%      ~     (p=0.541 n=14+14)
    SetOperation/n=64/GEOS_Union-4                                 104µs ±12%     103µs ± 6%      ~     (p=1.000 n=14+13)
    SetOperation/n=128/Go_Intersection-4                           411µs ±13%     408µs ±13%      ~     (p=0.734 n=14+14)
    SetOperation/n=128/Go_Difference-4                             427µs ±11%     438µs ±17%      ~     (p=0.780 n=14+15)
    SetOperation/n=128/Go_SymmetricDifference-4                    713µs ±60%     585µs ±11%      ~     (p=0.345 n=15+15)
    SetOperation/n=128/Go_Union-4                                  449µs ± 6%     449µs ±10%      ~     (p=0.899 n=12+14)
    SetOperation/n=128/GEOS_Intersection-4                         131µs ±10%     133µs ±11%      ~     (p=0.412 n=15+15)
    SetOperation/n=128/GEOS_Difference-4                           152µs ±11%     156µs ±10%      ~     (p=0.250 n=15+15)
    SetOperation/n=128/GEOS_SymmetricDifference-4                  308µs ± 9%     307µs ± 6%      ~     (p=0.470 n=12+13)
    SetOperation/n=128/GEOS_Union-4                                165µs ±22%     165µs ± 9%      ~     (p=0.202 n=15+15)
    SetOperation/n=256/Go_Intersection-4                           729µs ± 9%     740µs ± 9%      ~     (p=0.458 n=13+14)
    SetOperation/n=256/Go_Difference-4                             793µs ±13%     789µs ± 6%      ~     (p=0.979 n=13+12)
    SetOperation/n=256/Go_SymmetricDifference-4                   1.12ms ± 8%    1.15ms ±11%      ~     (p=0.413 n=15+13)
    SetOperation/n=256/Go_Union-4                                  826µs ± 6%     848µs ±13%      ~     (p=0.186 n=13+13)
    SetOperation/n=256/GEOS_Intersection-4                         207µs ±10%     211µs ± 6%      ~     (p=0.316 n=15+13)
    SetOperation/n=256/GEOS_Difference-4                           268µs ±11%     266µs ± 7%      ~     (p=0.867 n=14+13)
    SetOperation/n=256/GEOS_SymmetricDifference-4                  566µs ±10%     575µs ±10%      ~     (p=0.331 n=15+14)
    SetOperation/n=256/GEOS_Union-4                                284µs ±11%     297µs ±15%      ~     (p=0.089 n=15+15)
    SetOperation/n=512/Go_Intersection-4                          1.46ms ± 7%    1.51ms ±23%      ~     (p=0.541 n=14+14)
    SetOperation/n=512/Go_Difference-4                            1.55ms ± 7%    1.56ms ±13%      ~     (p=0.839 n=14+14)
    SetOperation/n=512/Go_SymmetricDifference-4                   2.15ms ±11%    2.15ms ±11%      ~     (p=0.793 n=13+14)
    SetOperation/n=512/Go_Union-4                                 1.64ms ±15%    1.69ms ±23%      ~     (p=0.451 n=15+14)
    SetOperation/n=512/GEOS_Intersection-4                         360µs ± 6%     382µs ±12%    +6.25%  (p=0.001 n=14+14)
    SetOperation/n=512/GEOS_Difference-4                           444µs ± 9%     454µs ±13%      ~     (p=0.254 n=15+13)
    SetOperation/n=512/GEOS_SymmetricDifference-4                 1.04ms ±10%    1.09ms ± 9%    +4.50%  (p=0.015 n=15+15)
    SetOperation/n=512/GEOS_Union-4                                486µs ± 7%     497µs ± 5%      ~     (p=0.126 n=15+15)
    SetOperation/n=1024/Go_Intersection-4                         2.95ms ±11%    3.01ms ±11%      ~     (p=0.591 n=15+14)
    SetOperation/n=1024/Go_Difference-4                           3.12ms ± 7%    3.16ms ±16%      ~     (p=0.981 n=13+14)
    SetOperation/n=1024/Go_SymmetricDifference-4                  4.41ms ±10%    4.37ms ±11%      ~     (p=0.793 n=13+14)
    SetOperation/n=1024/Go_Union-4                                3.36ms ±20%    3.33ms ±11%      ~     (p=0.910 n=14+14)
    SetOperation/n=1024/GEOS_Intersection-4                        644µs ± 3%     678µs ± 7%    +5.24%  (p=0.000 n=12+15)
    SetOperation/n=1024/GEOS_Difference-4                          872µs ± 3%     949µs ±12%    +8.85%  (p=0.000 n=13+15)
    SetOperation/n=1024/GEOS_SymmetricDifference-4                2.15ms ± 7%    2.31ms ±18%    +7.53%  (p=0.004 n=12+15)
    SetOperation/n=1024/GEOS_Union-4                              1.08ms ±16%    1.11ms ±16%      ~     (p=0.425 n=14+15)
    SetOperation/n=2048/Go_Intersection-4                         6.24ms ± 8%    6.32ms ±12%      ~     (p=0.650 n=14+13)
    SetOperation/n=2048/Go_Difference-4                           6.54ms ±17%    6.80ms ±24%      ~     (p=0.290 n=14+15)
    SetOperation/n=2048/Go_SymmetricDifference-4                  9.00ms ±12%    9.26ms ±16%      ~     (p=0.217 n=15+14)
    SetOperation/n=2048/Go_Union-4                                7.00ms ±12%    6.96ms ±12%      ~     (p=0.914 n=15+14)
    SetOperation/n=2048/GEOS_Intersection-4                       1.39ms ± 8%    1.46ms ±10%    +5.39%  (p=0.002 n=14+15)
    SetOperation/n=2048/GEOS_Difference-4                         1.76ms ±19%    1.81ms ±14%      ~     (p=0.116 n=15+15)
    SetOperation/n=2048/GEOS_SymmetricDifference-4                4.14ms ± 5%    4.47ms ±13%    +8.01%  (p=0.002 n=14+14)
    SetOperation/n=2048/GEOS_Union-4                              1.93ms ±10%    2.08ms ±16%    +7.94%  (p=0.004 n=14+15)
    SetOperation/n=4096/Go_Intersection-4                         13.0ms ± 7%    13.6ms ±10%      ~     (p=0.077 n=14+14)
    SetOperation/n=4096/Go_Difference-4                           14.7ms ±24%    14.3ms ±13%      ~     (p=0.683 n=15+14)
    SetOperation/n=4096/Go_SymmetricDifference-4                  19.2ms ±11%    19.3ms ±11%      ~     (p=1.000 n=15+15)
    SetOperation/n=4096/Go_Union-4                                14.5ms ±15%    14.4ms ±11%      ~     (p=1.000 n=14+15)
    SetOperation/n=4096/GEOS_Intersection-4                       2.55ms ±11%    2.57ms ± 4%      ~     (p=0.494 n=14+12)
    SetOperation/n=4096/GEOS_Difference-4                         3.88ms ±28%    3.72ms ±14%      ~     (p=0.290 n=15+14)
    SetOperation/n=4096/GEOS_SymmetricDifference-4                9.29ms ±13%    9.74ms ±20%      ~     (p=0.102 n=14+15)
    SetOperation/n=4096/GEOS_Union-4                              4.17ms ±11%    4.25ms ±14%      ~     (p=0.376 n=14+14)
    SetOperation/n=8192/Go_Intersection-4                         26.4ms ±14%    27.3ms ±17%      ~     (p=0.217 n=15+15)
    SetOperation/n=8192/Go_Difference-4                           28.5ms ±19%    29.4ms ±15%      ~     (p=0.201 n=14+15)
    SetOperation/n=8192/Go_SymmetricDifference-4                  38.4ms ±17%    38.2ms ±17%      ~     (p=0.880 n=15+14)
    SetOperation/n=8192/Go_Union-4                                28.4ms ± 9%    29.5ms ±20%      ~     (p=0.430 n=14+13)
    SetOperation/n=8192/GEOS_Intersection-4                       5.59ms ±12%    5.94ms ±15%      ~     (p=0.056 n=14+14)
    SetOperation/n=8192/GEOS_Difference-4                         7.32ms ± 8%    7.88ms ±11%    +7.73%  (p=0.010 n=15+14)
    SetOperation/n=8192/GEOS_SymmetricDifference-4                18.1ms ±12%    19.1ms ±12%    +5.83%  (p=0.018 n=15+14)
    SetOperation/n=8192/GEOS_Union-4                              8.35ms ±20%    8.96ms ±14%    +7.31%  (p=0.007 n=14+14)
    SetOperation/n=16384/Go_Intersection-4                        56.0ms ±14%    56.7ms ±11%      ~     (p=0.505 n=14+15)
    SetOperation/n=16384/Go_Difference-4                          61.1ms ±11%    59.3ms ± 8%      ~     (p=0.201 n=13+15)
    SetOperation/n=16384/Go_SymmetricDifference-4                 80.5ms ± 7%    81.1ms ±12%      ~     (p=0.867 n=13+14)
    SetOperation/n=16384/Go_Union-4                               61.9ms ±10%    62.3ms ±10%      ~     (p=0.652 n=14+15)
    SetOperation/n=16384/GEOS_Intersection-4                      11.6ms ± 8%    11.7ms ±14%      ~     (p=1.000 n=12+14)
    SetOperation/n=16384/GEOS_Difference-4                        16.3ms ±22%    16.1ms ± 7%      ~     (p=0.905 n=13+14)
    SetOperation/n=16384/GEOS_SymmetricDifference-4               35.4ms ±12%    37.2ms ±12%    +4.84%  (p=0.029 n=13+15)
    SetOperation/n=16384/GEOS_Union-4                             17.8ms ± 9%    19.4ms ±15%    +9.25%  (p=0.002 n=15+15)
    pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
    Delete/n=100-4                                                19.0µs ± 5%    19.0µs ± 6%      ~     (p=0.958 n=15+14)
    Delete/n=1000-4                                                652µs ± 5%     681µs ±12%    +4.35%  (p=0.009 n=14+15)
    Delete/n=10000-4                                              31.8ms ± 9%    31.6ms ± 6%      ~     (p=0.902 n=15+15)
    Bulk/n=10-4                                                    828ns ±25%    1114ns ±60%   +34.55%  (p=0.001 n=15+15)
    Bulk/n=100-4                                                  13.3µs ±14%    13.7µs ±16%      ~     (p=0.400 n=15+14)
    Bulk/n=1000-4                                                  216µs ±11%     219µs ±13%      ~     (p=0.310 n=15+14)
    Bulk/n=10000-4                                                2.99ms ± 7%    3.00ms ±10%      ~     (p=0.982 n=14+14)
    Bulk/n=100000-4                                               34.7ms ± 3%    36.1ms ± 8%    +4.04%  (p=0.025 n=12+15)
    Insert/n=10-4                                                 1.18µs ±16%    1.22µs ±14%      ~     (p=0.214 n=14+14)
    Insert/n=100-4                                                19.9µs ± 3%    20.7µs ±11%    +3.98%  (p=0.025 n=13+14)
    Insert/n=1000-4                                                436µs ± 6%     439µs ± 7%      ~     (p=0.744 n=15+15)
    Insert/n=10000-4                                              5.35ms ± 5%    5.34ms ± 5%      ~     (p=0.874 n=14+14)
    Insert/n=100000-4                                             62.9ms ±14%    61.0ms ± 6%      ~     (p=0.217 n=15+14)
    RangeSearch/n=10-4                                            15.1ns ± 8%    15.1ns ± 3%      ~     (p=0.991 n=15+13)
    RangeSearch/n=100-4                                           59.2ns ± 4%    59.2ns ± 4%      ~     (p=0.687 n=13+13)
    RangeSearch/n=1000-4                                           218ns ± 7%     223ns ± 6%      ~     (p=0.270 n=14+15)
    RangeSearch/n=10000-4                                          775ns ±10%     778ns ± 9%      ~     (p=0.624 n=15+15)
    RangeSearch/n=100000-4                                        7.40µs ± 6%    7.31µs ± 6%      ~     (p=0.201 n=15+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%      ~     (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%      ~     (p=1.000 n=15+15)
    IntersectsLineStringWithLineString/n=10000-4                  2.63MB ± 0%    2.63MB ± 0%      ~     (p=0.098 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=20-4                       324B ± 0%      324B ± 0%      ~     (all equal)
    IntersectsMultiPointWithMultiPoint/n=200-4                    3.06kB ± 0%    3.07kB ± 0%      ~     (p=0.516 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=2000-4                   49.3kB ± 0%    49.3kB ± 0%      ~     (p=0.351 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=20000-4                   339kB ± 0%     339kB ± 0%      ~     (p=0.319 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=1.000 n=15+15)
    PolygonSingleRingValidation/n=10000-4                         1.97MB ± 0%    1.97MB ± 0%      ~     (p=0.200 n=15+15)
    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%      ~     (p=0.592 n=14+15)
    PolygonMultipleRingsValidation/n=4096-4                       6.28MB ± 0%    6.28MB ± 0%      ~     (p=0.959 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%      ~     (p=0.288 n=15+15)
    PolygonZigZagRingsValidation/n=10000-4                        7.24MB ± 0%    7.24MB ± 0%      ~     (p=0.959 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.298 n=13+15)
    PolygonAnnulusValidation/n=10000-4                            3.89MB ± 0%    3.89MB ± 0%      ~     (p=0.425 n=15+14)
    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%      ~     (p=0.860 n=15+15)
    MultiPolygonTwoCircles/n=10000-4                              4.60MB ± 0%    4.60MB ± 0%      ~     (p=0.364 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%      ~     (p=0.200 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=100-4                     182kB ± 0%     182kB ± 0%      ~     (p=0.345 n=14+14)
    MultiPolygonMultipleTouchingPoints/n=1000-4                   2.10MB ± 0%    2.10MB ± 0%      ~     (p=0.300 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.725 n=15+13)
    DistancePolygonToPolygonOrdering/n=1000_swap=true-4            369kB ± 0%     369kB ± 0%      ~     (p=0.971 n=13+14)
    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.546 n=15+15)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     60.1kB ± 0%    60.1kB ± 0%    +0.00%  (p=0.034 n=12+15)
    MultiLineStringIsSimpleManyLineStrings/n=100-4                59.2kB ± 0%    59.2kB ± 0%      ~     (all equal)
    MultiLineStringIsSimpleManyLineStrings/n=1000-4                491kB ± 0%     491kB ± 0%      ~     (p=0.569 n=15+15)
    pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
    IntersectionWithoutValidation/n=10-4                          1.32kB ± 0%    1.32kB ± 0%      ~     (all equal)
    IntersectionWithoutValidation/n=100-4                         6.46kB ± 0%    6.46kB ± 0%      ~     (p=1.000 n=15+15)
    IntersectionWithoutValidation/n=1000-4                        55.1kB ± 0%    55.1kB ± 0%    +0.00%  (p=0.034 n=12+15)
    IntersectionWithoutValidation/n=10000-4                        558kB ± 0%     558kB ± 0%      ~     (p=0.718 n=14+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.117 n=13+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%      ~     (all equal)
    LineStringIsSimpleCircle/n=10000-4                            1.97MB ± 0%    1.97MB ± 0%    -0.00%  (p=0.005 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.056 n=15+12)
    LineStringIsSimpleZigZag/10000-4                              1.97MB ± 0%    1.97MB ± 0%      ~     (p=0.391 n=15+15)
    SetOperation/n=4/Go_Intersection-4                            20.4kB ± 0%    20.4kB ± 0%      ~     (p=0.348 n=15+15)
    SetOperation/n=4/Go_Difference-4                              21.4kB ± 0%    21.4kB ± 0%      ~     (p=0.865 n=14+14)
    SetOperation/n=4/Go_SymmetricDifference-4                     29.5kB ± 0%    29.5kB ± 0%      ~     (p=0.975 n=15+15)
    SetOperation/n=4/Go_Union-4                                   22.1kB ± 0%    22.1kB ± 0%      ~     (p=0.508 n=15+14)
    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.8kB ± 0%    10.8kB ± 0%      ~     (all equal)
    SetOperation/n=4/GEOS_Union-4                                 3.21kB ± 0%    3.21kB ± 0%      ~     (all equal)
    SetOperation/n=8/Go_Intersection-4                            27.1kB ± 0%    27.1kB ± 0%      ~     (p=0.175 n=15+15)
    SetOperation/n=8/Go_Difference-4                              27.3kB ± 0%    27.3kB ± 0%      ~     (p=0.381 n=14+15)
    SetOperation/n=8/Go_SymmetricDifference-4                     37.3kB ± 0%    37.3kB ± 0%      ~     (p=0.151 n=15+15)
    SetOperation/n=8/Go_Union-4                                   27.4kB ± 0%    27.4kB ± 0%      ~     (p=0.382 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.3kB ± 0%    13.3kB ± 0%      ~     (all equal)
    SetOperation/n=8/GEOS_Union-4                                 3.62kB ± 0%    3.62kB ± 0%      ~     (all equal)
    SetOperation/n=16/Go_Intersection-4                           37.4kB ± 0%    37.4kB ± 0%      ~     (p=0.510 n=14+15)
    SetOperation/n=16/Go_Difference-4                             40.5kB ± 0%    40.5kB ± 0%      ~     (p=0.279 n=15+15)
    SetOperation/n=16/Go_SymmetricDifference-4                    59.6kB ± 0%    59.6kB ± 0%      ~     (p=0.288 n=15+15)
    SetOperation/n=16/Go_Union-4                                  42.0kB ± 0%    42.0kB ± 0%      ~     (p=0.167 n=14+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                  25.3kB ± 0%    25.3kB ± 0%      ~     (all equal)
    SetOperation/n=16/GEOS_Union-4                                8.28kB ± 0%    8.28kB ± 0%      ~     (all equal)
    SetOperation/n=32/Go_Intersection-4                           67.9kB ± 0%    67.9kB ± 0%      ~     (p=0.908 n=11+15)
    SetOperation/n=32/Go_Difference-4                             70.5kB ± 0%    70.5kB ± 0%      ~     (p=0.454 n=15+15)
    SetOperation/n=32/Go_SymmetricDifference-4                     101kB ± 0%     101kB ± 0%      ~     (p=0.736 n=15+15)
    SetOperation/n=32/Go_Union-4                                  71.0kB ± 0%    71.0kB ± 0%      ~     (p=0.220 n=15+14)
    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                  39.9kB ± 0%    39.9kB ± 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%      ~     (p=0.883 n=14+14)
    SetOperation/n=64/Go_Difference-4                              125kB ± 0%     125kB ± 0%      ~     (p=0.539 n=14+15)
    SetOperation/n=64/Go_SymmetricDifference-4                     191kB ± 0%     191kB ± 0%      ~     (p=0.220 n=15+15)
    SetOperation/n=64/Go_Union-4                                   129kB ± 0%     129kB ± 0%      ~     (p=0.846 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.5kB ± 0%    87.5kB ± 0%      ~     (all equal)
    SetOperation/n=64/GEOS_Union-4                                28.0kB ± 0%    28.0kB ± 0%      ~     (all equal)
    SetOperation/n=128/Go_Intersection-4                           230kB ± 0%     230kB ± 0%      ~     (p=0.175 n=14+15)
    SetOperation/n=128/Go_Difference-4                             242kB ± 0%     242kB ± 0%      ~     (p=0.492 n=15+15)
    SetOperation/n=128/Go_SymmetricDifference-4                    353kB ± 0%     353kB ± 0%      ~     (p=0.064 n=13+11)
    SetOperation/n=128/Go_Union-4                                  244kB ± 0%     244kB ± 0%      ~     (p=0.212 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.607 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%      ~     (p=0.505 n=15+15)
    SetOperation/n=256/Go_Difference-4                             466kB ± 0%     466kB ± 0%      ~     (p=0.128 n=15+15)
    SetOperation/n=256/Go_SymmetricDifference-4                    722kB ± 0%     722kB ± 0%    +0.00%  (p=0.038 n=15+15)
    SetOperation/n=256/Go_Union-4                                  477kB ± 0%     477kB ± 0%      ~     (p=0.071 n=14+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.521 n=15+14)
    SetOperation/n=256/GEOS_Union-4                                106kB ± 0%     106kB ± 0%      ~     (all equal)
    SetOperation/n=512/Go_Intersection-4                           858kB ± 0%     858kB ± 0%      ~     (p=0.659 n=14+15)
    SetOperation/n=512/Go_Difference-4                             905kB ± 0%     905kB ± 0%      ~     (p=0.161 n=15+15)
    SetOperation/n=512/Go_SymmetricDifference-4                   1.33MB ± 0%    1.33MB ± 0%    +0.00%  (p=0.002 n=15+15)
    SetOperation/n=512/Go_Union-4                                  926kB ± 0%     926kB ± 0%      ~     (p=0.095 n=15+15)
    SetOperation/n=512/GEOS_Intersection-4                         115kB ± 0%     115kB ± 0%      ~     (p=0.165 n=15+15)
    SetOperation/n=512/GEOS_Difference-4                           159kB ± 0%     159kB ± 0%      ~     (p=0.070 n=15+13)
    SetOperation/n=512/GEOS_SymmetricDifference-4                  577kB ± 0%     577kB ± 0%      ~     (p=0.594 n=14+15)
    SetOperation/n=512/GEOS_Union-4                                171kB ± 0%     171kB ± 0%      ~     (p=0.601 n=15+15)
    SetOperation/n=1024/Go_Intersection-4                         1.58MB ± 0%    1.58MB ± 0%      ~     (p=0.168 n=14+15)
    SetOperation/n=1024/Go_Difference-4                           1.77MB ± 0%    1.77MB ± 0%      ~     (p=0.493 n=15+15)
    SetOperation/n=1024/Go_SymmetricDifference-4                  2.80MB ± 0%    2.80MB ± 0%      ~     (p=0.691 n=14+15)
    SetOperation/n=1024/Go_Union-4                                1.83MB ± 0%    1.83MB ± 0%      ~     (p=0.337 n=14+15)
    SetOperation/n=1024/GEOS_Intersection-4                        189kB ± 0%     189kB ± 0%      ~     (all equal)
    SetOperation/n=1024/GEOS_Difference-4                          369kB ± 0%     369kB ± 0%      ~     (p=0.133 n=13+15)
    SetOperation/n=1024/GEOS_SymmetricDifference-4                1.38MB ± 0%    1.38MB ± 0%      ~     (p=0.356 n=15+15)
    SetOperation/n=1024/GEOS_Union-4                               415kB ± 0%     415kB ± 0%      ~     (p=0.596 n=15+15)
    SetOperation/n=2048/Go_Intersection-4                         3.64MB ± 0%    3.64MB ± 0%      ~     (p=0.113 n=15+15)
    SetOperation/n=2048/Go_Difference-4                           3.87MB ± 0%    3.87MB ± 0%      ~     (p=0.512 n=15+15)
    SetOperation/n=2048/Go_SymmetricDifference-4                  5.63MB ± 0%    5.63MB ± 0%      ~     (p=0.087 n=14+15)
    SetOperation/n=2048/Go_Union-4                                3.95MB ± 0%    3.95MB ± 0%      ~     (p=0.477 n=15+14)
    SetOperation/n=2048/GEOS_Intersection-4                        460kB ± 0%     460kB ± 0%      ~     (p=0.355 n=15+13)
    SetOperation/n=2048/GEOS_Difference-4                          648kB ± 0%     648kB ± 0%      ~     (p=0.544 n=15+15)
    SetOperation/n=2048/GEOS_SymmetricDifference-4                2.32MB ± 0%    2.32MB ± 0%      ~     (p=0.518 n=15+15)
    SetOperation/n=2048/GEOS_Union-4                               689kB ± 0%     689kB ± 0%      ~     (p=0.501 n=14+15)
    SetOperation/n=4096/Go_Intersection-4                         6.82MB ± 0%    6.82MB ± 0%      ~     (p=0.121 n=15+13)
    SetOperation/n=4096/Go_Difference-4                           7.54MB ± 0%    7.54MB ± 0%      ~     (p=0.104 n=15+15)
    SetOperation/n=4096/Go_SymmetricDifference-4                  11.6MB ± 0%    11.6MB ± 0%      ~     (p=0.519 n=15+15)
    SetOperation/n=4096/Go_Union-4                                7.79MB ± 0%    7.79MB ± 0%      ~     (p=0.653 n=15+15)
    SetOperation/n=4096/GEOS_Intersection-4                        755kB ± 0%     755kB ± 0%    +0.00%  (p=0.034 n=15+15)
    SetOperation/n=4096/GEOS_Difference-4                         1.45MB ± 0%    1.45MB ± 0%      ~     (p=0.161 n=13+15)
    SetOperation/n=4096/GEOS_SymmetricDifference-4                5.34MB ± 0%    5.34MB ± 0%      ~     (p=0.801 n=14+15)
    SetOperation/n=4096/GEOS_Union-4                              1.63MB ± 0%    1.63MB ± 0%      ~     (p=0.339 n=15+14)
    SetOperation/n=8192/Go_Intersection-4                         14.9MB ± 0%    14.9MB ± 0%      ~     (p=0.889 n=15+14)
    SetOperation/n=8192/Go_Difference-4                           15.8MB ± 0%    15.8MB ± 0%      ~     (p=0.237 n=15+15)
    SetOperation/n=8192/Go_SymmetricDifference-4                  22.7MB ± 0%    22.7MB ± 0%      ~     (p=0.442 n=15+15)
    SetOperation/n=8192/Go_Union-4                                16.1MB ± 0%    16.1MB ± 0%      ~     (p=0.412 n=15+15)
    SetOperation/n=8192/GEOS_Intersection-4                       1.76MB ± 0%    1.76MB ± 0%      ~     (p=0.092 n=15+13)
    SetOperation/n=8192/GEOS_Difference-4                         2.47MB ± 0%    2.47MB ± 0%      ~     (p=0.958 n=15+15)
    SetOperation/n=8192/GEOS_SymmetricDifference-4                9.01MB ± 0%    9.01MB ± 0%      ~     (p=0.748 n=15+15)
    SetOperation/n=8192/GEOS_Union-4                              2.66MB ± 0%    2.66MB ± 0%      ~     (p=0.427 n=14+13)
    SetOperation/n=16384/Go_Intersection-4                        27.9MB ± 0%    27.9MB ± 0%      ~     (p=0.559 n=15+15)
    SetOperation/n=16384/Go_Difference-4                          31.0MB ± 0%    31.0MB ± 0%      ~     (p=0.720 n=15+15)
    SetOperation/n=16384/Go_SymmetricDifference-4                 47.3MB ± 0%    47.3MB ± 0%      ~     (p=0.755 n=15+14)
    SetOperation/n=16384/Go_Union-4                               32.0MB ± 0%    32.0MB ± 0%      ~     (p=0.370 n=14+15)
    SetOperation/n=16384/GEOS_Intersection-4                      2.92MB ± 0%    2.92MB ± 0%      ~     (p=0.315 n=15+15)
    SetOperation/n=16384/GEOS_Difference-4                        5.68MB ± 0%    5.68MB ± 0%      ~     (p=0.501 n=13+13)
    SetOperation/n=16384/GEOS_SymmetricDifference-4               21.1MB ± 0%    21.1MB ± 0%      ~     (p=0.183 n=15+15)
    SetOperation/n=16384/GEOS_Union-4                             6.45MB ± 0%    6.45MB ± 0%      ~     (p=0.469 n=15+14)
    pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
    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%      ~     (p=1.000 n=15+15)
    Bulk/n=10000-4                                                1.57MB ± 0%    1.57MB ± 0%      ~     (p=0.105 n=14+14)
    Bulk/n=100000-4                                               20.4MB ± 0%    20.4MB ± 0%      ~     (p=0.269 n=13+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%    -0.00%  (p=0.003 n=15+12)
    Insert/n=10000-4                                              1.34MB ± 0%    1.34MB ± 0%      ~     (p=0.486 n=15+15)
    Insert/n=100000-4                                             13.5MB ± 0%    13.5MB ± 0%      ~     (p=0.125 n=15+15)
    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                        51.0 ± 0%      51.0 ± 0%      ~     (all equal)
    MultiPolygonMultipleTouchingPoints/n=10-4                        298 ± 0%       298 ± 0%      ~     (all equal)
    MultiPolygonMultipleTouchingPoints/n=100-4                     2.62k ± 0%     2.62k ± 0%      ~     (all equal)
    MultiPolygonMultipleTouchingPoints/n=1000-4                    26.7k ± 0%     26.7k ± 0%      ~     (p=0.250 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)
    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                               276 ± 0%       276 ± 0%      ~     (all equal)
    SetOperation/n=4/Go_Difference-4                                 280 ± 0%       280 ± 0%      ~     (all equal)
    SetOperation/n=4/Go_SymmetricDifference-4                        378 ± 0%       378 ± 0%      ~     (all equal)
    SetOperation/n=4/Go_Union-4                                      287 ± 0%       287 ± 0%      ~     (all equal)
    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                      148 ± 0%       148 ± 0%      ~     (all equal)
    SetOperation/n=4/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%      ~     (all equal)
    SetOperation/n=8/Go_Intersection-4                               292 ± 0%       293 ± 0%    +0.21%  (p=0.001 n=13+15)
    SetOperation/n=8/Go_Difference-4                                 293 ± 0%       293 ± 0%      ~     (p=1.000 n=15+15)
    SetOperation/n=8/Go_SymmetricDifference-4                        397 ± 0%       397 ± 0%      ~     (p=0.450 n=15+15)
    SetOperation/n=8/Go_Union-4                                      298 ± 0%       298 ± 0%      ~     (all equal)
    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                      152 ± 0%       152 ± 0%      ~     (all equal)
    SetOperation/n=8/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%      ~     (all equal)
    SetOperation/n=16/Go_Intersection-4                              306 ± 0%       306 ± 0%      ~     (all equal)
    SetOperation/n=16/Go_Difference-4                                316 ± 0%       316 ± 0%      ~     (all equal)
    SetOperation/n=16/Go_SymmetricDifference-4                       445 ± 0%       445 ± 0%      ~     (all equal)
    SetOperation/n=16/Go_Union-4                                     325 ± 0%       325 ± 0%      ~     (all equal)
    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                     185 ± 0%       185 ± 0%      ~     (all equal)
    SetOperation/n=16/GEOS_Union-4                                  68.0 ± 0%      68.0 ± 0%      ~     (all equal)
    SetOperation/n=32/Go_Intersection-4                              357 ± 0%       357 ± 0%      ~     (all equal)
    SetOperation/n=32/Go_Difference-4                                363 ± 0%       363 ± 0%      ~     (all equal)
    SetOperation/n=32/Go_SymmetricDifference-4                       516 ± 0%       516 ± 0%      ~     (all equal)
    SetOperation/n=32/Go_Union-4                                     368 ± 0%       368 ± 0%      ~     (all equal)
    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                     216 ± 0%       216 ± 0%      ~     (all equal)
    SetOperation/n=32/GEOS_Union-4                                  72.0 ± 0%      72.0 ± 0%      ~     (all equal)
    SetOperation/n=64/Go_Intersection-4                              398 ± 0%       398 ± 0%      ~     (p=0.070 n=15+13)
    SetOperation/n=64/Go_Difference-4                                432 ± 0%       432 ± 0%      ~     (p=0.100 n=15+15)
    SetOperation/n=64/Go_SymmetricDifference-4                       683 ± 0%       683 ± 0%      ~     (all equal)
    SetOperation/n=64/Go_Union-4                                     445 ± 0%       445 ± 0%      ~     (p=0.084 n=15+14)
    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                     345 ± 0%       345 ± 0%      ~     (all equal)
    SetOperation/n=64/GEOS_Union-4                                   112 ± 0%       112 ± 0%      ~     (all equal)
    SetOperation/n=128/Go_Intersection-4                             572 ± 0%       572 ± 0%      ~     (all equal)
    SetOperation/n=128/Go_Difference-4                               598 ± 0%       598 ± 0%      ~     (all equal)
    SetOperation/n=128/Go_SymmetricDifference-4                      946 ± 0%       946 ± 0%      ~     (all equal)
    SetOperation/n=128/Go_Union-4                                    603 ± 0%       603 ± 0%      ~     (all equal)
    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                    473 ± 0%       473 ± 0%      ~     (all equal)
    SetOperation/n=128/GEOS_Union-4                                  136 ± 0%       136 ± 0%      ~     (all equal)
    SetOperation/n=256/Go_Intersection-4                             731 ± 0%       731 ± 0%      ~     (all equal)
    SetOperation/n=256/Go_Difference-4                               861 ± 0%       861 ± 0%      ~     (all equal)
    SetOperation/n=256/Go_SymmetricDifference-4                    1.59k ± 0%     1.59k ± 0%      ~     (all equal)
    SetOperation/n=256/Go_Union-4                                    890 ± 0%       890 ± 0%      ~     (all equal)
    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                    985 ± 0%       985 ± 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%      ~     (all equal)
    SetOperation/n=512/Go_Difference-4                             1.51k ± 0%     1.51k ± 0%    +0.04%  (p=0.003 n=14+15)
    SetOperation/n=512/Go_SymmetricDifference-4                    2.62k ± 0%     2.63k ± 0%    +0.02%  (p=0.014 n=12+15)
    SetOperation/n=512/Go_Union-4                                  1.51k ± 0%     1.51k ± 0%    +0.03%  (p=0.017 n=15+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.03k ± 0%     2.03k ± 0%      ~     (all equal)
    SetOperation/n=1024/Go_Difference-4                            2.54k ± 0%     2.54k ± 0%      ~     (all equal)
    SetOperation/n=1024/Go_SymmetricDifference-4                   5.20k ± 0%     5.20k ± 0%      ~     (all equal)
    SetOperation/n=1024/Go_Union-4                                 2.64k ± 0%     2.64k ± 0%      ~     (all equal)
    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.69k ± 0%     4.69k ± 0%      ~     (all equal)
    SetOperation/n=2048/Go_Difference-4                            5.12k ± 0%     5.12k ± 0%      ~     (all equal)
    SetOperation/n=2048/Go_SymmetricDifference-4                   9.31k ± 0%     9.31k ± 0%      ~     (all equal)
    SetOperation/n=2048/Go_Union-4                                 5.12k ± 0%     5.12k ± 0%      ~     (all equal)
    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%      ~     (p=0.115 n=14+15)
    SetOperation/n=4096/Go_Difference-4                            9.22k ± 0%     9.22k ± 0%      ~     (p=0.074 n=12+15)
    SetOperation/n=4096/Go_SymmetricDifference-4                   19.6k ± 0%     19.6k ± 0%      ~     (p=1.000 n=15+15)
    SetOperation/n=4096/Go_Union-4                                 9.57k ± 0%     9.57k ± 0%      ~     (all equal)
    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%      ~     (p=0.710 n=15+15)
    SetOperation/n=8192/Go_Difference-4                            19.5k ± 0%     19.5k ± 0%      ~     (p=1.000 n=15+15)
    SetOperation/n=8192/Go_SymmetricDifference-4                   36.0k ± 0%     36.0k ± 0%      ~     (p=0.567 n=14+15)
    SetOperation/n=8192/Go_Union-4                                 19.5k ± 0%     19.5k ± 0%      ~     (p=0.525 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.7k ± 0%      ~     (p=0.281 n=15+15)
    SetOperation/n=16384/Go_Difference-4                           35.9k ± 0%     35.9k ± 0%      ~     (p=0.641 n=15+15)
    SetOperation/n=16384/Go_SymmetricDifference-4                  76.9k ± 0%     76.9k ± 0%      ~     (p=0.809 n=15+15)
    SetOperation/n=16384/Go_Union-4                                37.2k ± 0%     37.2k ± 0%      ~     (p=0.670 n=12+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%      ~     (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:amd64
    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%      ~     (p=0.084 n=15+14)
    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)
    
    
    
    opened by peterstace 5
  • Add Tiny Well-Known Binary decoder and encoder.

    Add Tiny Well-Known Binary decoder and encoder.

    Description

    Add Tiny Well-Known Binary decoding and encoding capability with unit tests.

    Check List

    Have you:

    • Added unit tests? Yes

    • Add cmprefimpl tests? No

    • Updated release notes? No

    Related Issue

    Implements https://github.com/peterstace/simplefeatures/issues/54

    opened by DoctorLoki 4
  • Investigate possible bug in validation algorithm

    Investigate possible bug in validation algorithm

    GEOS has emitted the attached WKBs, and simplefeatures as reporting them as invalid. There are two possibilities:

    • GEOS is emitting invalid WKBs
    • Simplefeatures is giving a false positive for detecting invalid geometries.

    The task here is to investigate to see which of the two cases we are looking at. possible_validation_bug.txt

    bug 
    opened by peterstace 4
  • Reverse: choose between libgeos and PostGIS behaviour

    Reverse: choose between libgeos and PostGIS behaviour

    There is some behavioral difference in the Reverse operation between PostGIS and libgeos.

    E.g. for MULTILINESTRING((8 4,6 1,3 9,0 2),(5 3,4 8,1 2,9 8)):

    PostGIS gives: MULTILINESTRING((0 2,3 9,6 1,8 4),(9 8,1 2,4 8,5 3)) Libgeos gives: MULTILINESTRING((9 8,1 2,4 8,5 3),(0 2,3 9,6 1,8 4))

    The current behaviour simplefeatures has implemented is the PostGIS behaviour. We need to decide if we wish to keep this behaviour, or if we wish to switch to libgeos behaviour.

    algorithm improve 
    opened by peterstace 4
  • Add IsCW, IsCCW to Polygon, MultiPolygon, Geometry, GeometryCollection

    Add IsCW, IsCCW to Polygon, MultiPolygon, Geometry, GeometryCollection

    Description

    Adds IsCW and IsCCW methods.

    Note I have defined certain behaviours for empty and inconsistent geometries. In particular, points, empty and zero area rings are defined to be both CW and CCW. That is, these things will return true from the new methods.

    Check List

    Have you:

    • Added unit tests? yes

    • Add cmprefimpl tests? (if appropriate?) no

    • Updated release notes? (if appropriate?) no

    Related Issue

    https://github.com/peterstace/simplefeatures/issues/382

    opened by DoctorLoki 3
  • GEOS: Wrap Make Valid

    GEOS: Wrap Make Valid

    Description

    • Wraps the GEOSMakeValid_r function from GEOS.

    Check List

    Have you:

    • Added unit tests? Yes, just to confirm that the wrapping is working. Doesn't actually do extensive tests of the functionality.

    • Add cmprefimpl tests? (if appropriate?) N/A

    • Updated release notes? (if appropriate?) Yes.

    Related Issue

    • https://github.com/peterstace/simplefeatures/issues/430

    Benchmark Results

    N/A

    opened by peterstace 3
  • Add NaN/Inf Checks

    Add NaN/Inf Checks

    Description

    NaNs and Infs in geometries will cause unexpected issues with arithmetic operations. In most of the algorithms, float64s are treated as idealised real numbers. For the most part, this works ok for float64 values that are not NaN or Inf. It breaks pretty badly for NaN and Inf values though.

    High Level Change Overview

    • Geometries now have all of their coordinates checked for NaN and infinities when they are constructed. Most geometries are constructed from other geometries, so changes were only needed to Point and LineString.
    • Geometries are created based either on coordinates from existing geometries, or calculations based on existing geometries. When these new geometries are constructed, they don't always have their coordinates checked. This is because the NaN/Infinity checks only block user-supplied NaNs and Infinities. Error handling gets out of hand if we recheck NaN and infinities each time (e.g. when accessing the start point of LineString, it's not sensible to check the first coordinate to see if it's valid when constructing that point, since validation would have already occurred when the LineString was constructed). Similar logic holds for calculated geometries, e.g. centroid.
    • Envelopes now have their coordinates checked. From an abstraction perspective, Envelopes are very similar to geometries, so should have similar NaN/Infinity behaviour. As a result, a few envelope methods now return errors.

    Breaking Changes

    • The NewEnvelope function now returns (Envelope, error) rather than error.
    • Envelope's ExtendToIncludeXY method now returns (Envelope, error) rather than error.
    • Envelope's ExpandBy method was removed.
    • The NewLineString function now returns an error if any of the X or Y values in its input sequence are NaN or an Infinity.
    • The NewPoint function now returns (Point, error) rather than Point.
    • XY's AsPoint method now returns (Point, error) rather than Point.
    • The OmitEmpty validation option now has implications when constructing Point and MultiPoint types.

    Check List

    Have you:

    • Added unit tests? Yes.

    • Add cmprefimpl tests? (if appropriate?) N/A

    Related Issue

    • https://github.com/peterstace/simplefeatures/issues/396

    Benchmark Results

    There are a few minor blips, but I think that has more to do with an inappropriate p-value cutoff.

    Click to expand
    COMPARISON
    name                                                        old time/op    new time/op    delta
    pkg:github.com/peterstace/simplefeatures/geom goos:linux goarch:amd64
    LineEnvelope/0-4                                              1.85ns ±50%    2.05ns ±49%    ~     (p=0.170 n=15+15)
    LineEnvelope/1-4                                              1.06ns ± 3%    1.05ns ± 4%    ~     (p=0.667 n=14+14)
    LineEnvelope/2-4                                              1.34ns ± 7%    1.31ns ± 3%    ~     (p=0.074 n=15+13)
    LineEnvelope/3-4                                              1.18ns ± 4%    1.18ns ± 3%    ~     (p=0.838 n=15+14)
    MarshalWKB/polygon/n=10-4                                      192ns ± 8%     194ns ±12%    ~     (p=0.674 n=13+15)
    MarshalWKB/polygon/n=100-4                                     542ns ±19%     561ns ±14%    ~     (p=0.178 n=14+14)
    MarshalWKB/polygon/n=1000-4                                   3.86µs ±37%    4.38µs ±68%    ~     (p=0.603 n=14+14)
    MarshalWKB/polygon/n=10000-4                                  30.6µs ±29%    33.9µs ±51%    ~     (p=0.621 n=15+14)
    UnmarshalWKB/polygon/n=10-4                                    316ns ±23%     313ns ±14%    ~     (p=0.901 n=13+15)
    UnmarshalWKB/polygon/n=100-4                                   683ns ±31%     697ns ±20%    ~     (p=0.478 n=13+12)
    UnmarshalWKB/polygon/n=1000-4                                 3.85µs ±29%    4.71µs ±83%    ~     (p=0.436 n=15+15)
    UnmarshalWKB/polygon/n=10000-4                                40.3µs ±40%    39.1µs ±33%    ~     (p=0.880 n=14+15)
    IntersectsLineStringWithLineString/n=10-4                     1.43µs ± 8%    1.49µs ±21%    ~     (p=0.340 n=12+13)
    IntersectsLineStringWithLineString/n=100-4                    20.7µs ± 7%    21.3µs ± 8%    ~     (p=0.104 n=14+14)
    IntersectsLineStringWithLineString/n=1000-4                    195µs ± 8%     198µs ± 5%    ~     (p=0.201 n=15+14)
    IntersectsLineStringWithLineString/n=10000-4                  2.96ms ±16%    3.03ms ±13%    ~     (p=0.270 n=14+15)
    IntersectsMultiPointWithMultiPoint/n=20-4                      926ns ± 5%     937ns ± 7%    ~     (p=0.661 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=200-4                    10.4µs ± 4%    10.5µs ± 8%    ~     (p=0.659 n=15+13)
    IntersectsMultiPointWithMultiPoint/n=2000-4                    103µs ± 7%     104µs ± 8%    ~     (p=0.813 n=14+15)
    IntersectsMultiPointWithMultiPoint/n=20000-4                  1.18ms ± 9%    1.17ms ±11%    ~     (p=0.545 n=13+13)
    PolygonSingleRingValidation/n=10-4                            2.42µs ±11%    2.38µs ± 6%    ~     (p=0.579 n=14+14)
    PolygonSingleRingValidation/n=100-4                           32.5µs ± 6%    32.7µs ± 6%    ~     (p=0.793 n=14+13)
    PolygonSingleRingValidation/n=1000-4                           386µs ± 7%     392µs ± 9%    ~     (p=0.486 n=15+15)
    PolygonSingleRingValidation/n=10000-4                         4.95ms ±11%    4.97ms ±17%    ~     (p=0.583 n=14+13)
    PolygonMultipleRingsValidation/n=4-4                          6.67µs ± 7%    6.87µs ± 8%  +2.95%  (p=0.027 n=14+15)
    PolygonMultipleRingsValidation/n=36-4                         58.0µs ±12%    57.4µs ± 8%    ~     (p=0.964 n=15+13)
    PolygonMultipleRingsValidation/n=400-4                         727µs ± 9%     744µs ± 5%  +2.43%  (p=0.038 n=13+14)
    PolygonMultipleRingsValidation/n=4096-4                       8.64ms ± 8%    8.54ms ± 6%    ~     (p=0.595 n=15+15)
    PolygonZigZagRingsValidation/n=10-4                           11.2µs ± 9%    11.2µs ±12%    ~     (p=1.000 n=13+13)
    PolygonZigZagRingsValidation/n=100-4                           126µs ± 5%     129µs ± 7%    ~     (p=0.186 n=14+15)
    PolygonZigZagRingsValidation/n=1000-4                         1.41ms ± 6%    1.46ms ±12%    ~     (p=0.233 n=15+15)
    PolygonZigZagRingsValidation/n=10000-4                        18.5ms ± 4%    19.1ms ±11%  +3.38%  (p=0.006 n=13+14)
    PolygonAnnulusValidation/n=10-4                               3.65µs ± 6%    3.81µs ±15%    ~     (p=0.166 n=13+15)
    PolygonAnnulusValidation/n=100-4                              33.3µs ±12%    33.6µs ±14%    ~     (p=0.786 n=15+13)
    PolygonAnnulusValidation/n=1000-4                              551µs ± 8%     533µs ± 5%    ~     (p=0.061 n=14+13)
    PolygonAnnulusValidation/n=10000-4                            6.38ms ± 8%    6.35ms ± 5%    ~     (p=0.914 n=15+14)
    MultipolygonValidation/n=1-4                                   399ns ±16%     391ns ±17%    ~     (p=0.259 n=14+13)
    MultipolygonValidation/n=4-4                                   891ns ± 9%     916ns ±30%    ~     (p=0.277 n=12+15)
    MultipolygonValidation/n=16-4                                 3.55µs ±11%    3.49µs ± 9%    ~     (p=0.427 n=14+14)
    MultipolygonValidation/n=64-4                                 16.3µs ± 9%    16.7µs ±12%    ~     (p=0.302 n=13+14)
    MultipolygonValidation/n=256-4                                 101µs ± 8%     102µs ± 8%    ~     (p=0.400 n=14+15)
    MultipolygonValidation/n=1024-4                                479µs ± 6%     470µs ±10%    ~     (p=0.202 n=15+15)
    MultiPolygonTwoCircles/n=10-4                                 3.58µs ± 8%    3.56µs ±10%    ~     (p=0.586 n=12+14)
    MultiPolygonTwoCircles/n=100-4                                37.7µs ±12%    37.5µs ± 8%    ~     (p=0.920 n=13+13)
    MultiPolygonTwoCircles/n=1000-4                                387µs ±10%     396µs ±10%    ~     (p=0.201 n=14+15)
    MultiPolygonTwoCircles/n=10000-4                              5.60ms ±11%    5.73ms ±16%    ~     (p=0.603 n=14+14)
    MultiPolygonMultipleTouchingPoints/n=1-4                      4.81µs ± 7%    4.80µs ±11%    ~     (p=0.775 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=10-4                     37.6µs ± 9%    41.1µs ±39%    ~     (p=0.062 n=14+14)
    MultiPolygonMultipleTouchingPoints/n=100-4                     438µs ± 4%     443µs ± 8%    ~     (p=0.456 n=12+15)
    MultiPolygonMultipleTouchingPoints/n=1000-4                   5.03ms ± 7%    5.20ms ± 8%  +3.23%  (p=0.020 n=15+14)
    WKTParsing/point-4                                            1.79µs ±22%    1.81µs ±14%    ~     (p=0.503 n=13+13)
    DistancePolygonToPolygonOrdering/n=100_swap=false-4           47.9µs ± 7%    47.0µs ± 4%    ~     (p=0.252 n=14+12)
    DistancePolygonToPolygonOrdering/n=100_swap=true-4            48.9µs ±14%    48.5µs ± 6%    ~     (p=1.000 n=14+13)
    DistancePolygonToPolygonOrdering/n=1000_swap=false-4           742µs ± 3%     766µs ±13%    ~     (p=0.081 n=13+13)
    DistancePolygonToPolygonOrdering/n=1000_swap=true-4            742µs ± 8%     759µs ± 6%    ~     (p=0.081 n=15+15)
    IntersectionPolygonWithPolygonOrdering/n=100_swap=false-4     5.78µs ±22%    5.52µs ±16%    ~     (p=0.169 n=13+14)
    IntersectionPolygonWithPolygonOrdering/n=100_swap=true-4      5.42µs ± 7%    5.43µs ± 9%    ~     (p=0.928 n=15+13)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=false-4    59.1µs ± 8%    58.9µs ±12%    ~     (p=0.591 n=14+15)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     58.6µs ±14%    60.3µs ±11%  +2.89%  (p=0.039 n=14+14)
    MultiLineStringIsSimpleManyLineStrings/n=100-4                52.6µs ±12%    57.8µs ±32%    ~     (p=0.088 n=13+15)
    MultiLineStringIsSimpleManyLineStrings/n=1000-4                563µs ±16%     565µs ±17%    ~     (p=1.000 n=15+15)
    pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
    IntersectionWithoutValidation/n=10-4                          39.1µs ± 6%    37.9µs ± 5%  -3.11%  (p=0.033 n=14+15)
    IntersectionWithoutValidation/n=100-4                         74.7µs ± 5%    73.4µs ± 7%    ~     (p=0.077 n=14+14)
    IntersectionWithoutValidation/n=1000-4                         334µs ± 9%     339µs ±11%    ~     (p=0.210 n=14+14)
    IntersectionWithoutValidation/n=10000-4                       3.01ms ±15%    3.04ms ± 7%    ~     (p=0.496 n=13+15)
    NoOp/n=10-4                                                   4.00µs ± 6%    3.93µs ± 3%    ~     (p=0.356 n=15+13)
    NoOp/n=100-4                                                  11.9µs ±11%    12.3µs ±20%    ~     (p=0.539 n=15+15)
    NoOp/n=1000-4                                                 83.9µs ± 7%    81.0µs ± 4%  -3.48%  (p=0.012 n=14+13)
    NoOp/n=10000-4                                                 958µs ±12%     962µs ± 9%    ~     (p=0.715 n=15+14)
    pkg:github.com/peterstace/simplefeatures/internal/perf goos:linux goarch:amd64
    LineStringIsSimpleCircle/n=10-4                               2.17µs ±14%    2.03µs ± 5%  -6.36%  (p=0.008 n=15+12)
    LineStringIsSimpleCircle/n=100-4                              30.9µs ±11%    30.4µs ±15%    ~     (p=0.400 n=14+15)
    LineStringIsSimpleCircle/n=1000-4                              371µs ± 5%     380µs ±10%    ~     (p=0.295 n=12+13)
    LineStringIsSimpleCircle/n=10000-4                            4.79ms ±12%    4.98ms ±18%    ~     (p=0.400 n=14+15)
    LineStringIsSimpleZigZag/10-4                                 1.90µs ±11%    1.86µs ± 7%    ~     (p=0.447 n=15+13)
    LineStringIsSimpleZigZag/100-4                                31.2µs ±15%    30.4µs ± 6%    ~     (p=0.618 n=13+15)
    LineStringIsSimpleZigZag/1000-4                                355µs ± 5%     363µs ± 5%  +2.08%  (p=0.020 n=14+15)
    LineStringIsSimpleZigZag/10000-4                              4.82ms ± 3%    4.96ms ± 8%    ~     (p=0.070 n=15+14)
    SetOperation/n=4/Go_Intersection-4                            42.7µs ±10%    43.9µs ±10%    ~     (p=0.137 n=14+14)
    SetOperation/n=4/Go_Difference-4                              42.9µs ± 4%    43.2µs ± 9%    ~     (p=0.830 n=14+13)
    SetOperation/n=4/Go_SymmetricDifference-4                     55.8µs ± 5%    56.3µs ± 7%    ~     (p=0.591 n=15+14)
    SetOperation/n=4/Go_Union-4                                   44.7µs ± 3%    46.3µs ±14%    ~     (p=0.100 n=13+15)
    SetOperation/n=4/GEOS_Intersection-4                          34.3µs ± 6%    34.2µs ± 1%    ~     (p=0.723 n=15+10)
    SetOperation/n=4/GEOS_Difference-4                            35.6µs ± 6%    35.3µs ± 6%    ~     (p=0.591 n=15+14)
    SetOperation/n=4/GEOS_SymmetricDifference-4                   49.7µs ± 7%    52.3µs ±10%  +5.14%  (p=0.003 n=14+15)
    SetOperation/n=4/GEOS_Union-4                                 35.3µs ± 7%    35.6µs ± 4%    ~     (p=0.072 n=13+13)
    SetOperation/n=8/Go_Intersection-4                            52.9µs ± 3%    55.2µs ±16%    ~     (p=0.118 n=12+14)
    SetOperation/n=8/Go_Difference-4                              54.5µs ±10%    56.3µs ±24%    ~     (p=0.362 n=13+13)
    SetOperation/n=8/Go_SymmetricDifference-4                     73.5µs ±18%    71.6µs ± 7%    ~     (p=0.683 n=15+13)
    SetOperation/n=8/Go_Union-4                                   56.9µs ± 9%    57.5µs ± 7%    ~     (p=0.461 n=15+15)
    SetOperation/n=8/GEOS_Intersection-4                          42.9µs ± 6%    43.8µs ± 7%    ~     (p=0.142 n=13+15)
    SetOperation/n=8/GEOS_Difference-4                            42.6µs ± 4%    43.0µs ± 4%    ~     (p=0.254 n=13+15)
    SetOperation/n=8/GEOS_SymmetricDifference-4                   59.9µs ± 7%    60.1µs ± 7%    ~     (p=0.747 n=15+14)
    SetOperation/n=8/GEOS_Union-4                                 40.6µs ± 3%    41.5µs ± 5%  +2.23%  (p=0.037 n=12+15)
    SetOperation/n=16/Go_Intersection-4                           76.7µs ±14%    75.3µs ± 4%    ~     (p=0.905 n=14+13)
    SetOperation/n=16/Go_Difference-4                             80.5µs ± 7%    80.8µs ±16%    ~     (p=0.470 n=14+15)
    SetOperation/n=16/Go_SymmetricDifference-4                     108µs ± 4%     110µs ±11%    ~     (p=0.980 n=12+14)
    SetOperation/n=16/Go_Union-4                                  84.0µs ± 7%    84.8µs ± 7%    ~     (p=0.377 n=14+15)
    SetOperation/n=16/GEOS_Intersection-4                         47.9µs ± 6%    47.5µs ± 5%    ~     (p=0.539 n=15+15)
    SetOperation/n=16/GEOS_Difference-4                           50.8µs ± 8%    49.4µs ± 4%    ~     (p=0.051 n=15+14)
    SetOperation/n=16/GEOS_SymmetricDifference-4                  76.8µs ± 4%    79.8µs ± 7%  +3.84%  (p=0.044 n=14+14)
    SetOperation/n=16/GEOS_Union-4                                51.1µs ± 9%    51.3µs ± 8%    ~     (p=0.667 n=14+14)
    SetOperation/n=32/Go_Intersection-4                            129µs ± 6%     130µs ± 6%    ~     (p=0.618 n=13+15)
    SetOperation/n=32/Go_Difference-4                              136µs ± 6%     135µs ± 8%    ~     (p=0.561 n=14+15)
    SetOperation/n=32/Go_SymmetricDifference-4                     183µs ± 6%     180µs ± 8%    ~     (p=0.451 n=14+15)
    SetOperation/n=32/Go_Union-4                                   141µs ± 7%     140µs ± 6%    ~     (p=0.685 n=13+14)
    SetOperation/n=32/GEOS_Intersection-4                         59.4µs ± 7%    58.5µs ± 4%    ~     (p=0.390 n=13+13)
    SetOperation/n=32/GEOS_Difference-4                           63.3µs ± 9%    61.1µs ± 4%  -3.49%  (p=0.019 n=15+13)
    SetOperation/n=32/GEOS_SymmetricDifference-4                   111µs ±11%     109µs ± 6%    ~     (p=0.607 n=14+13)
    SetOperation/n=32/GEOS_Union-4                                62.6µs ± 5%    62.5µs ± 4%    ~     (p=0.983 n=15+14)
    SetOperation/n=64/Go_Intersection-4                            222µs ±12%     216µs ± 9%    ~     (p=0.354 n=14+15)
    SetOperation/n=64/Go_Difference-4                              233µs ± 8%     230µs ± 6%    ~     (p=0.482 n=14+14)
    SetOperation/n=64/Go_SymmetricDifference-4                     316µs ± 7%     316µs ± 9%    ~     (p=0.964 n=15+13)
    SetOperation/n=64/Go_Union-4                                   248µs ± 7%     243µs ±10%    ~     (p=0.231 n=14+12)
    SetOperation/n=64/GEOS_Intersection-4                         78.7µs ± 4%    79.7µs ± 4%    ~     (p=0.294 n=15+13)
    SetOperation/n=64/GEOS_Difference-4                           95.4µs ± 7%    96.8µs ± 6%    ~     (p=0.178 n=14+14)
    SetOperation/n=64/GEOS_SymmetricDifference-4                   183µs ± 7%     186µs ± 7%    ~     (p=0.302 n=13+14)
    SetOperation/n=64/GEOS_Union-4                                 102µs ±12%     104µs ± 8%    ~     (p=0.063 n=14+15)
    SetOperation/n=128/Go_Intersection-4                           400µs ± 5%     414µs ±11%    ~     (p=0.146 n=14+15)
    SetOperation/n=128/Go_Difference-4                             425µs ± 7%     444µs ±13%  +4.36%  (p=0.045 n=15+15)
    SetOperation/n=128/Go_SymmetricDifference-4                    561µs ± 7%     563µs ± 5%    ~     (p=0.525 n=13+15)
    SetOperation/n=128/Go_Union-4                                  447µs ±12%     449µs ±11%    ~     (p=0.511 n=14+14)
    SetOperation/n=128/GEOS_Intersection-4                         131µs ±13%     132µs ± 9%    ~     (p=0.652 n=14+15)
    SetOperation/n=128/GEOS_Difference-4                           149µs ±11%     152µs ±10%    ~     (p=0.105 n=13+14)
    SetOperation/n=128/GEOS_SymmetricDifference-4                  299µs ± 6%     315µs ±20%    ~     (p=0.123 n=15+14)
    SetOperation/n=128/GEOS_Union-4                                156µs ± 6%     158µs ±10%    ~     (p=0.856 n=13+15)
    SetOperation/n=256/Go_Intersection-4                           731µs ± 7%     736µs ± 9%    ~     (p=0.683 n=15+14)
    SetOperation/n=256/Go_Difference-4                             787µs ± 6%     792µs ± 8%    ~     (p=0.839 n=14+14)
    SetOperation/n=256/Go_SymmetricDifference-4                   1.10ms ± 8%    1.12ms ±12%    ~     (p=0.217 n=12+15)
    SetOperation/n=256/Go_Union-4                                  818µs ± 6%     826µs ±12%    ~     (p=0.943 n=15+12)
    SetOperation/n=256/GEOS_Intersection-4                         205µs ±12%     199µs ± 5%    ~     (p=0.914 n=15+14)
    SetOperation/n=256/GEOS_Difference-4                           260µs ± 7%     259µs ± 6%    ~     (p=0.650 n=13+14)
    SetOperation/n=256/GEOS_SymmetricDifference-4                  556µs ± 5%     547µs ± 9%    ~     (p=0.110 n=12+13)
    SetOperation/n=256/GEOS_Union-4                                276µs ± 6%     277µs ± 4%    ~     (p=0.821 n=15+13)
    SetOperation/n=512/Go_Intersection-4                          1.53ms ±16%    1.47ms ±10%    ~     (p=0.201 n=14+15)
    SetOperation/n=512/Go_Difference-4                            1.60ms ±11%    1.55ms ±15%  -3.33%  (p=0.037 n=15+14)
    SetOperation/n=512/Go_SymmetricDifference-4                   2.15ms ± 6%    2.13ms ± 7%    ~     (p=0.496 n=13+15)
    SetOperation/n=512/Go_Union-4                                 1.61ms ± 7%    1.65ms ±18%    ~     (p=0.874 n=14+14)
    SetOperation/n=512/GEOS_Intersection-4                         358µs ± 6%     357µs ± 5%    ~     (p=0.983 n=14+15)
    SetOperation/n=512/GEOS_Difference-4                           437µs ±11%     428µs ± 5%    ~     (p=0.983 n=14+15)
    SetOperation/n=512/GEOS_SymmetricDifference-4                 1.06ms ±14%    1.05ms ±15%    ~     (p=0.847 n=15+14)
    SetOperation/n=512/GEOS_Union-4                                479µs ± 7%     470µs ± 4%    ~     (p=0.235 n=15+13)
    SetOperation/n=1024/Go_Intersection-4                         2.89ms ±10%    2.85ms ±10%    ~     (p=0.400 n=14+15)
    SetOperation/n=1024/Go_Difference-4                           3.13ms ±11%    3.08ms ± 8%    ~     (p=0.595 n=14+12)
    SetOperation/n=1024/Go_SymmetricDifference-4                  4.27ms ± 5%    4.34ms ± 5%    ~     (p=0.085 n=13+14)
    SetOperation/n=1024/Go_Union-4                                3.25ms ± 9%    3.17ms ± 7%    ~     (p=0.137 n=14+14)
    SetOperation/n=1024/GEOS_Intersection-4                        655µs ± 8%     659µs ± 9%    ~     (p=0.715 n=14+15)
    SetOperation/n=1024/GEOS_Difference-4                          885µs ± 3%     876µs ± 5%    ~     (p=0.294 n=13+15)
    SetOperation/n=1024/GEOS_SymmetricDifference-4                2.16ms ± 7%    2.19ms ±18%    ~     (p=0.747 n=14+15)
    SetOperation/n=1024/GEOS_Union-4                              1.01ms ± 8%    1.05ms ±12%    ~     (p=0.077 n=14+14)
    SetOperation/n=2048/Go_Intersection-4                         5.95ms ±12%    6.11ms ± 8%    ~     (p=0.126 n=15+15)
    SetOperation/n=2048/Go_Difference-4                           6.55ms ±14%    6.52ms ± 9%    ~     (p=0.902 n=15+15)
    SetOperation/n=2048/Go_SymmetricDifference-4                  9.01ms ±13%    8.99ms ±10%    ~     (p=0.781 n=12+14)
    SetOperation/n=2048/Go_Union-4                                7.22ms ±14%    7.03ms ±19%    ~     (p=0.164 n=14+14)
    SetOperation/n=2048/GEOS_Intersection-4                       1.36ms ± 6%    1.37ms ± 7%    ~     (p=0.402 n=14+13)
    SetOperation/n=2048/GEOS_Difference-4                         1.68ms ± 3%    1.69ms ± 8%    ~     (p=0.516 n=12+15)
    SetOperation/n=2048/GEOS_SymmetricDifference-4                4.15ms ±14%    4.14ms ±12%    ~     (p=0.847 n=15+14)
    SetOperation/n=2048/GEOS_Union-4                              1.91ms ±10%    1.96ms ±10%    ~     (p=0.158 n=14+15)
    SetOperation/n=4096/Go_Intersection-4                         12.8ms ±12%    12.8ms ±16%    ~     (p=0.839 n=14+14)
    SetOperation/n=4096/Go_Difference-4                           13.4ms ± 7%    13.7ms ±12%    ~     (p=0.367 n=15+15)
    SetOperation/n=4096/Go_SymmetricDifference-4                  18.9ms ± 9%    18.3ms ±10%    ~     (p=0.217 n=14+15)
    SetOperation/n=4096/Go_Union-4                                15.0ms ±18%    14.0ms ± 6%  -6.60%  (p=0.041 n=15+13)
    SetOperation/n=4096/GEOS_Intersection-4                       2.49ms ± 3%    2.55ms ±12%    ~     (p=0.185 n=13+14)
    SetOperation/n=4096/GEOS_Difference-4                         3.60ms ± 8%    3.57ms ±14%    ~     (p=0.539 n=15+15)
    SetOperation/n=4096/GEOS_SymmetricDifference-4                9.02ms ±15%    8.99ms ± 7%    ~     (p=0.902 n=15+15)
    SetOperation/n=4096/GEOS_Union-4                              4.11ms ±11%    4.05ms ± 8%    ~     (p=0.440 n=13+15)
    SetOperation/n=8192/Go_Intersection-4                         25.8ms ± 8%    25.4ms ± 4%    ~     (p=0.374 n=14+12)
    SetOperation/n=8192/Go_Difference-4                           27.4ms ±14%    26.7ms ± 4%    ~     (p=0.259 n=14+13)
    SetOperation/n=8192/Go_SymmetricDifference-4                  42.5ms ±90%    36.6ms ±11%    ~     (p=0.098 n=13+12)
    SetOperation/n=8192/Go_Union-4                                28.8ms ±13%    27.9ms ± 7%    ~     (p=0.141 n=13+14)
    SetOperation/n=8192/GEOS_Intersection-4                       5.48ms ± 8%    5.44ms ± 6%    ~     (p=0.867 n=12+15)
    SetOperation/n=8192/GEOS_Difference-4                         7.14ms ±10%    6.97ms ± 4%    ~     (p=0.155 n=13+14)
    SetOperation/n=8192/GEOS_SymmetricDifference-4                17.6ms ± 7%    17.4ms ± 9%    ~     (p=0.519 n=14+13)
    SetOperation/n=8192/GEOS_Union-4                              8.05ms ± 8%    8.37ms ±16%  +3.98%  (p=0.041 n=15+13)
    SetOperation/n=16384/Go_Intersection-4                        52.7ms ± 6%    54.3ms ±10%    ~     (p=0.254 n=13+15)
    SetOperation/n=16384/Go_Difference-4                          57.9ms ±12%    60.7ms ±24%    ~     (p=0.401 n=14+14)
    SetOperation/n=16384/Go_SymmetricDifference-4                 77.5ms ±13%    76.7ms ± 7%    ~     (p=0.685 n=13+14)
    SetOperation/n=16384/Go_Union-4                               62.2ms ±20%    60.4ms ±11%    ~     (p=0.430 n=13+14)
    SetOperation/n=16384/GEOS_Intersection-4                      11.3ms ±16%    10.8ms ± 7%    ~     (p=0.239 n=14+13)
    SetOperation/n=16384/GEOS_Difference-4                        15.6ms ±11%    15.2ms ±13%    ~     (p=0.425 n=15+14)
    SetOperation/n=16384/GEOS_SymmetricDifference-4               34.4ms ± 5%    34.6ms ± 6%    ~     (p=0.545 n=13+13)
    SetOperation/n=16384/GEOS_Union-4                             17.7ms ± 8%    17.4ms ± 8%    ~     (p=0.494 n=14+12)
    pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
    Delete/n=100-4                                                19.2µs ± 7%    19.1µs ± 6%    ~     (p=0.574 n=12+13)
    Delete/n=1000-4                                                651µs ± 4%     659µs ± 4%    ~     (p=0.146 n=14+15)
    Delete/n=10000-4                                              30.9ms ± 4%    31.7ms ± 8%    ~     (p=0.158 n=15+14)
    Bulk/n=10-4                                                    887ns ±28%    1052ns ±70%    ~     (p=0.259 n=13+14)
    Bulk/n=100-4                                                  14.1µs ±23%    13.2µs ± 9%    ~     (p=0.263 n=15+15)
    Bulk/n=1000-4                                                  220µs ±10%     216µs ± 7%    ~     (p=0.427 n=14+14)
    Bulk/n=10000-4                                                2.95ms ± 3%    3.01ms ± 6%    ~     (p=0.225 n=12+13)
    Bulk/n=100000-4                                               34.7ms ± 4%    34.9ms ± 4%    ~     (p=0.511 n=14+14)
    Insert/n=10-4                                                 1.21µs ±16%    1.18µs ±18%    ~     (p=0.141 n=13+14)
    Insert/n=100-4                                                20.0µs ±10%    19.8µs ± 7%    ~     (p=0.503 n=12+13)
    Insert/n=1000-4                                                438µs ± 8%     437µs ± 4%    ~     (p=0.920 n=13+13)
    Insert/n=10000-4                                              5.44ms ±10%    5.34ms ± 9%    ~     (p=0.496 n=15+13)
    Insert/n=100000-4                                             61.4ms ± 7%    60.7ms ± 5%    ~     (p=0.533 n=15+14)
    RangeSearch/n=10-4                                            15.2ns ± 4%    14.9ns ± 2%  -2.16%  (p=0.019 n=14+14)
    RangeSearch/n=100-4                                           59.2ns ± 4%    59.2ns ± 2%    ~     (p=0.933 n=13+14)
    RangeSearch/n=1000-4                                           221ns ± 4%     221ns ± 4%    ~     (p=0.815 n=15+15)
    RangeSearch/n=10000-4                                          776ns ± 8%     769ns ± 4%    ~     (p=0.847 n=15+14)
    RangeSearch/n=100000-4                                        7.47µs ± 8%    7.49µs ± 5%    ~     (p=0.652 n=14+15)
    
    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%    ~     (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%    ~     (p=0.897 n=15+15)
    IntersectsLineStringWithLineString/n=10000-4                  2.63MB ± 0%    2.63MB ± 0%    ~     (p=0.097 n=14+15)
    IntersectsMultiPointWithMultiPoint/n=20-4                       324B ± 0%      324B ± 0%    ~     (all equal)
    IntersectsMultiPointWithMultiPoint/n=200-4                    3.06kB ± 0%    3.07kB ± 0%    ~     (p=0.272 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=2000-4                   49.3kB ± 0%    49.3kB ± 0%    ~     (p=0.378 n=15+15)
    IntersectsMultiPointWithMultiPoint/n=20000-4                   339kB ± 0%     339kB ± 0%    ~     (p=0.519 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.623 n=14+14)
    PolygonSingleRingValidation/n=10000-4                         1.97MB ± 0%    1.97MB ± 0%    ~     (p=1.000 n=15+14)
    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%    ~     (p=0.396 n=13+15)
    PolygonMultipleRingsValidation/n=4096-4                       6.28MB ± 0%    6.28MB ± 0%    ~     (p=0.621 n=13+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%    ~     (p=0.756 n=15+15)
    PolygonZigZagRingsValidation/n=10000-4                        7.24MB ± 0%    7.24MB ± 0%    ~     (p=0.926 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.208 n=15+15)
    PolygonAnnulusValidation/n=10000-4                            3.89MB ± 0%    3.89MB ± 0%    ~     (p=0.557 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%    ~     (p=0.375 n=15+15)
    MultiPolygonTwoCircles/n=10000-4                              4.60MB ± 0%    4.60MB ± 0%    ~     (p=0.359 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%    ~     (p=0.542 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=100-4                     182kB ± 0%     182kB ± 0%    ~     (p=0.372 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=1000-4                   2.10MB ± 0%    2.10MB ± 0%    ~     (p=0.512 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.138 n=14+14)
    DistancePolygonToPolygonOrdering/n=1000_swap=true-4            369kB ± 0%     369kB ± 0%  +0.00%  (p=0.024 n=15+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.159 n=15+13)
    IntersectionPolygonWithPolygonOrdering/n=1000_swap=true-4     60.1kB ± 0%    60.1kB ± 0%    ~     (p=0.768 n=15+15)
    MultiLineStringIsSimpleManyLineStrings/n=100-4                59.2kB ± 0%    59.2kB ± 0%    ~     (all equal)
    MultiLineStringIsSimpleManyLineStrings/n=1000-4                491kB ± 0%     491kB ± 0%    ~     (p=0.117 n=15+15)
    pkg:github.com/peterstace/simplefeatures/geos goos:linux goarch:amd64
    IntersectionWithoutValidation/n=10-4                          1.32kB ± 0%    1.32kB ± 0%    ~     (all equal)
    IntersectionWithoutValidation/n=100-4                         6.46kB ± 0%    6.46kB ± 0%  -0.01%  (p=0.026 n=15+13)
    IntersectionWithoutValidation/n=1000-4                        55.1kB ± 0%    55.1kB ± 0%    ~     (p=1.077 n=12+14)
    IntersectionWithoutValidation/n=10000-4                        558kB ± 0%     558kB ± 0%    ~     (p=0.799 n=14+13)
    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.807 n=15+14)
    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.115 n=14+15)
    LineStringIsSimpleCircle/n=10000-4                            1.97MB ± 0%    1.97MB ± 0%    ~     (p=0.106 n=13+13)
    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.930 n=14+13)
    SetOperation/n=4/Go_Intersection-4                            20.4kB ± 0%    20.4kB ± 0%    ~     (p=0.545 n=15+15)
    SetOperation/n=4/Go_Difference-4                              21.4kB ± 0%    21.4kB ± 0%    ~     (p=0.270 n=15+15)
    SetOperation/n=4/Go_SymmetricDifference-4                     29.5kB ± 0%    29.5kB ± 0%    ~     (p=0.754 n=14+15)
    SetOperation/n=4/Go_Union-4                                   22.1kB ± 0%    22.1kB ± 0%    ~     (p=1.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.8kB ± 0%    10.8kB ± 0%    ~     (all equal)
    SetOperation/n=4/GEOS_Union-4                                 3.21kB ± 0%    3.21kB ± 0%    ~     (all equal)
    SetOperation/n=8/Go_Intersection-4                            27.1kB ± 0%    27.1kB ± 0%    ~     (p=0.545 n=15+15)
    SetOperation/n=8/Go_Difference-4                              27.3kB ± 0%    27.3kB ± 0%  +0.02%  (p=0.012 n=15+15)
    SetOperation/n=8/Go_SymmetricDifference-4                     37.3kB ± 0%    37.3kB ± 0%  -0.01%  (p=0.035 n=15+15)
    SetOperation/n=8/Go_Union-4                                   27.4kB ± 0%    27.4kB ± 0%    ~     (p=0.587 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.3kB ± 0%    13.3kB ± 0%    ~     (all equal)
    SetOperation/n=8/GEOS_Union-4                                 3.62kB ± 0%    3.62kB ± 0%    ~     (all equal)
    SetOperation/n=16/Go_Intersection-4                           37.4kB ± 0%    37.4kB ± 0%    ~     (p=0.252 n=15+15)
    SetOperation/n=16/Go_Difference-4                             40.5kB ± 0%    40.5kB ± 0%    ~     (p=0.992 n=15+15)
    SetOperation/n=16/Go_SymmetricDifference-4                    59.6kB ± 0%    59.6kB ± 0%    ~     (p=0.751 n=15+15)
    SetOperation/n=16/Go_Union-4                                  42.0kB ± 0%    42.0kB ± 0%    ~     (p=0.771 n=15+14)
    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                  25.3kB ± 0%    25.3kB ± 0%    ~     (all equal)
    SetOperation/n=16/GEOS_Union-4                                8.28kB ± 0%    8.28kB ± 0%    ~     (all equal)
    SetOperation/n=32/Go_Intersection-4                           67.9kB ± 0%    67.9kB ± 0%    ~     (p=0.625 n=14+14)
    SetOperation/n=32/Go_Difference-4                             70.5kB ± 0%    70.5kB ± 0%    ~     (p=0.798 n=15+15)
    SetOperation/n=32/Go_SymmetricDifference-4                     101kB ± 0%     101kB ± 0%    ~     (p=0.878 n=15+15)
    SetOperation/n=32/Go_Union-4                                  71.0kB ± 0%    71.0kB ± 0%    ~     (p=0.616 n=15+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                  39.9kB ± 0%    39.9kB ± 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%    ~     (p=0.751 n=15+15)
    SetOperation/n=64/Go_Difference-4                              125kB ± 0%     125kB ± 0%    ~     (p=0.492 n=15+15)
    SetOperation/n=64/Go_SymmetricDifference-4                     191kB ± 0%     191kB ± 0%    ~     (p=0.894 n=15+15)
    SetOperation/n=64/Go_Union-4                                   129kB ± 0%     129kB ± 0%  +0.01%  (p=0.015 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.5kB ± 0%    87.5kB ± 0%    ~     (all equal)
    SetOperation/n=64/GEOS_Union-4                                28.0kB ± 0%    28.0kB ± 0%    ~     (all equal)
    SetOperation/n=128/Go_Intersection-4                           230kB ± 0%     230kB ± 0%    ~     (p=0.290 n=14+14)
    SetOperation/n=128/Go_Difference-4                             242kB ± 0%     242kB ± 0%    ~     (p=0.547 n=13+15)
    SetOperation/n=128/Go_SymmetricDifference-4                    353kB ± 0%     353kB ± 0%    ~     (p=0.645 n=15+15)
    SetOperation/n=128/Go_Union-4                                  244kB ± 0%     244kB ± 0%    ~     (p=0.383 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.329 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%    ~     (p=0.383 n=15+15)
    SetOperation/n=256/Go_Difference-4                             466kB ± 0%     466kB ± 0%    ~     (p=0.069 n=15+15)
    SetOperation/n=256/Go_SymmetricDifference-4                    722kB ± 0%     722kB ± 0%  -0.00%  (p=0.011 n=15+12)
    SetOperation/n=256/Go_Union-4                                  477kB ± 0%     477kB ± 0%  -0.00%  (p=0.038 n=15+14)
    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.795 n=15+15)
    SetOperation/n=256/GEOS_Union-4                                106kB ± 0%     106kB ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=512/Go_Intersection-4                           858kB ± 0%     858kB ± 0%    ~     (p=0.448 n=12+15)
    SetOperation/n=512/Go_Difference-4                             905kB ± 0%     905kB ± 0%    ~     (p=0.588 n=15+15)
    SetOperation/n=512/Go_SymmetricDifference-4                   1.33MB ± 0%    1.33MB ± 0%    ~     (p=0.690 n=15+15)
    SetOperation/n=512/Go_Union-4                                  926kB ± 0%     926kB ± 0%    ~     (p=0.631 n=15+15)
    SetOperation/n=512/GEOS_Intersection-4                         115kB ± 0%     115kB ± 0%    ~     (p=0.752 n=15+15)
    SetOperation/n=512/GEOS_Difference-4                           159kB ± 0%     159kB ± 0%  +0.00%  (p=0.011 n=13+15)
    SetOperation/n=512/GEOS_SymmetricDifference-4                  577kB ± 0%     577kB ± 0%    ~     (p=0.501 n=15+15)
    SetOperation/n=512/GEOS_Union-4                                171kB ± 0%     171kB ± 0%    ~     (p=0.251 n=15+15)
    SetOperation/n=1024/Go_Intersection-4                         1.58MB ± 0%    1.58MB ± 0%    ~     (p=0.574 n=15+15)
    SetOperation/n=1024/Go_Difference-4                           1.77MB ± 0%    1.77MB ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=1024/Go_SymmetricDifference-4                  2.80MB ± 0%    2.80MB ± 0%    ~     (p=0.175 n=14+15)
    SetOperation/n=1024/Go_Union-4                                1.83MB ± 0%    1.83MB ± 0%    ~     (p=0.406 n=14+15)
    SetOperation/n=1024/GEOS_Intersection-4                        189kB ± 0%     189kB ± 0%    ~     (p=0.333 n=15+15)
    SetOperation/n=1024/GEOS_Difference-4                          369kB ± 0%     369kB ± 0%    ~     (p=0.616 n=15+14)
    SetOperation/n=1024/GEOS_SymmetricDifference-4                1.38MB ± 0%    1.38MB ± 0%    ~     (p=0.845 n=15+15)
    SetOperation/n=1024/GEOS_Union-4                               415kB ± 0%     415kB ± 0%    ~     (p=0.603 n=15+13)
    SetOperation/n=2048/Go_Intersection-4                         3.64MB ± 0%    3.64MB ± 0%    ~     (p=0.821 n=14+15)
    SetOperation/n=2048/Go_Difference-4                           3.87MB ± 0%    3.87MB ± 0%    ~     (p=0.603 n=15+15)
    SetOperation/n=2048/Go_SymmetricDifference-4                  5.63MB ± 0%    5.63MB ± 0%    ~     (p=0.821 n=14+15)
    SetOperation/n=2048/Go_Union-4                                3.95MB ± 0%    3.95MB ± 0%    ~     (p=0.134 n=15+15)
    SetOperation/n=2048/GEOS_Intersection-4                        460kB ± 0%     460kB ± 0%  -0.00%  (p=0.024 n=14+12)
    SetOperation/n=2048/GEOS_Difference-4                          648kB ± 0%     648kB ± 0%    ~     (p=0.215 n=11+14)
    SetOperation/n=2048/GEOS_SymmetricDifference-4                2.32MB ± 0%    2.32MB ± 0%    ~     (p=0.075 n=15+15)
    SetOperation/n=2048/GEOS_Union-4                               689kB ± 0%     689kB ± 0%    ~     (p=0.091 n=15+15)
    SetOperation/n=4096/Go_Intersection-4                         6.82MB ± 0%    6.82MB ± 0%    ~     (p=0.496 n=13+14)
    SetOperation/n=4096/Go_Difference-4                           7.54MB ± 0%    7.54MB ± 0%    ~     (p=0.588 n=15+15)
    SetOperation/n=4096/Go_SymmetricDifference-4                  11.6MB ± 0%    11.6MB ± 0%    ~     (p=0.271 n=15+15)
    SetOperation/n=4096/Go_Union-4                                7.79MB ± 0%    7.79MB ± 0%    ~     (p=0.767 n=15+15)
    SetOperation/n=4096/GEOS_Intersection-4                        755kB ± 0%     755kB ± 0%    ~     (p=0.751 n=15+15)
    SetOperation/n=4096/GEOS_Difference-4                         1.45MB ± 0%    1.45MB ± 0%    ~     (p=0.884 n=10+15)
    SetOperation/n=4096/GEOS_SymmetricDifference-4                5.34MB ± 0%    5.34MB ± 0%    ~     (p=0.943 n=15+15)
    SetOperation/n=4096/GEOS_Union-4                              1.63MB ± 0%    1.63MB ± 0%    ~     (p=0.257 n=14+15)
    SetOperation/n=8192/Go_Intersection-4                         14.9MB ± 0%    14.9MB ± 0%    ~     (p=0.512 n=14+15)
    SetOperation/n=8192/Go_Difference-4                           15.8MB ± 0%    15.8MB ± 0%    ~     (p=0.370 n=14+15)
    SetOperation/n=8192/Go_SymmetricDifference-4                  22.7MB ± 0%    22.7MB ± 0%    ~     (p=0.205 n=15+15)
    SetOperation/n=8192/Go_Union-4                                16.1MB ± 0%    16.1MB ± 0%    ~     (p=0.811 n=13+15)
    SetOperation/n=8192/GEOS_Intersection-4                       1.76MB ± 0%    1.76MB ± 0%    ~     (p=0.470 n=15+15)
    SetOperation/n=8192/GEOS_Difference-4                         2.47MB ± 0%    2.47MB ± 0%    ~     (p=0.328 n=15+14)
    SetOperation/n=8192/GEOS_SymmetricDifference-4                9.01MB ± 0%    9.01MB ± 0%    ~     (p=0.468 n=14+15)
    SetOperation/n=8192/GEOS_Union-4                              2.66MB ± 0%    2.66MB ± 0%    ~     (p=0.344 n=14+15)
    SetOperation/n=16384/Go_Intersection-4                        27.9MB ± 0%    27.9MB ± 0%    ~     (p=0.735 n=15+15)
    SetOperation/n=16384/Go_Difference-4                          31.0MB ± 0%    31.0MB ± 0%    ~     (p=0.992 n=15+15)
    SetOperation/n=16384/Go_SymmetricDifference-4                 47.3MB ± 0%    47.3MB ± 0%    ~     (p=0.878 n=15+15)
    SetOperation/n=16384/Go_Union-4                               32.0MB ± 0%    32.0MB ± 0%    ~     (p=0.142 n=15+14)
    SetOperation/n=16384/GEOS_Intersection-4                      2.92MB ± 0%    2.92MB ± 0%  -0.00%  (p=0.029 n=14+12)
    SetOperation/n=16384/GEOS_Difference-4                        5.68MB ± 0%    5.68MB ± 0%    ~     (p=0.215 n=15+14)
    SetOperation/n=16384/GEOS_SymmetricDifference-4               21.1MB ± 0%    21.1MB ± 0%    ~     (p=0.235 n=14+15)
    SetOperation/n=16384/GEOS_Union-4                             6.45MB ± 0%    6.45MB ± 0%    ~     (p=0.121 n=15+15)
    pkg:github.com/peterstace/simplefeatures/rtree goos:linux goarch:amd64
    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%    ~     (p=0.700 n=15+15)
    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=0.521 n=15+15)
    Bulk/n=10000-4                                                1.57MB ± 0%    1.57MB ± 0%    ~     (p=0.790 n=14+14)
    Bulk/n=100000-4                                               20.4MB ± 0%    20.4MB ± 0%    ~     (p=0.431 n=15+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%    ~     (p=0.740 n=14+14)
    Insert/n=10000-4                                              1.34MB ± 0%    1.34MB ± 0%    ~     (p=0.440 n=14+15)
    Insert/n=100000-4                                             13.5MB ± 0%    13.5MB ± 0%    ~     (p=0.311 n=12+15)
    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                        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%    ~     (p=1.000 n=15+15)
    MultiPolygonMultipleTouchingPoints/n=1000-4                    26.7k ± 0%     26.7k ± 0%    ~     (p=0.938 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)
    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                               276 ± 0%       276 ± 0%    ~     (all equal)
    SetOperation/n=4/Go_Difference-4                                 280 ± 0%       280 ± 0%    ~     (all equal)
    SetOperation/n=4/Go_SymmetricDifference-4                        378 ± 0%       378 ± 0%    ~     (all equal)
    SetOperation/n=4/Go_Union-4                                      287 ± 0%       287 ± 0%    ~     (all equal)
    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                      148 ± 0%       148 ± 0%    ~     (all equal)
    SetOperation/n=4/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%    ~     (all equal)
    SetOperation/n=8/Go_Intersection-4                               292 ± 0%       292 ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=8/Go_Difference-4                                 293 ± 0%       294 ± 0%    ~     (p=0.264 n=15+15)
    SetOperation/n=8/Go_SymmetricDifference-4                        397 ± 0%       397 ± 0%  -0.08%  (p=0.034 n=15+14)
    SetOperation/n=8/Go_Union-4                                      298 ± 0%       298 ± 0%  +0.13%  (p=0.034 n=12+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                      152 ± 0%       152 ± 0%    ~     (all equal)
    SetOperation/n=8/GEOS_Union-4                                   56.0 ± 0%      56.0 ± 0%    ~     (all equal)
    SetOperation/n=16/Go_Intersection-4                              306 ± 0%       306 ± 0%    ~     (all equal)
    SetOperation/n=16/Go_Difference-4                                316 ± 0%       316 ± 0%    ~     (all equal)
    SetOperation/n=16/Go_SymmetricDifference-4                       445 ± 0%       445 ± 0%    ~     (all equal)
    SetOperation/n=16/Go_Union-4                                     325 ± 0%       325 ± 0%    ~     (all equal)
    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                     185 ± 0%       185 ± 0%    ~     (all equal)
    SetOperation/n=16/GEOS_Union-4                                  68.0 ± 0%      68.0 ± 0%    ~     (all equal)
    SetOperation/n=32/Go_Intersection-4                              357 ± 0%       357 ± 0%    ~     (all equal)
    SetOperation/n=32/Go_Difference-4                                363 ± 0%       363 ± 0%    ~     (all equal)
    SetOperation/n=32/Go_SymmetricDifference-4                       516 ± 0%       516 ± 0%    ~     (all equal)
    SetOperation/n=32/Go_Union-4                                     368 ± 0%       368 ± 0%    ~     (all equal)
    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                     216 ± 0%       216 ± 0%    ~     (all equal)
    SetOperation/n=32/GEOS_Union-4                                  72.0 ± 0%      72.0 ± 0%    ~     (all equal)
    SetOperation/n=64/Go_Intersection-4                              398 ± 0%       398 ± 0%    ~     (all equal)
    SetOperation/n=64/Go_Difference-4                                432 ± 0%       432 ± 0%    ~     (p=0.084 n=15+14)
    SetOperation/n=64/Go_SymmetricDifference-4                       683 ± 0%       683 ± 0%    ~     (all equal)
    SetOperation/n=64/Go_Union-4                                     445 ± 0%       445 ± 0%    ~     (all equal)
    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                     345 ± 0%       345 ± 0%    ~     (all equal)
    SetOperation/n=64/GEOS_Union-4                                   112 ± 0%       112 ± 0%    ~     (all equal)
    SetOperation/n=128/Go_Intersection-4                             572 ± 0%       572 ± 0%    ~     (all equal)
    SetOperation/n=128/Go_Difference-4                               598 ± 0%       598 ± 0%    ~     (all equal)
    SetOperation/n=128/Go_SymmetricDifference-4                      946 ± 0%       946 ± 0%    ~     (all equal)
    SetOperation/n=128/Go_Union-4                                    603 ± 0%       603 ± 0%    ~     (all equal)
    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                    473 ± 0%       473 ± 0%    ~     (all equal)
    SetOperation/n=128/GEOS_Union-4                                  136 ± 0%       136 ± 0%    ~     (all equal)
    SetOperation/n=256/Go_Intersection-4                             731 ± 0%       731 ± 0%    ~     (all equal)
    SetOperation/n=256/Go_Difference-4                               861 ± 0%       861 ± 0%    ~     (all equal)
    SetOperation/n=256/Go_SymmetricDifference-4                    1.59k ± 0%     1.59k ± 0%    ~     (all equal)
    SetOperation/n=256/Go_Union-4                                    890 ± 0%       890 ± 0%    ~     (all equal)
    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                    985 ± 0%       985 ± 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%    ~     (all equal)
    SetOperation/n=512/Go_Difference-4                             1.51k ± 0%     1.51k ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=512/Go_SymmetricDifference-4                    2.62k ± 0%     2.62k ± 0%    ~     (all equal)
    SetOperation/n=512/Go_Union-4                                  1.51k ± 0%     1.51k ± 0%    ~     (p=0.700 n=15+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.03k ± 0%     2.03k ± 0%    ~     (all equal)
    SetOperation/n=1024/Go_Difference-4                            2.54k ± 0%     2.54k ± 0%    ~     (all equal)
    SetOperation/n=1024/Go_SymmetricDifference-4                   5.20k ± 0%     5.20k ± 0%    ~     (all equal)
    SetOperation/n=1024/Go_Union-4                                 2.64k ± 0%     2.64k ± 0%    ~     (all equal)
    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.69k ± 0%     4.69k ± 0%    ~     (all equal)
    SetOperation/n=2048/Go_Difference-4                            5.12k ± 0%     5.12k ± 0%    ~     (all equal)
    SetOperation/n=2048/Go_SymmetricDifference-4                   9.31k ± 0%     9.31k ± 0%    ~     (all equal)
    SetOperation/n=2048/Go_Union-4                                 5.12k ± 0%     5.12k ± 0%    ~     (all equal)
    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%    ~     (all equal)
    SetOperation/n=4096/Go_Difference-4                            9.22k ± 0%     9.22k ± 0%    ~     (p=0.056 n=15+12)
    SetOperation/n=4096/Go_SymmetricDifference-4                   19.6k ± 0%     19.6k ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=4096/Go_Union-4                                 9.57k ± 0%     9.57k ± 0%    ~     (all equal)
    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%    ~     (p=0.739 n=15+15)
    SetOperation/n=8192/Go_Difference-4                            19.5k ± 0%     19.5k ± 0%    ~     (p=0.462 n=15+15)
    SetOperation/n=8192/Go_SymmetricDifference-4                   36.0k ± 0%     36.0k ± 0%    ~     (p=0.107 n=15+15)
    SetOperation/n=8192/Go_Union-4                                 19.5k ± 0%     19.5k ± 0%    ~     (p=1.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.7k ± 0%    ~     (p=0.412 n=15+15)
    SetOperation/n=16384/Go_Difference-4                           35.9k ± 0%     35.9k ± 0%    ~     (p=0.356 n=15+9)
    SetOperation/n=16384/Go_SymmetricDifference-4                  76.9k ± 0%     76.9k ± 0%    ~     (p=1.000 n=15+15)
    SetOperation/n=16384/Go_Union-4                                37.2k ± 0%     37.2k ± 0%    ~     (p=0.706 n=14+14)
    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.700 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
    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)
    
    
    opened by peterstace 3
  • Implement the json.Unmarshaller interface for each concrete geometry

    Implement the json.Unmarshaller interface for each concrete geometry

    Currently, the json.Unmarshaller interface is only satisfied by the Geometry and GeometryCollection types.

    The concrete geometry types (Point, LineString etc) should also implement this interface.

    feature 
    opened by peterstace 3
  • Alter Internal Structure Of MultiPoint

    Alter Internal Structure Of MultiPoint

    Description

    • Alters the internals of MultiPoint to keep a slice of Point rather than a Sequency and a BitSet indicating empty points.

    • This gives MultiPoint consistency with the other Multi* geometries (MultiLineString and MultiPolygon).

    • It's also going to make implementing NaN and Inf checks easier later (see the linked ticket).

    Check List

    Have you:

    • Added unit tests? N/A, relies on existing.

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

    Related Issue

    • Part of https://github.com/peterstace/simplefeatures/issues/396

    Benchmark Results

    • Please paste benchmark results here. The benchmarks can be run using the run_benchmarks.sh script.

    TODO

    Click to expand
    PASTE BENCHMARKS HERE
    
    opened by peterstace 3
  • Make the `rtree` package internal

    Make the `rtree` package internal

    The rtree package is exposed publically, making it part of the module interface contract. This reduces the amount of flexibility with changing the interface and implementation of that package. We can modify the package's interface without breaking users by first making it internal. This assumes that users aren't already using the rtree package, which I think is a reasonable assumption.

    rtree breaking change 
    opened by peterstace 0
  • Investigate proper GeoJSON winding order

    Investigate proper GeoJSON winding order

    Right now, no normalisation takes place when marshalling GeoJSON. Should ring orientation be normalised? Needs a bit of investigation and thought about what implications this could have.

    improve 
    opened by peterstace 0
  • Make polygon construction easier

    Make polygon construction easier

    If a user has some input coordinates, it is quite onerous to get a polygon object.

    For example, the following program has a hardcoded list of coordinates, constructs a polygon from those coordinates, and then calculates the centroid of the polygon.

    func main() {
        coords := []float64{
            144.9324481856214,
            -37.80831791530031,
            151.1946474301501,
            -33.85326738062629,
            153.011491595451,
            -27.465643838083587,
            130.84533948192757,
            -12.45094813855576,
            115.8443383313529,
            -31.96739822401411,
            144.9324481856214,
            -37.80831791530031,
        }
        seq := geom.NewSequence(coords, geom.DimXY)
        ring, err := geom.NewLineString(seq)
        if err != nil {
            log.Fatalf("could not build ring: %v", err)
        }
        poly, err := geom.NewPolygon([]geom.LineString{ring})
        if err != nil {
            log.Fatalf("could not build polygon: %v", err)
        }
    
        log.Printf("Center: %v", poly.Centroid().AsText())
    }
    

    It would be nice if there were alternate (easier/terser) ways to create geometry objects. Potentially this could live in a separate package (named gbuild in this example, but that's just a placeholder). For example, it might look like this:

    func main() {
        coords := []float64{
            144.9324481856214,
            -37.80831791530031,
            151.1946474301501,
            -33.85326738062629,
            153.011491595451,
            -27.465643838083587,
            130.84533948192757,
            -12.45094813855576,
            115.8443383313529,
            -31.96739822401411,
            144.9324481856214,
            -37.80831791530031,
        }
        poly, err := gbuild.PolygonFromCoords([][]float64{coords})
            log.Fatalf("could not build polygon: %v", err)
        }
    
        log.Printf("Center: %v", poly.Centroid().AsText())
    }
    
    feature 
    opened by peterstace 1
  • Don't use trigonometry when sorting half edge records radially

    Don't use trigonometry when sorting half edge records radially

    In doublyConnectedEdgeList's fixVertex method, trigonometry is used to sort edges radially. Specifically, we use the math.Atan2 function to calculate the angle of each edge, and then sort the edges via their angle.

    Some alternate approaches are described here: https://stackoverflow.com/questions/6989100/sort-points-in-clockwise-order. These approaches may be better because they don't rely on trigonometry. Using regular multiplication/addition may be more numerically stable for angles that are extremely close together.

    improve DCEL 
    opened by peterstace 0
  • Revisit boundary behaviour in DCEL algorithm

    Revisit boundary behaviour in DCEL algorithm

    There are two parts that should be revisited:

    • Should the boundary for vertex records flip between internal/boundary in cases where multiple polygons (in a geometry collection) share an edge?

    • The modelling for boundary/interior/exterior is complicated. Can we use a tri-state enum instead?

    DCEL 
    opened by peterstace 0
Owner
Arya
Arya
simple python keylogger

HELLogger simple python keylogger DISCLAIMERS: DON'T DO BAD THINGS. THIS PROGRAM IS MEANT FOR PERSONAL USES ONLY. USE IT ONLY IN COMPUTERS WHERE YOU H

Arya 10 Nov 10, 2022
A simple linux keylogger project.

The project This project is a simple linux keylogger. When activated, it registers all the actions made with the keyboard. The log files are registere

null 1 Oct 24, 2021
this keylogger is only for pc not for android but it will only work on those pc who have python installed it is made for all linux,windows and macos

Keylogger this keylogger is only for pc not for android but it will only work on those pc who have python installed it is made for all linux,windows a

Titan_Exodous 1 Nov 4, 2021
This is a keylogger in python for Windows, Mac and Linux!

Python-Keylogger This is a keylogger in python for Windows, Mac and Linux! #How to use it by downloading the zip file? Download the zip file first The

Zeus_Dxvxm 2 Nov 12, 2021
A guide to building basic malware in Python by implementing a keylogger application

Keylogger-Malware-Project A guide to building basic malware in Python by implementing a keylogger application. If you want even more detail on the Pro

Noah Davis 1 Jan 11, 2022
KeyKatcher is a keylogger that records keystrokes made on a computer and sends to the E-Mail.

What is a keylogger? A keylogger is a software application or piece of hardware that monitors and records keystrokes made on a computer keyboard. The

Himank_Jain 7 Sep 19, 2022
KeyLogger

By-Emirhan KeyLogger Hangi Sistemlerde Çalışır? | On Which Systems Does It Work? KALİ LİNUX UBUNTU PARDUS MİNT TERMUX ARCH YÜKLEME & ÇALIŞTIRMA KOMUTL

null 2 Feb 24, 2022
Um keylogger que se disfarça de um app que tira print da tela.

Keylogger_ Um keylogger que se disfarça de um app que tira print da tela. Este programa captura o print da tela e salva ,normalmente, na pasta Picture

Marcus Vinícius Ribeiro Andrade 1 Dec 3, 2021
Undetectable Keylogger that reports to Discord

FUD Keylogger That Reports To Discord This python script will capture all of the keystrokes within a given time frame and report them to a Discord Ser

Dimitris Kalopisis 36 Dec 20, 2022
Deltaspy - an advanced keylogger that can send keylogs and screenshots to gmail

Deltaspy Deltaspy is a advanced keylogger which sends keylogs and screenshot to

Praanesh S 1 Dec 31, 2021
Bilgi Sistemleri Projesi için yapılan keylogger

Keylogger Bilgi Sistemleri Projesi için yapılan keylogger Projede kullanılan kütüphanelere sahip olmasanız da python dosyası çalıştığında kendisi gere

Tarik Bulut 1 Jan 7, 2022
Evil-stalker - A simple tool written in python, it is so simple that it is based on google dorks

evil-stalker How to run First of all, you must install the necessary libraries.

rock3d 6 Nov 16, 2022
A simple python script for hosting a Snowflake Proxy in your python program or with it's standalone cli

snowflake-cli Snowflake is a system to defeat internet censorship, made by Tor Project. The system works by volunteers who run the snowflake extension

Guilherme Paixão 6 Jul 14, 2022
Password Manager is a simple Python project which helps users in managing their passwords in a easier way

Password Manager is a simple Python project which helps users in managing their passwords in a easier way

Manish Jalui 4 Sep 29, 2021
A simple multi-threaded distributed SSH brute-forcing tool written in Python.

OrbitalDump A simple multi-threaded distributed SSH brute-forcing tool written in Python. How it Works When the script is executed without the --proxi

K4YT3X 408 Jan 3, 2023
DoSer.py - Simple DoSer in Python

DoSer.py - Simple DoSer in Python What is DoSer? DoSer is basically an HTTP Denial of Service attack that affects threaded servers. It works like this

null 1 Oct 12, 2021
DoSer.py - Simple DoSer in Python

DoSer.py - Simple DoSer in Python What is DoSer? DoSer is basically an HTTP Denial of Service attack that affects threaded servers. It works like this

null 8 Sep 2, 2022
A simple password generator using Python Tkinter.

Password-Generator-using-Python A simple password generator that generates password for you. User can Copy the password to Clipboard. Project made usi

Prashant Agheda 1 Nov 2, 2022
A simple subdomain scanner in python

Subdomain-Scanner A simple subdomain scanner in python ✨ Features scans subdomains of a domain thats it! ??‍♀️ How to use first download the scanner.p

Portgas D Ace 2 Jan 7, 2022