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

Smol option #75

Closed
wants to merge 2 commits into from
Closed

Smol option #75

wants to merge 2 commits into from

Conversation

CAD97
Copy link
Contributor

@CAD97 CAD97 commented Mar 31, 2022

#22 but up to date with git main. (Missing some extra tests from #22, though.)

Attempts to avoid the perf cliff seen by #22 by dealing almost exclusively in "ReprNiche", and only using ReprUnion as a view into ReprNiche.

( 👏 on figuring out how to use UTF-8 to get a full 24 bytes inline, btw! )

@CAD97
Copy link
Contributor Author

CAD97 commented Mar 31, 2022

A small assembly dive:

b788a8e
<compact_str::CompactStr as core::convert::From<&str>>::from:
 push    r15
 push    r14
 push    rsi
 push    rdi
 push    rbx
 sub     rsp, 64
 mov     rsi, rcx
 test    r8, r8
 je      .LBB30_1
 mov     rdi, r8
 mov     r14, rdx
 cmp     r8, 25
 jae     .LBB30_3
 xorps   xmm0, xmm0
 movaps  xmmword, ptr, [rsp, +, 32], xmm0
 mov     qword, ptr, [rsp, +, 47], 0
 mov     eax, edi
 or      al, -64
 mov     byte, ptr, [rsp, +, 55], al
 lea     rcx, [rsp, +, 32]
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy
 mov     rbx, qword, ptr, [rsp, +, 32]
 mov     rdi, qword, ptr, [rsp, +, 40]
 mov     r15, qword, ptr, [rsp, +, 48]
 jmp     .LBB30_6
.LBB30_1:
 movabs  r15, -4611686018427387904
 xor     edi, edi
 xor     ebx, ebx
 jmp     .LBB30_6
.LBB30_3:
 mov     edx, 1
 mov     rcx, rdi
 call    __rust_alloc
 test    rax, rax
 je      .LBB30_7
 mov     rbx, rax
 movabs  r15, -72057594037927936
 or      r15, rdi
 mov     rcx, rax
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy
.LBB30_6:
 mov     qword, ptr, [rsi], rbx
 mov     qword, ptr, [rsi, +, 8], rdi
 mov     qword, ptr, [rsi, +, 16], r15
 mov     rax, rsi
 add     rsp, 64
 pop     rbx
 pop     rdi
 pop     rsi
 pop     r14
 pop     r15
 ret
.LBB30_7:
 mov     edx, 1
 mov     rcx, rdi
 call    alloc::alloc::handle_alloc_error
 ud2
c2159a7
<compact_str::CompactStr as core::convert::From<&str>>::from:
 push    r15
 push    r14
 push    rsi
 push    rdi
 push    rbx
 sub     rsp, 64
 mov     rsi, rcx
 test    r8, r8
 je      .LBB30_1
 mov     rdi, r8
 mov     r14, rdx
 cmp     r8, 25
 jae     .LBB30_3
 xorps   xmm0, xmm0
 movaps  xmmword, ptr, [rsp, +, 32], xmm0
 mov     qword, ptr, [rsp, +, 47], 0
 mov     eax, edi
 or      al, -64
 mov     byte, ptr, [rsp, +, 55], al
 lea     rcx, [rsp, +, 32]
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy
 mov     r15, qword, ptr, [rsp, +, 32]
 mov     rdi, qword, ptr, [rsp, +, 40]
 mov     rbx, qword, ptr, [rsp, +, 48]
 jmp     .LBB30_6
.LBB30_1:
 movabs  rbx, -4611686018427387904
 xor     edi, edi
 xor     r15d, r15d
 jmp     .LBB30_6
.LBB30_3:
 mov     edx, 1
 mov     rcx, rdi
 call    __rust_alloc
 test    rax, rax
 je      .LBB30_7
 mov     r15, rax
 movabs  rax, 72057594037927935
 and     rax, rdi
 movabs  rbx, -144115188075855872
 or      rbx, rax
 mov     rcx, r15
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy
.LBB30_6:
 mov     qword, ptr, [rsi], r15
 mov     qword, ptr, [rsi, +, 8], rdi
 mov     qword, ptr, [rsi, +, 16], rbx
 mov     rax, rsi
 add     rsp, 64
 pop     rbx
 pop     rdi
 pop     rsi
 pop     r14
 pop     r15
 ret
.LBB30_7:
 mov     edx, 1
 mov     rcx, rdi
 call    alloc::alloc::handle_alloc_error
 ud2
diff
<compact_str::CompactStr as core::convert::From<&str>>::from:
 push    r15
 push    r14
 push    rsi
 push    rdi
 push    rbx
 sub     rsp, 64
 mov     rsi, rcx
 test    r8, r8
 je      .LBB30_1
 mov     rdi, r8
 mov     r14, rdx
 cmp     r8, 25
 jae     .LBB30_3
 xorps   xmm0, xmm0
 movaps  xmmword, ptr, [rsp, +, 32], xmm0
 mov     qword, ptr, [rsp, +, 47], 0
 mov     eax, edi
 or      al, -64
 mov     byte, ptr, [rsp, +, 55], al
 lea     rcx, [rsp, +, 32]
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy call    memcpy
-mov     rbx, qword, ptr, [rsp, +, 32]
+mov     r15, qword, ptr, [rsp, +, 32]
 mov     rdi, qword, ptr, [rsp, +, 40]
-mov     r15, qword, ptr, [rsp, +, 48]
+mov     rbx, qword, ptr, [rsp, +, 48]
 jmp     .LBB30_6
.LBB30_1:
-movabs  r15, -4611686018427387904
+movabs  rbx, -4611686018427387904
 xor     edi, edi
-xor     ebx, ebx
+xor     r15d, r15d
 jmp     .LBB30_6
; just some register shuffling; bx and r15 are swapped

.LBB30_3:
 mov     edx, 1
 mov     rcx, rdi
 call    __rust_alloc
 test    rax, rax
 je      .LBB30_7
-mov     rbx, rax
+mov     r15, rax
-movabs  r15, -72057594037927936
+movabs  rax, 72057594037927935
+and     rax, rdi
+movabs  rbx, -144115188075855872
-or      r15, rdi
+or      rbx, rax
-mov     rcx, rax
+mov     rcx, r15
 mov     rdx, r14
 mov     r8, rdi
 call    memcpy
; this is the only real difference; how is it so notable!?
; note: bx and r15 are swapped between the two

.LBB30_6:
-mov     qword, ptr, [rsi], rbx
+mov     qword, ptr, [rsi], r15
 mov     qword, ptr, [rsi, +, 8], rdi
-mov     qword, ptr, [rsi, +, 16], r15
+mov     qword, ptr, [rsi, +, 16], rbx
 mov     rax, rsi
 add     rsp, 64
 pop     rbx
 pop     rdi
 pop     rsi
 pop     r14
 pop     r15
 ret
.LBB30_7:
 mov     edx, 1
 mov     rcx, rdi
 call    alloc::alloc::handle_alloc_error
 ud2

I am now more confused. The meaningful difference is in the allocating path, and the huge difference is being seen in the non-allocating path?

@ParkMyCar
Copy link
Owner

Continuing from #19, you're totally right about transmute_copy I misunderstood it, thanks!

Looking at the assembly diff I'm also confused. Total shot in the dark, maybe movabs rbx, -144115188075855872 is impacting some cache since we're loading an additional 64bit value, but I'm by no means an expert here

@CAD97
Copy link
Contributor Author

CAD97 commented Mar 31, 2022

Marking a note for myself: try out https://github.com/bheisler/iai to measure inst-count

@CAD97
Copy link
Contributor Author

CAD97 commented Apr 1, 2022

At this point, I'm suspecting that the perf volatility is due to the effects of machine code layout or similar, and isn't something directly caused by code changes. An inst-count benchmark would be able to clarify if this is the case (But setting up Iai is difficult when I run Windows...)

However, this latest push was able to decrease the measured impact from ~500% to ~40%, so it's less bad at least? Also, it avoids ptr<->int transmutes, which are very sketchy at best, and outright problematic at worst.

@CAD97
Copy link
Contributor Author

CAD97 commented Apr 1, 2022

I got WSL2 running and Iai in WSL2, so we now have inst-count results!

47975c0 -> 27c7bfd:

