mirror of
https://github.com/ruby/ruby.git
synced 2026-07-31 09:25:15 +08:00
55 lines
1.2 KiB
YAML
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)
|