ruby/benchmark/string_gsub.yml
2026-05-14 08:46:20 -07:00

55 lines
1.2 KiB
YAML

prelude: |
# frozen_string_literal: true
STR = ((("a" * 31) + "<") * 1000).freeze
STR_UNICODE = ((("a" * 30) + "\u2028") * 1000).freeze
ESCAPED_CHARS_BINARY = {
"\u2028".b => '\u2028'.b,
"\u2029".b => '\u2029'.b,
">".b => '\u003e'.b.freeze,
"<".b => '\u003c'.b.freeze,
"&".b => '\u0026'.b.freeze,
}
BINARY_PATTERN = Regexp.union(ESCAPED_CHARS_BINARY.keys)
ESCAPED_CHARS = {
"\u2028" => '\u2028',
"\u2029" => '\u2029',
">" => '\u003e',
"<" => '\u003c',
"&" => '\u0026',
}
ESCAPE_PATTERN = Regexp.union(ESCAPED_CHARS.keys)
NO_MATCH_SHARED_STRING = ("a" * 100_000).freeze
benchmark:
gsub_no_match_shared: |
str = NO_MATCH_SHARED_STRING.dup
str.gsub!("z", "x")
str
sub_no_match_shared: |
str = NO_MATCH_SHARED_STRING.dup
str.sub!("z", "x")
str
escape: |
str = STR.dup
str.gsub!(ESCAPE_PATTERN, ESCAPED_CHARS)
str
escape_bin: |
str = STR.b
str.gsub!(BINARY_PATTERN, ESCAPED_CHARS_BINARY)
str.force_encoding(Encoding::UTF_8)
escape_utf8: |
str = STR_UNICODE.dup
str.gsub!(ESCAPE_PATTERN, ESCAPED_CHARS)
str
escape_utf8_bin: |
str = STR_UNICODE.b
str.gsub!(BINARY_PATTERN, ESCAPED_CHARS_BINARY)
str.force_encoding(Encoding::UTF_8)