compact_str_new_0
  Instructions:                  41 (+17.14286%)
  L1 Accesses:                   66 (+20.00000%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   7 (+16.66667%)
  Estimated Cycles:             321 (+16.72727%)

compact_str_new_16
  Instructions:                  64 (+10.34483%)
  L1 Accesses:                  102 (+14.60674%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   6 (-14.28571%)
  Estimated Cycles:             322 (-6.395349%)

compact_str_new_24
  Instructions:                  64 (+10.34483%)
  L1 Accesses:                  101 (+13.48315%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   7 (No change)
  Estimated Cycles:             356 (+3.488372%)

compact_str_new_59
  Instructions:                 364 (+2.247191%)
  L1 Accesses:                  506 (+2.636917%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   9 (+12.50000%)
  Estimated Cycles:             831 (+6.130268%)

And 47975c0 -> c6d30e0:

compact_str_new_0
  Instructions:                 117 (+234.2857%)
  L1 Accesses:                  210 (+281.8182%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   9 (+50.00000%)
  Estimated Cycles:             535 (+94.54545%)

compact_str_new_16
  Instructions:                 140 (+141.3793%)
  L1 Accesses:                  244 (+174.1573%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                  10 (+42.85714%)
  Estimated Cycles:             604 (+75.58140%)

compact_str_new_24
  Instructions:                 140 (+141.3793%)
  L1 Accesses:                  244 (+174.1573%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                  10 (+42.85714%)
  Estimated Cycles:             604 (+75.58140%)

compact_str_new_59
  Instructions:                 440 (+23.59551%)
  L1 Accesses:                  649 (+31.64300%)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                  12 (+50.00000%)
  Estimated Cycles:            1079 (+37.80332%)

So the perf difference is "real"

@CAD97 CAD97 marked this pull request as ready for review April 1, 2022 04:42
@CAD97
Copy link
Contributor Author

CAD97 commented Apr 1, 2022

For comparison:

std_str_new_0
  Instructions:                  39
  L1 Accesses:                   53
  L2 Accesses:                    2
  RAM Accesses:                   3
  Estimated Cycles:             168

std_str_new_59
  Instructions:                 326
  L1 Accesses:                  447
  L2 Accesses:                    1
  RAM Accesses:                   5
  Estimated Cycles:             627

I think this is reasonable overhead, so it's just up to you to make a decision on whether this is good enough and how to handle msrv. (I believe you can backfill const transmute with union punning?)

@CAD97
Copy link
Contributor Author

CAD97 commented Apr 1, 2022

I ran the iai tests again on the latest nightly (0677edc86 2022-03-31), so here's the best(?) measurements I can offer:

47975c0
compact_str_new_0
  Instructions:                  34
  L1 Accesses:                   53
  L2 Accesses:                    3
  RAM Accesses:                   5
  Estimated Cycles:             243

compact_str_new_16
  Instructions:                  57
  L1 Accesses:                   88
  L2 Accesses:                    3
  RAM Accesses:                   6
  Estimated Cycles:             313

compact_str_new_24
  Instructions:                  57
  L1 Accesses:                   89
  L2 Accesses:                    2
  RAM Accesses:                   6
  Estimated Cycles:             309

compact_str_new_59
  Instructions:                 355
  L1 Accesses:                  489
  L2 Accesses:                    3
  RAM Accesses:                  10
  Estimated Cycles:             854

std_str_new_0
  Instructions:                  38
  L1 Accesses:                   52
  L2 Accesses:                    2
  RAM Accesses:                   3
  Estimated Cycles:             167

std_str_new_59
  Instructions:                 325
  L1 Accesses:                  447
  L2 Accesses:                    1
  RAM Accesses:                   4
  Estimated Cycles:             592
d5ee4d6
compact_str_new_0
  Instructions:                  40 (+17.64706%)
  L1 Accesses:                   65 (+22.64151%)
  L2 Accesses:                    3 (No change)
  RAM Accesses:                   5 (No change)
  Estimated Cycles:             255 (+4.938272%)

compact_str_new_16
  Instructions:                  63 (+10.52632%)
  L1 Accesses:                   98 (+11.36364%)
  L2 Accesses:                    4 (+33.33333%)
  RAM Accesses:                   7 (+16.66667%)
  Estimated Cycles:             363 (+15.97444%)

compact_str_new_24
  Instructions:                  63 (+10.52632%)
  L1 Accesses:                   99 (+11.23596%)
  L2 Accesses:                    3 (+50.00000%)
  RAM Accesses:                   7 (+16.66667%)
  Estimated Cycles:             359 (+16.18123%)

compact_str_new_59
  Instructions:                 363 (+2.253521%)
  L1 Accesses:                  503 (+2.862986%)
  L2 Accesses:                    3 (No change)
  RAM Accesses:                  10 (No change)
  Estimated Cycles:             868 (+1.639344%)

std_str_new_0
  Instructions:                  38 (No change)
  L1 Accesses:                   52 (No change)
  L2 Accesses:                    2 (No change)
  RAM Accesses:                   3 (No change)
  Estimated Cycles:             167 (No change)

std_str_new_59
  Instructions:                 325 (No change)
  L1 Accesses:                  447 (No change)
  L2 Accesses:                    1 (No change)
  RAM Accesses:                   4 (No change)
  Estimated Cycles:             592 (No change)

The largest inst-count percentage change is new(0), at +17.6% (+6).
The largest inst-count absolute change is new(59), at +8 (+2.25%).

This is well in the "compiler optimizations are unreliable at an inst level" realm. I think this is a reasonable cost, now that the larger regression is fixed, and basically comes down to "how good is your optimizer exactly".

@CAD97
Copy link
Contributor Author

CAD97 commented Apr 1, 2022

This makes the MSRV 1.46 for const mem::transmute (I tried using unions but IIRC that worked in const bindings but not const fn?).. but wait, isn't MSRV currently 1.49, why it it failing?

EDIT: ah right, it's 1.56 for use in const fn, the docs are a little misleading here due to the extra requirements for use in const fn and not just "const contexts".

@CAD97
Copy link
Contributor Author

CAD97 commented Jun 9, 2022

Rebased for latest changes. Perf -> 971a4dc

compact_str on  main via 🦀 v1.63.0-nightly 
❯ rustc -vV
rustc 1.63.0-nightly (a6b8c6954 2022-06-03)
binary: rustc
commit-hash: a6b8c6954829669a5c4fa320c3e6132edf04fcfc
commit-date: 2022-06-03
host: x86_64-pc-windows-msvc
release: 1.63.0-nightly
LLVM version: 14.0.4
cargo bench (81c43b0 )
compact_str on  main via 🦀 v1.63.0-nightly
❯ cargo bench
     Running benches\apis.rs (D:\.rust\target\release\deps\apis-593f9e3819524000.exe)
Gnuplot not found, using plotters backend
inline length           time:   [705.14 ps 705.77 ps 706.51 ps]

heap length             time:   [705.52 ps 706.18 ps 706.91 ps]
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high mild

very long heap length   time:   [705.06 ps 705.67 ps 706.35 ps]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

reserve small           time:   [3.1165 ns 3.1174 ns 3.1184 ns]
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  3 (3.00%) high mild
  7 (7.00%) high severe

reserve large           time:   [52.709 ns 52.770 ns 52.864 ns]
Found 21 outliers among 100 measurements (21.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
  19 (19.00%) high severe

clone small             time:   [2.1452 ns 2.1501 ns 2.1534 ns]
Found 16 outliers among 100 measurements (16.00%)
  5 (5.00%) low severe
  2 (2.00%) low mild
  4 (4.00%) high mild
  5 (5.00%) high severe

clone large             time:   [115.09 ns 115.17 ns 115.24 ns]
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) low mild
  2 (2.00%) high mild
  1 (1.00%) high severe

extend chars empty      time:   [41.376 ns 41.489 ns 41.605 ns]

extend chars short      time:   [27.504 ns 27.518 ns 27.534 ns]
Found 13 outliers among 100 measurements (13.00%)
  5 (5.00%) high mild
  8 (8.00%) high severe

extend chars inline to heap, 20
                        time:   [108.84 ns 108.95 ns 109.06 ns]
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe

extend chars heap, 20   time:   [158.37 ns 158.47 ns 158.58 ns]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild

compact_str_from_string_inline
                        time:   [36.663 ns 36.693 ns 36.721 ns]
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) low severe
  4 (4.00%) low mild
  3 (3.00%) high mild

compact_str_from_string_heap
                        time:   [36.732 ns 36.790 ns 36.849 ns]
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low mild
  6 (6.00%) high mild

compact_str_from_string_heap_long
                        time:   [35.984 ns 36.728 ns 37.495 ns]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  2 (2.00%) high mild

std string short length time:   [708.56 ps 709.96 ps 711.43 ps]

std string long length  time:   [708.25 ps 709.57 ps 710.98 ps]

std string very long length
                        time:   [707.62 ps 708.56 ps 709.59 ps]

std str reserve small   time:   [50.313 ns 50.345 ns 50.378 ns]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

std str reserve large   time:   [49.951 ns 50.216 ns 50.441 ns]
Found 25 outliers among 100 measurements (25.00%)
  4 (4.00%) low severe
  1 (1.00%) low mild
  15 (15.00%) high mild
  5 (5.00%) high severe

std str clone small     time:   [42.268 ns 42.504 ns 42.702 ns]
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low severe
  6 (6.00%) low mild
  2 (2.00%) high mild

std str clone large     time:   [127.25 ns 127.33 ns 127.41 ns]
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  3 (3.00%) high mild

std str extend chars empty
                        time:   [39.307 ns 39.352 ns 39.390 ns]

std str extend chars short
                        time:   [109.26 ns 109.34 ns 109.44 ns]
Found 16 outliers among 100 measurements (16.00%)
  1 (1.00%) low severe
  14 (14.00%) low mild
  1 (1.00%) high mild

std str extend chars 20 time:   [125.73 ns 125.87 ns 126.01 ns]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

     Running benches\compact_str.rs (D:\.rust\target\release\deps\compact_str-7eae15e66711c095.exe)
Gnuplot not found, using plotters backend
CompactString::new/0 chars
                        time:   [1.4187 ns 1.4195 ns 1.4204 ns]
Found 10 outliers among 100 measurements (10.00%)
  9 (9.00%) high mild
  1 (1.00%) high severe

CompactString::new/16 chars
                        time:   [7.2818 ns 7.2945 ns 7.3078 ns]
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe

CompactString::new/24 chars
                        time:   [2.8731 ns 2.8739 ns 2.8748 ns]
Found 16 outliers among 100 measurements (16.00%)
  6 (6.00%) low mild
  5 (5.00%) high mild
  5 (5.00%) high severe

CompactString::new/59 chars
                        time:   [50.023 ns 50.217 ns 50.398 ns]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

String::new/59 chars    time:   [47.306 ns 47.327 ns 47.348 ns]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

u8::to_compact_string/42
                        time:   [6.7375 ns 6.7411 ns 6.7456 ns]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild

u32::to_compact_string/54321
                        time:   [8.4130 ns 8.4177 ns 8.4232 ns]
Found 14 outliers among 100 measurements (14.00%)
  13 (13.00%) high mild
  1 (1.00%) high severe

isize::to_compact_string/-9999999
                        time:   [10.168 ns 10.181 ns 10.195 ns]
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe

u64::to_compact_string/MAX
                        time:   [14.959 ns 15.011 ns 15.078 ns]
Found 7 outliers among 100 measurements (7.00%)
  3 (3.00%) high mild
  4 (4.00%) high severe

u128::to_compact_string/12345678909876543210123456789
                        time:   [70.978 ns 71.041 ns 71.101 ns]

bool::to_compact_string/true
                        time:   [3.6392 ns 3.6418 ns 3.6448 ns]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

String::to_compact_string/hello world!
                        time:   [7.2315 ns 7.2355 ns 7.2405 ns]
Found 8 outliers among 100 measurements (8.00%)
  8 (8.00%) high mild

char::to_compact_string/a
                        time:   [8.9252 ns 8.9336 ns 8.9415 ns]
Found 22 outliers among 100 measurements (22.00%)
  1 (1.00%) low severe
  11 (11.00%) low mild
  5 (5.00%) high mild
  5 (5.00%) high severe

     Running benches\comparison.rs (D:\.rust\target\release\deps\comparison-36ce30f819a4ae6a.exe)
Gnuplot not found, using plotters backend
String Creation/CompactString/0
                        time:   [1.4215 ns 1.4221 ns 1.4227 ns]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high severe
String Creation/SmolStr/0
                        time:   [12.040 ns 12.047 ns 12.055 ns]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild
String Creation/SmartString/0
                        time:   [9.8977 ns 9.9062 ns 9.9162 ns]
Found 8 outliers among 100 measurements (8.00%)
  8 (8.00%) high mild
String Creation/std::String/0
                        time:   [3.7925 ns 3.7936 ns 3.7947 ns]
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe
String Creation/CompactString/11
                        time:   [8.3842 ns 8.3895 ns 8.3955 ns]
Found 10 outliers among 100 measurements (10.00%)
  10 (10.00%) high mild
String Creation/SmolStr/11
                        time:   [18.176 ns 18.184 ns 18.192 ns]
Found 9 outliers among 100 measurements (9.00%)
  6 (6.00%) high mild
  3 (3.00%) high severe
String Creation/SmartString/11
                        time:   [11.581 ns 11.588 ns 11.596 ns]
Found 16 outliers among 100 measurements (16.00%)
  4 (4.00%) low mild
  11 (11.00%) high mild
  1 (1.00%) high severe
String Creation/std::String/11
                        time:   [40.285 ns 40.374 ns 40.468 ns]
Found 5 outliers among 100 measurements (5.00%)
  5 (5.00%) high mild
String Creation/CompactString/12
                        time:   [7.0070 ns 7.0111 ns 7.0159 ns]
Found 17 outliers among 100 measurements (17.00%)
  5 (5.00%) high mild
  12 (12.00%) high severe
String Creation/SmolStr/12
                        time:   [17.643 ns 17.654 ns 17.666 ns]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Creation/SmartString/12
                        time:   [11.511 ns 11.517 ns 11.524 ns]
Found 3 outliers among 100 measurements (3.00%)
  1 (1.00%) high mild
  2 (2.00%) high severe
String Creation/std::String/12
                        time:   [39.814 ns 39.899 ns 39.987 ns]
Found 25 outliers among 100 measurements (25.00%)
  11 (11.00%) low severe
  14 (14.00%) high severe
String Creation/CompactString/22
                        time:   [8.1519 ns 8.1556 ns 8.1599 ns]
Found 11 outliers among 100 measurements (11.00%)
  10 (10.00%) high mild
  1 (1.00%) high severe
String Creation/SmolStr/22
                        time:   [12.838 ns 12.869 ns 12.904 ns]
String Creation/SmartString/22
                        time:   [12.335 ns 12.343 ns 12.353 ns]
Found 14 outliers among 100 measurements (14.00%)
  3 (3.00%) low mild
  6 (6.00%) high mild
  5 (5.00%) high severe
String Creation/std::String/22
                        time:   [40.139 ns 40.164 ns 40.194 ns]
Found 6 outliers among 100 measurements (6.00%)
  4 (4.00%) high mild
  2 (2.00%) high severe
String Creation/CompactString/23
                        time:   [8.1551 ns 8.1601 ns 8.1661 ns]
Found 18 outliers among 100 measurements (18.00%)
  1 (1.00%) low mild
  4 (4.00%) high mild
  13 (13.00%) high severe
String Creation/SmolStr/23
                        time:   [1.1214 us 1.1224 us 1.1235 us]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild
String Creation/SmartString/23
                        time:   [11.535 ns 11.554 ns 11.577 ns]
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) high mild
  4 (4.00%) high severe
String Creation/std::String/23
                        time:   [40.496 ns 40.540 ns 40.594 ns]
Found 11 outliers among 100 measurements (11.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  7 (7.00%) high severe
String Creation/CompactString/24
                        time:   [3.3465 ns 3.3473 ns 3.3480 ns]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe
String Creation/SmolStr/24
                        time:   [54.861 ns 54.908 ns 54.955 ns]
Found 10 outliers among 100 measurements (10.00%)
  8 (8.00%) high mild
  2 (2.00%) high severe
String Creation/SmartString/24
                        time:   [55.464 ns 55.512 ns 55.565 ns]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
String Creation/std::String/24
                        time:   [40.450 ns 40.482 ns 40.537 ns]
Found 5 outliers among 100 measurements (5.00%)
  3 (3.00%) high mild
  2 (2.00%) high severe
String Creation/CompactString/25
                        time:   [47.276 ns 47.569 ns 47.870 ns]
String Creation/SmolStr/25
                        time:   [54.611 ns 54.659 ns 54.707 ns]
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) low mild
  4 (4.00%) high mild
String Creation/SmartString/25
                        time:   [55.778 ns 55.807 ns 55.834 ns]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
String Creation/std::String/25
                        time:   [41.991 ns 41.999 ns 42.008 ns]
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) low mild
  2 (2.00%) high mild
  3 (3.00%) high severe
String Creation/CompactString/50
                        time:   [51.094 ns 51.621 ns 52.115 ns]
Found 14 outliers among 100 measurements (14.00%)
  11 (11.00%) high mild
  3 (3.00%) high severe
String Creation/SmolStr/50
                        time:   [57.270 ns 57.400 ns 57.554 ns]
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe
String Creation/SmartString/50
                        time:   [59.337 ns 59.394 ns 59.465 ns]
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) low mild
  5 (5.00%) high mild
  7 (7.00%) high severe
String Creation/std::String/50
                        time:   [45.869 ns 46.503 ns 47.249 ns]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) high mild
  3 (3.00%) high severe

String Cloning/CompactString/0
                        time:   [2.3609 ns 2.3754 ns 2.3856 ns]
Found 10 outliers among 100 measurements (10.00%)
  8 (8.00%) low severe
  2 (2.00%) high mild
String Cloning/SmolStr/0
                        time:   [9.9738 ns 9.9810 ns 9.9895 ns]
String Cloning/SmartString/0
                        time:   [4.2501 ns 4.2525 ns 4.2552 ns]
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
String Cloning/std::String/0
                        time:   [3.7964 ns 3.7976 ns 3.7989 ns]
Found 9 outliers among 100 measurements (9.00%)
  2 (2.00%) low mild
  5 (5.00%) high mild
  2 (2.00%) high severe
String Cloning/CompactString/11
                        time:   [2.3597 ns 2.3726 ns 2.3831 ns]
Found 11 outliers among 100 measurements (11.00%)
  8 (8.00%) low severe
  3 (3.00%) high mild
String Cloning/SmolStr/11
                        time:   [9.9749 ns 9.9841 ns 9.9941 ns]
Found 12 outliers among 100 measurements (12.00%)
  12 (12.00%) high mild
String Cloning/SmartString/11
                        time:   [4.2489 ns 4.2515 ns 4.2545 ns]
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low severe
  4 (4.00%) high mild
  7 (7.00%) high severe
String Cloning/std::String/11
                        time:   [40.148 ns 40.158 ns 40.169 ns]
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low severe
  2 (2.00%) high mild
  4 (4.00%) high severe
String Cloning/CompactString/12
                        time:   [2.3570 ns 2.3759 ns 2.3886 ns]
Found 9 outliers among 100 measurements (9.00%)
  4 (4.00%) low severe
  3 (3.00%) high mild
  2 (2.00%) high severe
String Cloning/SmolStr/12
                        time:   [9.9752 ns 9.9834 ns 9.9928 ns]
Found 15 outliers among 100 measurements (15.00%)
  1 (1.00%) low severe
  7 (7.00%) high mild
  7 (7.00%) high severe
String Cloning/SmartString/12
                        time:   [4.2482 ns 4.2504 ns 4.2530 ns]
Found 15 outliers among 100 measurements (15.00%)
  1 (1.00%) low mild
  9 (9.00%) high mild
  5 (5.00%) high severe
String Cloning/std::String/12
                        time:   [40.560 ns 40.607 ns 40.649 ns]
Found 18 outliers among 100 measurements (18.00%)
  18 (18.00%) high severe
String Cloning/CompactString/22
                        time:   [2.3523 ns 2.3689 ns 2.3818 ns]
Found 16 outliers among 100 measurements (16.00%)
  9 (9.00%) low severe
  3 (3.00%) high mild
  4 (4.00%) high severe
String Cloning/SmolStr/22
                        time:   [9.9672 ns 9.9733 ns 9.9804 ns]
Found 16 outliers among 100 measurements (16.00%)
  12 (12.00%) high mild
  4 (4.00%) high severe
String Cloning/SmartString/22
                        time:   [4.2479 ns 4.2499 ns 4.2523 ns]
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  8 (8.00%) high severe
String Cloning/std::String/22
                        time:   [40.085 ns 40.120 ns 40.166 ns]
Found 13 outliers among 100 measurements (13.00%)
  6 (6.00%) high mild
  7 (7.00%) high severe
String Cloning/CompactString/23
                        time:   [2.3721 ns 2.3806 ns 2.3863 ns]
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) low severe
  3 (3.00%) high mild
  2 (2.00%) high severe
String Cloning/SmolStr/23
                        time:   [18.109 ns 18.123 ns 18.139 ns]
Found 9 outliers among 100 measurements (9.00%)
  5 (5.00%) high mild
  4 (4.00%) high severe
String Cloning/SmartString/23
                        time:   [4.2465 ns 4.2487 ns 4.2513 ns]
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) low mild
  4 (4.00%) high mild
  4 (4.00%) high severe
