mirror of
https://github.com/ruby/ruby.git
synced 2026-07-30 15:41:06 +08:00
String#casecmp? folds both operands with a Unicode case fold, allocating two new strings, and compares the results. For ASCII-only strings, Unicode case folding is equivalent to ASCII case-insensitive comparison, so the operands can be compared byte-by-byte without allocating anything.
28 lines
991 B
YAML
28 lines
991 B
YAML
prelude: |
|
|
lstr1 = [*"a".."z",*"0".."9"].join("")
|
|
lstr10 = lstr1 * 10
|
|
lstr100 = lstr10 * 10
|
|
lstr1000 = lstr100 * 10
|
|
lnonascii1 = [*"\u{e0}".."\u{ff}"].join("")
|
|
lnonascii10 = lnonascii1 * 10
|
|
lnonascii100 = lnonascii10 * 10
|
|
lnonascii1000 = lnonascii100 * 10
|
|
ustr1 = [*"A".."Z",*"0".."9"].join("")
|
|
ustr10 = ustr1 * 10
|
|
ustr100 = ustr10 * 10
|
|
ustr1000 = ustr100 * 10
|
|
unonascii1 = [*"\u{c0}".."\u{df}"].join("")
|
|
unonascii10 = unonascii1 * 10
|
|
unonascii100 = unonascii10 * 10
|
|
unonascii1000 = unonascii100 * 10
|
|
GC.disable # GC causes a lot of variance
|
|
benchmark:
|
|
casecmp_p-1: lstr1.casecmp?(ustr1)
|
|
casecmp_p-10: lstr10.casecmp?(ustr10)
|
|
casecmp_p-100: lstr100.casecmp?(ustr100)
|
|
casecmp_p-1000: lstr1000.casecmp?(ustr1000)
|
|
casecmp_p-nonascii1: lnonascii1.casecmp?(unonascii1)
|
|
casecmp_p-nonascii10: lnonascii10.casecmp?(unonascii10)
|
|
casecmp_p-nonascii100: lnonascii100.casecmp?(unonascii100)
|
|
casecmp_p-nonascii1000: lnonascii1000.casecmp?(unonascii1000)
|