Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

fix: Use .EqualFold() to parse urn prefixed UUIDs #118

Merged
merged 2 commits into from
Aug 17, 2023

Commits on Aug 3, 2023

  1. Use .EqualFold() to parse urn prefixed UUIDs

    Prior to this commit we used a comparison with the result of ToLower()
    to test for a "urn:uuid" prefix in both UUID strings and byte slices.
    
    This commit replaces the ToLower and string comparison with both
    strings.EqualFold() and bytes.EqualFold().
    
    This reduces the CPU time across the board for UUIDs that start with
    "urn:uuid" and eliminates some allocations when parsing bytes.
    
    The benchmark output was generated by adding "urn:uuid" to the test
    input.
    
    goos: linux
    goarch: amd64
    pkg: github.com/google/uuid
    cpu: Intel(R) Core(TM) i7-10510U CPU @ 1.80GHz
                          │ /tmp/output1 │             /tmp/output2              │
                          │    sec/op    │    sec/op     vs base                 │
    Parse-8                 35.87n ± ∞ ¹   33.75n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseBytes-8            65.10n ± ∞ ¹   35.56n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseBytesUnsafe-8      35.31n ± ∞ ¹   34.70n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseBytesCopy-8        78.01n ± ∞ ¹   61.21n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseBadLength-8        3.499n ± ∞ ¹   3.084n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseLen32Truncated-8   3.335n ± ∞ ¹   3.334n ± ∞ ¹        ~ (p=1.000 n=1) ²
    ParseLen36Corrupted-8   63.02n ± ∞ ¹   58.26n ± ∞ ¹        ~ (p=1.000 n=1) ²
    geomean                 24.11n         20.51n        -14.92%
    ¹ need >= 6 samples for confidence interval at level 0.95
    ² need >= 4 samples to detect a difference at alpha level 0.05
    
                          │ /tmp/output1 │           /tmp/output2           │
                          │     B/op     │    B/op      vs base             │
    Parse-8                  0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBytes-8             16.00 ± ∞ ¹    0.00 ± ∞ ¹  ~ (p=1.000 n=1) ³
    ParseBytesUnsafe-8       0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBytesCopy-8         48.00 ± ∞ ¹   48.00 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBadLength-8         0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseLen32Truncated-8    0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseLen36Corrupted-8    16.00 ± ∞ ¹   16.00 ± ∞ ¹  ~ (p=1.000 n=1) ²
    geomean                            ⁴                ?               ⁴ ⁵
    ¹ need >= 6 samples for confidence interval at level 0.95
    ² all samples are equal
    ³ need >= 4 samples to detect a difference at alpha level 0.05
    ⁴ summaries must be >0 to compute geomean
    ⁵ ratios must be >0 to compute geomean
    
                          │ /tmp/output1 │           /tmp/output2           │
                          │  allocs/op   │  allocs/op   vs base             │
    Parse-8                  0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBytes-8             1.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ³
    ParseBytesUnsafe-8       0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBytesCopy-8         1.000 ± ∞ ¹   1.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseBadLength-8         0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseLen32Truncated-8    0.000 ± ∞ ¹   0.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    ParseLen36Corrupted-8    1.000 ± ∞ ¹   1.000 ± ∞ ¹  ~ (p=1.000 n=1) ²
    geomean                            ⁴                ?               ⁴ ⁵
    ¹ need >= 6 samples for confidence interval at level 0.95
    ² all samples are equal
    ³ need >= 4 samples to detect a difference at alpha level 0.05
    ⁴ summaries must be >0 to compute geomean
    ⁵ ratios must be >0 to compute geomean
    ayang64 committed Aug 3, 2023
    Configuration menu
    Copy the full SHA
    bcf1f91 View commit details
    Browse the repository at this point in the history

Commits on Aug 17, 2023

  1. Configuration menu
    Copy the full SHA
    7419c02 View commit details
    Browse the repository at this point in the history