String Cloning/std::String/23
                        time:   [40.294 ns 40.319 ns 40.344 ns]
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) low mild
  5 (5.00%) high mild
  2 (2.00%) high severe
String Cloning/CompactString/24
                        time:   [2.3649 ns 2.3758 ns 2.3843 ns]
Found 9 outliers among 100 measurements (9.00%)
  7 (7.00%) low severe
  1 (1.00%) high mild
  1 (1.00%) high severe
String Cloning/SmolStr/24
                        time:   [18.192 ns 18.214 ns 18.237 ns]
String Cloning/SmartString/24
                        time:   [52.825 ns 52.849 ns 52.876 ns]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low mild
  3 (3.00%) high severe
String Cloning/std::String/24
                        time:   [40.507 ns 40.723 ns 40.993 ns]
Found 9 outliers among 100 measurements (9.00%)
  3 (3.00%) high mild
  6 (6.00%) high severe
String Cloning/CompactString/25
                        time:   [47.016 ns 47.054 ns 47.094 ns]
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) high mild
  10 (10.00%) high severe
String Cloning/SmolStr/25
                        time:   [18.162 ns 18.181 ns 18.202 ns]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Cloning/SmartString/25
                        time:   [52.887 ns 52.905 ns 52.923 ns]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
String Cloning/std::String/25
                        time:   [40.788 ns 40.812 ns 40.840 ns]
Found 7 outliers among 100 measurements (7.00%)
  4 (4.00%) high mild
  3 (3.00%) high severe
String Cloning/CompactString/50
                        time:   [52.450 ns 52.476 ns 52.502 ns]
String Cloning/SmolStr/50
                        time:   [18.118 ns 18.125 ns 18.132 ns]
Found 11 outliers among 100 measurements (11.00%)
  3 (3.00%) high mild
  8 (8.00%) high severe
String Cloning/SmartString/50
                        time:   [55.863 ns 55.895 ns 55.927 ns]
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) low mild
  1 (1.00%) high mild
String Cloning/std::String/50
                        time:   [46.666 ns 46.971 ns 47.286 ns]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe

String Access/CompactString/0
                        time:   [718.00 ps 718.15 ps 718.32 ps]
Found 12 outliers among 100 measurements (12.00%)
  4 (4.00%) high mild
  8 (8.00%) high severe
String Access/SmolStr/0 time:   [717.04 ps 717.14 ps 717.23 ps]
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild
String Access/SmartString/0
                        time:   [1.4317 ns 1.4319 ns 1.4322 ns]
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe
String Access/std::String/0
                        time:   [471.88 ps 472.12 ps 472.39 ps]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
String Access/CompactString/11
                        time:   [717.97 ps 718.17 ps 718.39 ps]
Found 4 outliers among 100 measurements (4.00%)
  4 (4.00%) high severe
String Access/SmolStr/11
                        time:   [717.55 ps 717.64 ps 717.75 ps]
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) low mild
  2 (2.00%) high mild
  6 (6.00%) high severe
String Access/SmartString/11
                        time:   [1.4336 ns 1.4340 ns 1.4343 ns]
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  1 (1.00%) high mild
  2 (2.00%) high severe
String Access/std::String/11
                        time:   [473.65 ps 473.82 ps 474.00 ps]
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
String Access/CompactString/12
                        time:   [718.20 ps 718.51 ps 718.88 ps]
Found 16 outliers among 100 measurements (16.00%)
  9 (9.00%) high mild
  7 (7.00%) high severe
String Access/SmolStr/12
                        time:   [716.96 ps 717.05 ps 717.15 ps]
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) high mild
  3 (3.00%) high severe
String Access/SmartString/12
                        time:   [1.4308 ns 1.4312 ns 1.4315 ns]
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  3 (3.00%) high mild
String Access/std::String/12
                        time:   [472.50 ps 472.73 ps 473.01 ps]
Found 8 outliers among 100 measurements (8.00%)
  8 (8.00%) high mild
String Access/CompactString/22
                        time:   [718.63 ps 719.37 ps 720.57 ps]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
String Access/SmolStr/22
                        time:   [717.60 ps 718.10 ps 719.08 ps]
Found 9 outliers among 100 measurements (9.00%)
  6 (6.00%) high mild
  3 (3.00%) high severe
String Access/SmartString/22
                        time:   [1.4312 ns 1.4315 ns 1.4319 ns]
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) high mild
  3 (3.00%) high severe
String Access/std::String/22
                        time:   [472.62 ps 472.87 ps 473.16 ps]
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Access/CompactString/23
                        time:   [717.91 ps 718.37 ps 719.11 ps]
Found 15 outliers among 100 measurements (15.00%)
  3 (3.00%) low mild
  4 (4.00%) high mild
  8 (8.00%) high severe
String Access/SmolStr/23
                        time:   [716.34 ps 716.50 ps 716.66 ps]
Found 6 outliers among 100 measurements (6.00%)
  3 (3.00%) low mild
  3 (3.00%) high severe
String Access/SmartString/23
                        time:   [1.4314 ns 1.4317 ns 1.4322 ns]
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe
String Access/std::String/23
                        time:   [473.20 ps 473.59 ps 474.01 ps]
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe
String Access/CompactString/24
                        time:   [718.03 ps 718.22 ps 718.43 ps]
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) low mild
  6 (6.00%) high mild
  4 (4.00%) high severe
String Access/SmolStr/24
                        time:   [801.49 ps 812.77 ps 821.55 ps]
String Access/SmartString/24
                        time:   [597.43 ps 597.52 ps 597.62 ps]
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) low mild
  2 (2.00%) high mild
  3 (3.00%) high severe
String Access/std::String/24
                        time:   [472.80 ps 473.00 ps 473.23 ps]
Found 9 outliers among 100 measurements (9.00%)
  9 (9.00%) high mild
String Access/CompactString/25
                        time:   [957.48 ps 958.23 ps 959.61 ps]
Found 14 outliers among 100 measurements (14.00%)
  3 (3.00%) low mild
  6 (6.00%) high mild
  5 (5.00%) high severe
String Access/SmolStr/25
                        time:   [716.69 ps 716.81 ps 716.93 ps]
Found 7 outliers among 100 measurements (7.00%)
  3 (3.00%) low mild
  2 (2.00%) high mild
  2 (2.00%) high severe
String Access/SmartString/25
                        time:   [597.41 ps 597.63 ps 597.92 ps]
Found 3 outliers among 100 measurements (3.00%)
  1 (1.00%) high mild
  2 (2.00%) high severe
String Access/std::String/25
                        time:   [473.25 ps 473.47 ps 473.70 ps]
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
String Access/CompactString/50
                        time:   [957.19 ps 957.51 ps 957.86 ps]
Found 12 outliers among 100 measurements (12.00%)
  3 (3.00%) high mild
  9 (9.00%) high severe
String Access/SmolStr/50
                        time:   [716.12 ps 716.30 ps 716.48 ps]
Found 3 outliers among 100 measurements (3.00%)
  1 (1.00%) low mild
  2 (2.00%) high mild
String Access/SmartString/50
                        time:   [597.09 ps 597.26 ps 597.49 ps]
Found 9 outliers among 100 measurements (9.00%)
  2 (2.00%) low mild
  3 (3.00%) high mild
  4 (4.00%) high severe
String Access/std::String/50
                        time:   [472.59 ps 472.88 ps 473.20 ps]
Found 7 outliers among 100 measurements (7.00%)
  7 (7.00%) high mild

     Running benches\random.rs (D:\.rust\target\release\deps\random-9155283f090f7750.exe)
Gnuplot not found, using plotters backend
if statement min        time:   [930.80 ps 931.25 ps 931.77 ps]
Found 18 outliers among 100 measurements (18.00%)
  7 (7.00%) high mild
  11 (11.00%) high severe

cmp min                 time:   [934.13 ps 935.34 ps 936.68 ps]
Found 17 outliers among 100 measurements (17.00%)
  8 (8.00%) high mild
  9 (9.00%) high severe

logarithm/u32::MIN      time:   [52.694 ns 52.978 ns 53.275 ns]
Found 8 outliers among 100 measurements (8.00%)
  1 (1.00%) low severe
  4 (4.00%) low mild
  3 (3.00%) high mild

logarithm/u32::MAX / 2  time:   [9.5517 ns 9.5543 ns 9.5571 ns]
Found 6 outliers among 100 measurements (6.00%)
  2 (2.00%) low mild
  4 (4.00%) high mild

logarithm/u32::MAX      time:   [9.5579 ns 9.5608 ns 9.5639 ns]
Found 3 outliers among 100 measurements (3.00%)
  1 (1.00%) high mild
  2 (2.00%) high severe

match_statement/u32::MIN
                        time:   [475.43 ps 475.84 ps 476.27 ps]

match_statement/u32::MAX / 2
                        time:   [1.6505 ns 1.6535 ns 1.6567 ns]

match_statement/u32::MAX
                        time:   [1.6480 ns 1.6501 ns 1.6525 ns]
cargo bench (971a4dc)
compact_str on  smol-option via 🦀 v1.63.0-nightly
❯ cargo bench
     Running benches\apis.rs (D:\.rust\target\release\deps\apis-c307f744aa4b200e.exe)

inline length           time:   [1.1842 ns 1.1850 ns 1.1859 ns]
                        change: [+67.493% +67.678% +67.880%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  7 (7.00%) high mild
  1 (1.00%) high severe

heap length             time:   [716.81 ps 717.09 ps 717.38 ps]
                        change: [+1.4412% +1.5332% +1.6248%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) low severe
  1 (1.00%) high mild
  1 (1.00%) high severe

very long heap length   time:   [704.90 ps 705.33 ps 705.79 ps]
                        change: [-0.1990% -0.1138% -0.0330%] (p = 0.01 < 0.05)
                        Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
  7 (7.00%) high mild
  5 (5.00%) high severe

reserve small           time:   [2.7227 ns 2.7257 ns 2.7297 ns]
                        change: [-12.682% -12.565% -12.440%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

reserve large           time:   [51.588 ns 51.634 ns 51.682 ns]
                        change: [-2.9534% -2.6731% -2.4205%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low mild
  6 (6.00%) high mild

clone small             time:   [2.4167 ns 2.4175 ns 2.4184 ns]
                        change: [+11.208% +12.028% +12.515%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  6 (6.00%) high mild
  7 (7.00%) high severe

clone large             time:   [126.16 ns 126.49 ns 126.82 ns]
                        change: [+9.1387% +9.3678% +9.6060%] (p = 0.00 < 0.05)
                        Performance has regressed.

extend chars empty      time:   [40.934 ns 40.987 ns 41.061 ns]
                        change: [-1.4397% -1.1161% -0.7428%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 15 outliers among 100 measurements (15.00%)
  8 (8.00%) high mild
  7 (7.00%) high severe

extend chars short      time:   [30.744 ns 30.761 ns 30.785 ns]
                        change: [+11.481% +11.632% +11.786%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low mild
  4 (4.00%) high severe

extend chars inline to heap, 20
                        time:   [107.48 ns 107.60 ns 107.74 ns]
                        change: [-1.1490% -0.9396% -0.7099%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 9 outliers among 100 measurements (9.00%)
  2 (2.00%) high mild
  7 (7.00%) high severe

extend chars heap, 20   time:   [159.39 ns 159.74 ns 160.10 ns]
                        change: [+0.8631% +1.0221% +1.1745%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) low mild

compact_str_from_string_inline
                        time:   [36.361 ns 36.441 ns 36.525 ns]
                        change: [-1.1277% -0.9158% -0.7211%] (p = 0.00 < 0.05)
                        Change within noise threshold.

compact_str_from_string_heap
                        time:   [36.155 ns 36.220 ns 36.292 ns]
                        change: [-1.6287% -1.4700% -1.3004%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  4 (4.00%) high mild
  1 (1.00%) high severe

compact_str_from_string_heap_long
                        time:   [36.253 ns 36.867 ns 37.501 ns]
                        change: [-0.7778% +2.5653% +5.8162%] (p = 0.13 > 0.05)
                        No change in performance detected.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) low mild
  1 (1.00%) high mild

std string short length time:   [706.43 ps 706.93 ps 707.49 ps]
                        change: [-0.6249% -0.4290% -0.2426%] (p = 0.00 < 0.05)
                        Change within noise threshold.

std string long length  time:   [705.12 ps 705.72 ps 706.36 ps]
                        change: [-1.1767% -1.0192% -0.8589%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 12 outliers among 100 measurements (12.00%)
  2 (2.00%) high mild
  10 (10.00%) high severe

std string very long length
                        time:   [704.66 ps 705.26 ps 705.91 ps]
                        change: [-1.0147% -0.8515% -0.6910%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 16 outliers among 100 measurements (16.00%)
  15 (15.00%) high mild
  1 (1.00%) high severe

std str reserve small   time:   [41.226 ns 41.307 ns 41.400 ns]
                        change: [-18.110% -18.014% -17.908%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  8 (8.00%) low mild
  1 (1.00%) high severe

std str reserve large   time:   [44.556 ns 44.573 ns 44.588 ns]
                        change: [-11.514% -11.283% -11.013%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

std str clone small     time:   [40.858 ns 40.940 ns 41.018 ns]
                        change: [-4.4848% -4.0958% -3.6999%] (p = 0.00 < 0.05)
                        Performance has improved.

std str clone large     time:   [126.26 ns 126.44 ns 126.65 ns]
                        change: [-0.5341% -0.3803% -0.2275%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

std str extend chars empty
                        time:   [39.169 ns 39.180 ns 39.192 ns]
                        change: [-0.1741% -0.0709% +0.0314%] (p = 0.19 > 0.05)
                        No change in performance detected.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  2 (2.00%) high mild
  6 (6.00%) high severe

std str extend chars short
                        time:   [125.35 ns 125.51 ns 125.67 ns]
                        change: [+14.755% +14.966% +15.158%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  1 (1.00%) low severe
  6 (6.00%) low mild

std str extend chars 20 time:   [133.12 ns 133.53 ns 134.05 ns]
                        change: [+6.7582% +7.2558% +7.8150%] (p = 0.00 < 0.05)
                        Performance has regressed.

     Running benches\compact_str.rs (D:\.rust\target\release\deps\compact_str-fce84625a3b9d994.exe)
CompactString::new/0 chars
                        time:   [2.1187 ns 2.1198 ns 2.1211 ns]
                        change: [+49.316% +49.419% +49.526%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) high mild
  1 (1.00%) high severe

CompactString::new/16 chars
                        time:   [9.0645 ns 9.0699 ns 9.0762 ns]
                        change: [+21.756% +22.788% +23.630%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 11 outliers among 100 measurements (11.00%)
  6 (6.00%) high mild
  5 (5.00%) high severe

CompactString::new/24 chars
                        time:   [4.1725 ns 4.1764 ns 4.1806 ns]
                        change: [+45.253% +45.433% +45.620%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) low mild
  6 (6.00%) high mild
  2 (2.00%) high severe

CompactString::new/59 chars
                        time:   [48.302 ns 48.440 ns 48.561 ns]
                        change: [-3.7591% -3.3717% -3.0140%] (p = 0.00 < 0.05)
                        Performance has improved.

String::new/59 chars    time:   [43.614 ns 43.868 ns 44.109 ns]
                        change: [-8.4613% -8.1799% -7.9049%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
  1 (1.00%) high mild
  15 (15.00%) high severe

u8::to_compact_string/42
                        time:   [10.370 ns 10.378 ns 10.387 ns]
                        change: [+53.495% +53.635% +53.770%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) low severe
  1 (1.00%) low mild
  5 (5.00%) high mild
  3 (3.00%) high severe

u32::to_compact_string/54321
                        time:   [9.3175 ns 9.3261 ns 9.3355 ns]
                        change: [+10.464% +10.578% +10.688%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 15 outliers among 100 measurements (15.00%)
  3 (3.00%) low mild
  9 (9.00%) high mild
  3 (3.00%) high severe

isize::to_compact_string/-9999999
                        time:   [11.493 ns 11.499 ns 11.507 ns]
                        change: [+12.809% +12.995% +13.189%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe

u64::to_compact_string/MAX
                        time:   [15.706 ns 15.713 ns 15.722 ns]
                        change: [+4.5799% +4.8810% +5.1259%] (p = 0.00 < 0.05)
                        Performance has regressed.

u128::to_compact_string/12345678909876543210123456789
                        time:   [72.699 ns 72.727 ns 72.756 ns]
                        change: [+2.3345% +2.4157% +2.4959%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low severe
  2 (2.00%) low mild
  2 (2.00%) high mild

bool::to_compact_string/true
                        time:   [2.7862 ns 2.7889 ns 2.7917 ns]
                        change: [-23.554% -23.457% -23.359%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 6 outliers among 100 measurements (6.00%)
  6 (6.00%) high mild

String::to_compact_string/hello world!
                        time:   [9.2980 ns 9.3050 ns 9.3136 ns]
                        change: [+28.402% +28.587% +28.753%] (p = 0.00 < 0.05)
                        Performance has regressed.

char::to_compact_string/a
                        time:   [10.840 ns 10.844 ns 10.850 ns]
                        change: [+21.094% +21.223% +21.348%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) low mild
  2 (2.00%) high mild
  4 (4.00%) high severe

     Running benches\comparison.rs (D:\.rust\target\release\deps\comparison-0a7eae6884704761.exe)
String Creation/CompactString/0
                        time:   [2.1192 ns 2.1210 ns 2.1230 ns]
                        change: [+46.622% +47.829% +48.743%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 15 outliers among 100 measurements (15.00%)
  1 (1.00%) low mild
  10 (10.00%) high mild
  4 (4.00%) high severe
String Creation/SmolStr/0
                        time:   [11.825 ns 11.832 ns 11.839 ns]
                        change: [-1.9006% -1.8252% -1.7531%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
String Creation/SmartString/0
                        time:   [10.927 ns 10.933 ns 10.941 ns]
                        change: [+10.087% +10.212% +10.334%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 11 outliers among 100 measurements (11.00%)
  1 (1.00%) low mild
  5 (5.00%) high mild
  5 (5.00%) high severe
String Creation/std::String/0
                        time:   [4.0287 ns 4.0406 ns 4.0536 ns]
                        change: [+7.7627% +8.4237% +9.0836%] (p = 0.00 < 0.05)
                        Performance has regressed.
Benchmarking String Creation/CompactString/11
String Creation/CompactString/11
                        time:   [9.1735 ns 9.1799 ns 9.1874 ns]
                        change: [+9.4396% +9.5497% +9.6470%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
String Creation/SmolStr/11
                        time:   [18.446 ns 18.472 ns 18.499 ns]
                        change: [+1.2923% +1.4232% +1.5759%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) low mild
  1 (1.00%) high mild
String Creation/SmartString/11
                        time:   [12.560 ns 12.581 ns 12.606 ns]
                        change: [+8.2254% +8.4325% +8.6396%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 16 outliers among 100 measurements (16.00%)
  6 (6.00%) high mild
  10 (10.00%) high severe
String Creation/std::String/11
                        time:   [41.441 ns 41.478 ns 41.520 ns]
                        change: [+2.8339% +3.0330% +3.2329%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  2 (2.00%) high mild
  6 (6.00%) high severe
String Creation/CompactString/12
                        time:   [9.0985 ns 9.1101 ns 9.1238 ns]
                        change: [+30.101% +30.392% +30.646%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 16 outliers among 100 measurements (16.00%)
  3 (3.00%) high mild
  13 (13.00%) high severe
String Creation/SmolStr/12
                        time:   [17.625 ns 17.641 ns 17.657 ns]
                        change: [-0.1644% -0.0191% +0.1368%] (p = 0.81 > 0.05)
                        No change in performance detected.
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low mild
  10 (10.00%) high mild
  1 (1.00%) high severe
String Creation/SmartString/12
                        time:   [12.497 ns 12.537 ns 12.577 ns]
                        change: [+7.5830% +8.0779% +8.4688%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Creation/std::String/12
                        time:   [42.521 ns 42.750 ns 42.952 ns]
                        change: [+3.9054% +4.7814% +5.5152%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Creation/CompactString/22
                        time:   [9.2276 ns 9.2523 ns 9.2793 ns]
                        change: [+12.856% +13.124% +13.385%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Creation/SmolStr/22
                        time:   [11.955 ns 11.962 ns 11.969 ns]
                        change: [-7.4345% -7.1528% -6.8351%] (p = 0.00 < 0.05)
                        Performance has improved.
String Creation/SmartString/22
                        time:   [14.390 ns 14.399 ns 14.410 ns]
                        change: [+16.512% +16.640% +16.755%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Creation/std::String/22
                        time:   [41.398 ns 41.516 ns 41.654 ns]
                        change: [+3.1017% +3.2091% +3.3485%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  2 (2.00%) high mild
  3 (3.00%) high severe
String Creation/CompactString/23
                        time:   [9.1860 ns 9.1910 ns 9.1967 ns]
                        change: [+12.217% +12.524% +12.718%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  4 (4.00%) high mild
  9 (9.00%) high severe
String Creation/SmolStr/23
                        time:   [54.895 ns 54.925 ns 54.957 ns]
                        change: [-95.111% -95.105% -95.099%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Creation/SmartString/23
                        time:   [12.570 ns 12.577 ns 12.586 ns]
                        change: [+8.8292% +8.9833% +9.1311%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
  12 (12.00%) high mild
String Creation/std::String/23
                        time:   [41.526 ns 41.590 ns 41.674 ns]
                        change: [+2.4276% +2.6310% +2.8241%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) low severe
  1 (1.00%) high mild
  11 (11.00%) high severe
String Creation/CompactString/24
                        time:   [4.1916 ns 4.1990 ns 4.2110 ns]
                        change: [+25.248% +25.418% +25.643%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) low severe
  2 (2.00%) low mild
  1 (1.00%) high mild
  2 (2.00%) high severe
String Creation/SmolStr/24
                        time:   [54.638 ns 54.668 ns 54.698 ns]
                        change: [-0.8679% -0.6924% -0.5275%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
  6 (6.00%) low mild
  1 (1.00%) high mild
String Creation/SmartString/24
                        time:   [90.174 ns 90.209 ns 90.252 ns]
                        change: [+62.425% +62.654% +62.960%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 15 outliers among 100 measurements (15.00%)
  10 (10.00%) high mild
  5 (5.00%) high severe
String Creation/std::String/24
                        time:   [42.022 ns 42.194 ns 42.405 ns]
                        change: [+4.4290% +4.8708% +5.3536%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Creation/CompactString/25
                        time:   [42.788 ns 42.821 ns 42.859 ns]
                        change: [-10.260% -9.8109% -9.3558%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
  6 (6.00%) high mild
  4 (4.00%) high severe
String Creation/SmolStr/25
                        time:   [56.749 ns 56.798 ns 56.848 ns]
                        change: [+3.6183% +3.7779% +3.9278%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Creation/SmartString/25
                        time:   [90.454 ns 90.502 ns 90.560 ns]
                        change: [+62.164% +62.302% +62.439%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 9 outliers among 100 measurements (9.00%)
  3 (3.00%) high mild
  6 (6.00%) high severe
String Creation/std::String/25
                        time:   [40.828 ns 41.038 ns 41.267 ns]
                        change: [-2.8988% -2.6967% -2.4580%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low severe
  2 (2.00%) low mild
  3 (3.00%) high mild
  6 (6.00%) high severe
String Creation/CompactString/50
                        time:   [45.434 ns 45.451 ns 45.470 ns]
                        change: [-10.794% -10.303% -9.8529%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) high mild
  5 (5.00%) high severe
String Creation/SmolStr/50
                        time:   [57.263 ns 57.291 ns 57.318 ns]
                        change: [-0.3539% -0.1864% -0.0328%] (p = 0.02 < 0.05)
                        Change within noise threshold.
Found 9 outliers among 100 measurements (9.00%)
  6 (6.00%) low mild
  3 (3.00%) high mild
String Creation/SmartString/50
                        time:   [97.215 ns 97.319 ns 97.447 ns]
                        change: [+62.544% +63.285% +63.822%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  8 (8.00%) high severe
String Creation/std::String/50
                        time:   [45.559 ns 45.658 ns 45.769 ns]
                        change: [-2.4544% -1.8089% -1.2262%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 11 outliers among 100 measurements (11.00%)
  11 (11.00%) high severe

String Cloning/CompactString/0
                        time:   [2.6293 ns 2.6296 ns 2.6300 ns]
                        change: [+10.220% +10.582% +11.028%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) low mild
  2 (2.00%) high severe
String Cloning/SmolStr/0
                        time:   [9.8086 ns 9.8134 ns 9.8191 ns]
                        change: [-2.0163% -1.9010% -1.7913%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  1 (1.00%) low mild
  5 (5.00%) high mild
  9 (9.00%) high severe
String Cloning/SmartString/0
                        time:   [2.8645 ns 2.8651 ns 2.8658 ns]
                        change: [-32.690% -32.648% -32.609%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  2 (2.00%) high mild
  1 (1.00%) high severe
String Cloning/std::String/0
                        time:   [4.2407 ns 4.2443 ns 4.2483 ns]
                        change: [+11.086% +11.549% +11.830%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Cloning/CompactString/11
                        time:   [2.6300 ns 2.6303 ns 2.6306 ns]
                        change: [+10.445% +10.859% +11.369%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) low mild
  3 (3.00%) high severe
String Cloning/SmolStr/11
                        time:   [9.8127 ns 9.8195 ns 9.8276 ns]
                        change: [-1.6406% -1.5352% -1.4245%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  9 (9.00%) high mild
  3 (3.00%) high severe
String Cloning/SmartString/11
                        time:   [2.8666 ns 2.8672 ns 2.8677 ns]
                        change: [-33.096% -32.715% -32.508%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild
String Cloning/std::String/11
                        time:   [41.492 ns 41.720 ns 41.978 ns]
                        change: [+2.4748% +3.0811% +3.5570%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 19 outliers among 100 measurements (19.00%)
  3 (3.00%) low mild
  16 (16.00%) high severe
String Cloning/CompactString/12
                        time:   [2.6293 ns 2.6301 ns 2.6310 ns]
                        change: [+10.173% +10.478% +10.889%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  11 (11.00%) high mild
  2 (2.00%) high severe
String Cloning/SmolStr/12
                        time:   [9.8203 ns 9.8315 ns 9.8440 ns]
                        change: [-1.4658% -1.3401% -1.2133%] (p = 0.00 < 0.05)
                        Performance has improved.
String Cloning/SmartString/12
                        time:   [2.8658 ns 2.8665 ns 2.8671 ns]
                        change: [-32.605% -32.562% -32.525%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 3 outliers among 100 measurements (3.00%)
  3 (3.00%) high mild
String Cloning/std::String/12
                        time:   [42.333 ns 42.644 ns 42.925 ns]
                        change: [+1.4317% +2.1176% +2.8483%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Cloning/CompactString/22
                        time:   [2.6287 ns 2.6291 ns 2.6295 ns]
                        change: [+10.321% +10.768% +11.286%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  2 (2.00%) high mild
  8 (8.00%) high severe
String Cloning/SmolStr/22
                        time:   [9.8011 ns 9.8080 ns 9.8157 ns]
                        change: [-1.8707% -1.7702% -1.6716%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 17 outliers among 100 measurements (17.00%)
  2 (2.00%) low mild
  7 (7.00%) high mild
  8 (8.00%) high severe
String Cloning/SmartString/22
                        time:   [2.8663 ns 2.8671 ns 2.8679 ns]
                        change: [-32.571% -32.535% -32.500%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe
String Cloning/std::String/22
                        time:   [42.588 ns 42.807 ns 42.992 ns]
                        change: [+4.6679% +5.0824% +5.5787%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Cloning/CompactString/23
                        time:   [2.6293 ns 2.6298 ns 2.6303 ns]
                        change: [+10.152% +10.309% +10.533%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe
String Cloning/SmolStr/23
                        time:   [18.225 ns 18.272 ns 18.328 ns]
                        change: [+0.9691% +1.2213% +1.4551%] (p = 0.00 < 0.05)
                        Change within noise threshold.
String Cloning/SmartString/23
                        time:   [2.8646 ns 2.8653 ns 2.8660 ns]
                        change: [-32.588% -32.553% -32.520%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild
String Cloning/std::String/23
                        time:   [41.269 ns 41.279 ns 41.287 ns]
                        change: [+2.3093% +2.4432% +2.5830%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  3 (3.00%) high severe
String Cloning/CompactString/24
                        time:   [2.6281 ns 2.6288 ns 2.6296 ns]
                        change: [+10.320% +10.791% +11.362%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 7 outliers among 100 measurements (7.00%)
  2 (2.00%) low mild
  1 (1.00%) high mild
  4 (4.00%) high severe
String Cloning/SmolStr/24
                        time:   [18.125 ns 18.138 ns 18.152 ns]
                        change: [-0.6023% -0.4565% -0.3153%] (p = 0.00 < 0.05)
                        Change within noise threshold.
String Cloning/SmartString/24
                        time:   [51.427 ns 51.511 ns 51.590 ns]
                        change: [-2.6765% -2.5392% -2.4255%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) low severe
  5 (5.00%) low mild
String Cloning/std::String/24
                        time:   [41.276 ns 41.286 ns 41.295 ns]
                        change: [+1.1826% +1.5611% +1.8849%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  3 (3.00%) low severe
  1 (1.00%) low mild
  4 (4.00%) high mild
String Cloning/CompactString/25
                        time:   [56.056 ns 56.260 ns 56.453 ns]
                        change: [+18.740% +19.216% +19.646%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 8 outliers among 100 measurements (8.00%)
  6 (6.00%) low severe
  2 (2.00%) high mild
String Cloning/SmolStr/25
                        time:   [18.111 ns 18.121 ns 18.132 ns]
                        change: [-0.4216% -0.3386% -0.2594%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 9 outliers among 100 measurements (9.00%)
  1 (1.00%) low mild
  8 (8.00%) high mild
String Cloning/SmartString/25
                        time:   [51.700 ns 51.785 ns 51.889 ns]
                        change: [-2.4556% -2.0972% -1.6689%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 9 outliers among 100 measurements (9.00%)
  3 (3.00%) low mild
  6 (6.00%) high severe
String Cloning/std::String/25
                        time:   [42.184 ns 42.190 ns 42.196 ns]
                        change: [+3.4101% +3.5995% +3.8569%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  1 (1.00%) high mild
  5 (5.00%) high severe
String Cloning/CompactString/50
                        time:   [56.634 ns 56.679 ns 56.714 ns]
                        change: [+6.7306% +7.1808% +7.5973%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Cloning/SmolStr/50
                        time:   [18.092 ns 18.102 ns 18.115 ns]
                        change: [-0.2866% -0.1911% -0.1041%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 8 outliers among 100 measurements (8.00%)
  8 (8.00%) high mild
String Cloning/SmartString/50
                        time:   [57.010 ns 57.112 ns 57.212 ns]
                        change: [+2.0676% +2.1870% +2.3112%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 14 outliers among 100 measurements (14.00%)
  4 (4.00%) low severe
  4 (4.00%) low mild
  6 (6.00%) high mild
String Cloning/std::String/50
                        time:   [46.817 ns 47.054 ns 47.341 ns]
                        change: [-1.9214% -1.1341% -0.3839%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 3 outliers among 100 measurements (3.00%)
  2 (2.00%) high mild
  1 (1.00%) high severe

String Access/CompactString/0
                        time:   [465.90 ps 466.13 ps 466.42 ps]
                        change: [-35.116% -35.073% -35.031%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  12 (12.00%) high mild
String Access/SmolStr/0 time:   [706.62 ps 707.46 ps 708.36 ps]
                        change: [-1.4960% -1.4379% -1.3596%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 10 outliers among 100 measurements (10.00%)
  9 (9.00%) high mild
  1 (1.00%) high severe
String Access/SmartString/0
                        time:   [2.3750 ns 2.3756 ns 2.3763 ns]
                        change: [+65.829% +66.376% +67.399%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
  1 (1.00%) high mild
  1 (1.00%) high severe
String Access/std::String/0
                        time:   [466.02 ps 466.25 ps 466.53 ps]
                        change: [-1.3381% -1.2638% -1.1895%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
  1 (1.00%) low mild
  6 (6.00%) high mild
  9 (9.00%) high severe
String Access/CompactString/11
                        time:   [466.79 ps 467.04 ps 467.33 ps]
                        change: [-35.000% -34.958% -34.914%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) low mild
  3 (3.00%) high mild
  10 (10.00%) high severe
String Access/SmolStr/11
                        time:   [705.04 ps 705.50 ps 706.02 ps]
                        change: [-1.7985% -1.7260% -1.6602%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  7 (7.00%) high mild
  8 (8.00%) high severe
String Access/SmartString/11
                        time:   [2.3755 ns 2.3760 ns 2.3766 ns]
                        change: [+65.685% +66.234% +67.259%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  8 (8.00%) high mild
  2 (2.00%) high severe
String Access/std::String/11
                        time:   [466.53 ps 466.76 ps 467.02 ps]
                        change: [-1.6015% -1.5372% -1.4712%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  3 (3.00%) high mild
  9 (9.00%) high severe
String Access/CompactString/12
                        time:   [467.87 ps 468.56 ps 469.37 ps]
                        change: [-35.214% -34.954% -34.760%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
  7 (7.00%) high mild
  1 (1.00%) high severe
String Access/SmolStr/12
                        time:   [704.84 ps 705.34 ps 705.90 ps]
                        change: [-1.7695% -1.6903% -1.6187%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 16 outliers among 100 measurements (16.00%)
  2 (2.00%) high mild
  14 (14.00%) high severe
String Access/SmartString/12
                        time:   [2.3754 ns 2.3759 ns 2.3764 ns]
                        change: [+65.894% +66.451% +67.479%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  3 (3.00%) low severe
  1 (1.00%) low mild
  3 (3.00%) high mild
  3 (3.00%) high severe
String Access/std::String/12
                        time:   [466.38 ps 466.75 ps 467.18 ps]
                        change: [-1.4087% -1.3436% -1.2684%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  10 (10.00%) high mild
  2 (2.00%) high severe
String Access/CompactString/22
                        time:   [466.78 ps 467.02 ps 467.29 ps]
                        change: [-35.190% -35.080% -34.999%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 14 outliers among 100 measurements (14.00%)
  9 (9.00%) high mild
  5 (5.00%) high severe
String Access/SmolStr/22
                        time:   [704.90 ps 705.37 ps 705.91 ps]
                        change: [-1.9027% -1.8077% -1.7272%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 23 outliers among 100 measurements (23.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  5 (5.00%) high mild
  14 (14.00%) high severe
String Access/SmartString/22
                        time:   [2.3781 ns 2.3798 ns 2.3816 ns]
                        change: [+65.942% +66.037% +66.126%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 14 outliers among 100 measurements (14.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  11 (11.00%) high mild
  1 (1.00%) high severe
String Access/std::String/22
                        time:   [466.04 ps 466.31 ps 466.61 ps]
                        change: [-1.5417% -1.4645% -1.3889%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  1 (1.00%) low mild
  9 (9.00%) high mild
  2 (2.00%) high severe
String Access/CompactString/23
                        time:   [466.93 ps 467.23 ps 467.58 ps]
                        change: [-35.015% -34.961% -34.911%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  1 (1.00%) low mild
  4 (4.00%) high mild
  10 (10.00%) high severe
String Access/SmolStr/23
                        time:   [466.85 ps 467.31 ps 467.82 ps]
                        change: [-34.867% -34.822% -34.768%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) high mild
  13 (13.00%) high severe
String Access/SmartString/23
                        time:   [2.3773 ns 2.3787 ns 2.3802 ns]
                        change: [+65.893% +66.171% +66.626%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
String Access/std::String/23
                        time:   [466.06 ps 466.32 ps 466.62 ps]
                        change: [-1.5649% -1.4830% -1.4008%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) low mild
  5 (5.00%) high mild
  8 (8.00%) high severe
String Access/CompactString/24
                        time:   [466.95 ps 467.26 ps 467.63 ps]
                        change: [-34.964% -34.915% -34.866%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 13 outliers among 100 measurements (13.00%)
  12 (12.00%) high mild
  1 (1.00%) high severe
String Access/SmolStr/24
                        time:   [468.68 ps 469.57 ps 470.49 ps]
                        change: [-39.828% -38.924% -38.007%] (p = 0.00 < 0.05)
                        Performance has improved.
String Access/SmartString/24
                        time:   [2.5903 ns 2.5942 ns 2.5987 ns]
                        change: [+333.13% +335.10% +336.49%] (p = 0.00 < 0.05)
                        Performance has regressed.
String Access/std::String/24
                        time:   [467.58 ps 468.55 ps 469.69 ps]
                        change: [-1.1004% -0.9359% -0.7504%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 11 outliers among 100 measurements (11.00%)
  11 (11.00%) high mild
String Access/CompactString/25
                        time:   [467.99 ps 469.22 ps 470.49 ps]
                        change: [-50.989% -50.850% -50.740%] (p = 0.00 < 0.05)
                        Performance has improved.
String Access/SmolStr/25
                        time:   [468.11 ps 469.09 ps 470.20 ps]
                        change: [-34.662% -34.559% -34.457%] (p = 0.00 < 0.05)
                        Performance has improved.
String Access/SmartString/25
                        time:   [2.5824 ns 2.5840 ns 2.5859 ns]
                        change: [+331.98% +332.55% +333.41%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) low mild
  2 (2.00%) high mild
  10 (10.00%) high severe
String Access/std::String/25
                        time:   [466.66 ps 467.15 ps 467.70 ps]
                        change: [-1.1602% -1.0435% -0.9294%] (p = 0.00 < 0.05)
                        Change within noise threshold.
String Access/CompactString/50
                        time:   [468.35 ps 470.97 ps 475.13 ps]
                        change: [-51.266% -51.137% -50.964%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
  3 (3.00%) high mild
  1 (1.00%) high severe
String Access/SmolStr/50
                        time:   [466.98 ps 467.28 ps 467.62 ps]
                        change: [-34.837% -34.800% -34.758%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 17 outliers among 100 measurements (17.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  3 (3.00%) high mild
  10 (10.00%) high severe
String Access/SmartString/50
                        time:   [2.5831 ns 2.5844 ns 2.5861 ns]
                        change: [+331.89% +332.58% +333.07%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 20 outliers among 100 measurements (20.00%)
  2 (2.00%) low mild
  5 (5.00%) high mild
  13 (13.00%) high severe
String Access/std::String/50
                        time:   [466.27 ps 466.50 ps 466.78 ps]
                        change: [-1.4350% -1.3584% -1.2871%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 17 outliers among 100 measurements (17.00%)
  2 (2.00%) low severe
  2 (2.00%) low mild
  2 (2.00%) high mild
  11 (11.00%) high severe

     Running benches\random.rs (D:\.rust\target\release\deps\random-de37f411d6cbb093.exe)
if statement min        time:   [933.79 ps 934.25 ps 934.85 ps]
                        change: [+0.1273% +0.2352% +0.3360%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 18 outliers among 100 measurements (18.00%)
  1 (1.00%) low severe
  3 (3.00%) low mild
  2 (2.00%) high mild
  12 (12.00%) high severe

cmp min                 time:   [936.46 ps 939.57 ps 944.50 ps]
                        change: [+0.1323% +0.2997% +0.4872%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe

logarithm/u32::MIN      time:   [233.21 ps 233.33 ps 233.47 ps]
                        change: [-99.565% -99.563% -99.561%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 20 outliers among 100 measurements (20.00%)
  1 (1.00%) low severe
  2 (2.00%) low mild
  3 (3.00%) high mild
  14 (14.00%) high severe

logarithm/u32::MAX / 2  time:   [233.16 ps 233.28 ps 233.41 ps]
                        change: [-97.559% -97.558% -97.556%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 18 outliers among 100 measurements (18.00%)
  1 (1.00%) low severe
  5 (5.00%) high mild
  12 (12.00%) high severe

logarithm/u32::MAX      time:   [233.36 ps 233.53 ps 233.73 ps]
                        change: [-97.568% -97.563% -97.560%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

match_statement/u32::MIN
                        time:   [233.62 ps 233.79 ps 233.99 ps]
                        change: [-50.957% -50.902% -50.845%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 13 outliers among 100 measurements (13.00%)
  13 (13.00%) high mild

match_statement/u32::MAX / 2
                        time:   [233.32 ps 233.46 ps 233.62 ps]
                        change: [-85.886% -85.865% -85.845%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 15 outliers among 100 measurements (15.00%)
  2 (2.00%) low mild
  5 (5.00%) high mild
  8 (8.00%) high severe

match_statement/u32::MAX
                        time:   [233.06 ps 233.20 ps 233.35 ps]
                        change: [-85.911% -85.888% -85.865%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 12 outliers among 100 measurements (12.00%)
  12 (12.00%) high mild

Conclusion: these benchmarks are noisy. Trying to pull any conclusions from them as-is is very difficult.

CompactString SmolStr SmartString std::String
String Creation/0 🔴 regressed 🟢 improved 🔴 regressed 🔴 regressed
String Creation/11 🔴 regressed 🔴 regressed 🔴 regressed 🔴 regressed
String Creation/12 🔴 regressed ⚪ no change 🔴 regressed 🔴 regressed
String Creation/22 🔴 regressed 🟢 improved 🔴 regressed 🔴 regressed
String Creation/23 🔴 regressed 🟢 improved 🔴 regressed 🔴 regressed
String Creation/24 🔴 regressed ⚪ in noise 🔴 regressed 🔴 regressed
String Creation/25 🟢 improved 🔴 regressed 🔴 regressed 🟢 improved
String Creation/50 🟢 improved ⚪ in noise 🔴 regressed 🟢 improved
String Cloning/0 🔴 regressed 🔴 regressed 🟢 improved 🔴 regressed
String Cloning/11 🔴 regressed 🟢 improved 🟢 improved 🔴 regressed
String Cloning/12 🔴 regressed 🟢 improved 🟢 improved 🔴 regressed
String Cloning/22 🔴 regressed 🟢 improved 🟢 improved 🔴 regressed
String Cloning/23 🔴 regressed ⚪ in noise 🟢 improved 🔴 regressed
String Cloning/24 🔴 regressed ⚪ in noise 🟢 improved 🔴 regressed
String Cloning/25 🔴 regressed ⚪ in noise 🟢 improved 🔴 regressed
String Cloning/50 🔴 regresed ⚪ in noise 🔴 regressed ⚪ in noise
String Access/0 🟢 improved 🟢 improved 🔴 regressed 🟢 improved
String Access/11 🟢 improved 🟢 improved 🔴 regressed 🟢 improved
String Access/12 🟢 improved 🟢 improved 🔴 regressed 🟢 improved
String Access/22 🟢 improved 🟢 improved 🔴 regressed 🟢 improved
String Access/23 🟢 improved 🟢 improved 🔴 regressed 🟢 improved
String Access/24 🟢 improved 🟢 improved 🔴 regressed ⚪ in noise
String Access/25 🟢 improved 🟢 improved 🔴 regressed ⚪ in noise
String Access/50 🟢 improved 🟢 improved 🔴 regressed 🟢 improved

@CAD97
Copy link
Contributor Author

CAD97 commented Jun 9, 2022

For comparison's sake, I did a small mechanical change to Repr's definition

diff --git a/compact_str/src/repr/mod.rs b/compact_str/src/repr/mod.rs
index 69ebab2..53dc4b8 100644
--- a/compact_str/src/repr/mod.rs
+++ b/compact_str/src/repr/mod.rs
@@ -1,8 +1,11 @@
 use std::borrow::Cow;
-use std::fmt;
 use std::iter::Extend;
 use std::mem::ManuallyDrop;
 use std::str::Utf8Error;
+use std::{
+    fmt,
+    mem,
+};
 
 #[cfg(feature = "bytes")]
 mod bytes;
@@ -41,13 +44,9 @@ pub(crate) struct Repr(
     // First in the representation is a pointer, which is a pointer here to
     // ensure that it carries provenance properly;
     *const (),
-    // second is a usize worth of data;
-    usize,
-    // and third comes another usize of data, but we break it into parts...
-    #[cfg(target_pointer_width = "64")] u32,
-    u16,
-    u8,
-    // ...such that we can mark the last byte as nonmax.
+    // second is padding to size...
+    [u8; PADDING_SIZE - mem::size_of::<*const ()>()],
+    // ...and the last byte as nonmax.
     NonMaxU8,
 );

And got the following performance delta to without the change:

criterion output
inline length           time:   [955.36 ps 955.56 ps 955.76 ps]
                        change: [-19.398% -19.326% -19.266%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) low mild
  2 (2.00%) high mild
  1 (1.00%) high severe

heap length             time:   [716.29 ps 716.44 ps 716.59 ps]
                        change: [-0.0688% +0.0018% +0.0853%] (p = 0.96 > 0.05)
                        No change in performance detected.
Found 10 outliers among 100 measurements (10.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  4 (4.00%) high mild
  4 (4.00%) high severe

very long heap length   time:   [705.32 ps 706.00 ps 706.71 ps]
                        change: [-0.0396% +0.0467% +0.1329%] (p = 0.28 > 0.05)
                        No change in performance detected.
Found 8 outliers among 100 measurements (8.00%)
  7 (7.00%) high mild
  1 (1.00%) high severe

reserve small           time:   [2.7138 ns 2.7145 ns 2.7153 ns]
                        change: [-0.6046% -0.4435% -0.3124%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 17 outliers among 100 measurements (17.00%)
  2 (2.00%) low severe
  4 (4.00%) low mild
  4 (4.00%) high mild
  7 (7.00%) high severe

reserve large           time:   [56.879 ns 56.938 ns 57.008 ns]
                        change: [+10.238% +10.375% +10.510%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  4 (4.00%) high mild

clone small             time:   [5.6410 ns 5.6450 ns 5.6499 ns]
                        change: [+133.52% +133.72% +133.93%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 16 outliers among 100 measurements (16.00%)
  3 (3.00%) high mild
  13 (13.00%) high severe

clone large             time:   [125.01 ns 125.24 ns 125.47 ns]
                        change: [-0.4983% -0.2266% +0.0378%] (p = 0.09 > 0.05)
                        No change in performance detected.
Found 11 outliers among 100 measurements (11.00%)
  11 (11.00%) high mild

extend chars empty      time:   [40.424 ns 40.459 ns 40.513 ns]
                        change: [-1.3961% -1.1172% -0.8471%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 11 outliers among 100 measurements (11.00%)
  2 (2.00%) high mild
  9 (9.00%) high severe

extend chars short      time:   [31.584 ns 31.591 ns 31.600 ns]
                        change: [+2.5660% +2.6709% +2.7482%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 6 outliers among 100 measurements (6.00%)
  4 (4.00%) high mild
  2 (2.00%) high severe

extend chars inline to heap, 20
                        time:   [110.80 ns 110.84 ns 110.87 ns]
                        change: [+2.4956% +2.7006% +2.8853%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 5 outliers among 100 measurements (5.00%)
  2 (2.00%) low mild
  3 (3.00%) high mild

extend chars heap, 20   time:   [155.44 ns 155.52 ns 155.62 ns]
                        change: [-2.8383% -2.6749% -2.5030%] (p = 0.00 < 0.05)
                        Performance has improved.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

compact_str_from_string_inline
                        time:   [36.111 ns 36.152 ns 36.192 ns]
                        change: [-0.8404% -0.6207% -0.3927%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high mild

compact_str_from_string_heap
                        time:   [36.087 ns 36.138 ns 36.188 ns]
                        change: [-0.3988% -0.2182% -0.0345%] (p = 0.02 < 0.05)
                        Change within noise threshold.

compact_str_from_string_heap_long
                        time:   [36.166 ns 36.906 ns 37.602 ns]
                        change: [-2.8487% +0.7699% +4.8731%] (p = 0.71 > 0.05)
                        No change in performance detected.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

std string short length time:   [705.03 ps 705.43 ps 705.90 ps]
                        change: [-0.4994% -0.3833% -0.2691%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 13 outliers among 100 measurements (13.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  9 (9.00%) high severe

std string long length  time:   [711.98 ps 712.92 ps 713.80 ps]
                        change: [+0.5535% +0.6845% +0.8197%] (p = 0.00 < 0.05)
                        Change within noise threshold.

std string very long length
                        time:   [703.77 ps 704.13 ps 704.57 ps]
                        change: [-0.0292% +0.0663% +0.1537%] (p = 0.19 > 0.05)
                        No change in performance detected.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high mild

std str reserve small   time:   [42.922 ns 43.046 ns 43.165 ns]
                        change: [+3.9538% +4.2785% +4.6597%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe

std str reserve large   time:   [48.497 ns 48.635 ns 48.798 ns]
                        change: [+8.8989% +9.2362% +9.5888%] (p = 0.00 < 0.05)
                        Performance has regressed.

std str clone small     time:   [41.246 ns 41.255 ns 41.265 ns]
                        change: [+1.0468% +1.2118% +1.3729%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  1 (1.00%) low severe
  1 (1.00%) low mild
  2 (2.00%) high severe

std str clone large     time:   [133.01 ns 133.10 ns 133.20 ns]
                        change: [+4.8708% +5.0206% +5.1639%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
  2 (2.00%) high severe

std str extend chars empty
                        time:   [39.236 ns 39.248 ns 39.261 ns]
                        change: [+0.1420% +0.2749% +0.4036%] (p = 0.00 < 0.05)
                        Change within noise threshold.
Found 14 outliers among 100 measurements (14.00%)
  14 (14.00%) high severe

std str extend chars short
                        time:   [125.20 ns 125.52 ns 125.96 ns]
                        change: [-0.1842% +0.1558% +0.6576%] (p = 0.52 > 0.05)
                        No change in performance detected.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe

std str extend chars 20 time:   [138.06 ns 138.25 ns 138.42 ns]
                        change: [+1.1308% +1.6604% +2.1751%] (p = 0.00 < 0.05)
                        Performance has regressed.

     Running benches\compact_str.rs (D:\.rust\target\release\deps\compact_str-fce84625a3b9d994.exe)
Gnuplot not found, using plotters backend
CompactString::new/0 chars
                        time:   [5.3895 ns 5.3927 ns 5.3963 ns]
                        change: [+154.21% +154.40% +154.60%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  1 (1.00%) low mild
  6 (6.00%) high mild
  3 (3.00%) high severe

CompactString::new/16 chars
                        time:   [12.581 ns 12.589 ns 12.598 ns]
                        change: [+38.742% +38.846% +38.949%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  2 (2.00%) low mild
  4 (4.00%) high mild
  7 (7.00%) high severe

CompactString::new/24 chars
                        time:   [7.9204 ns 7.9314 ns 7.9429 ns]
                        change: [+89.400% +89.704% +90.017%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 5 outliers among 100 measurements (5.00%)
  1 (1.00%) low mild
  3 (3.00%) high mild
  1 (1.00%) high severe

CompactString::new/59 chars
                        time:   [49.549 ns 49.631 ns 49.736 ns]
                        change: [+4.6773% +5.4264% +6.2312%] (p = 0.00 < 0.05)
                        Performance has regressed.

String::new/59 chars    time:   [44.113 ns 44.254 ns 44.395 ns]
                        change: [+1.8368% +2.2841% +2.7247%] (p = 0.00 < 0.05)
                        Performance has regressed.

u8::to_compact_string/42
                        time:   [13.286 ns 13.324 ns 13.363 ns]
                        change: [+28.076% +28.320% +28.577%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 11 outliers among 100 measurements (11.00%)
  11 (11.00%) high mild

u32::to_compact_string/54321
                        time:   [14.648 ns 14.679 ns 14.711 ns]
                        change: [+56.928% +57.151% +57.373%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 13 outliers among 100 measurements (13.00%)
  13 (13.00%) high mild

isize::to_compact_string/-9999999
                        time:   [16.403 ns 16.435 ns 16.468 ns]
                        change: [+42.354% +42.601% +42.845%] (p = 0.00 < 0.05)
                        Performance has regressed.

u64::to_compact_string/MAX
                        time:   [18.876 ns 18.894 ns 18.911 ns]
                        change: [+20.302% +20.581% +20.914%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 10 outliers among 100 measurements (10.00%)
  1 (1.00%) high mild
  9 (9.00%) high severe

Benchmarking u128::to_compact_string/12345678909876543210123456789: Collecting 100 samples in estimated 5.0003                                                                                                                
u128::to_compact_string/12345678909876543210123456789
                        time:   [77.316 ns 77.373 ns 77.428 ns]
                        change: [+6.3724% +6.7311% +7.3509%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 4 outliers among 100 measurements (4.00%)
  2 (2.00%) high mild
  2 (2.00%) high severe

bool::to_compact_string/true
                        time:   [6.2999 ns 6.3151 ns 6.3295 ns]
                        change: [+126.67% +127.12% +127.56%] (p = 0.00 < 0.05)
                        Performance has regressed.

Benchmarking String::to_compact_string/hello world!: Collecting 100 samples in estimated 5.0000 s (378M iterati                                                                                                               
String::to_compact_string/hello world!
                        time:   [13.144 ns 13.174 ns 13.209 ns]
                        change: [+41.181% +41.638% +42.082%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 1 outliers among 100 measurements (1.00%)
  1 (1.00%) high severe

char::to_compact_string/a
                        time:   [13.943 ns 13.955 ns 13.969 ns]
                        change: [+28.707% +28.819% +28.934%] (p = 0.00 < 0.05)
                        Performance has regressed.
Found 18 outliers among 100 measurements (18.00%)
  14 (14.00%) high mild
  4 (4.00%) high severe

@ParkMyCar
Copy link
Owner

ParkMyCar commented Jun 11, 2022

@CAD97, thanks for continuously staying on top of this! I plan to take a closer look at everything this weekend, and probs merge something to make progress here

@ParkMyCar
Copy link
Owner

Completed in #105

@ParkMyCar ParkMyCar closed this Jun 17, 2022
@CAD97 CAD97 deleted the smol-option branch June 18, 2022 15:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants