mirror of
https://github.com/Shopify/liquid.git
synced 2026-09-12 23:40:45 -07:00
* Speed up lexing * Bump msrv to 3.0 (from 2.7) * Normalize test for ruby-head compat * Fix bug when parsing negative numbers
63 lines
1.1 KiB
Ruby
63 lines
1.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require "benchmark/ips"
|
|
|
|
# benchmark liquid lexing
|
|
|
|
require 'liquid'
|
|
|
|
RubyVM::YJIT.enable
|
|
|
|
EXPRESSIONS = [
|
|
"foo[1..2].baz",
|
|
"12.0",
|
|
"foo.bar.based",
|
|
"21 - 62",
|
|
"foo.bar.baz",
|
|
"foo > 12",
|
|
"foo < 12",
|
|
"foo <= 12",
|
|
"foo >= 12",
|
|
"foo <> 12",
|
|
"foo == 12",
|
|
"foo != 12",
|
|
"foo contains 12",
|
|
"foo contains 'bar'",
|
|
"foo != 'bar'",
|
|
"'foo' contains 'bar'",
|
|
'234089',
|
|
"foo | default: -1",
|
|
]
|
|
|
|
EXPRESSIONS.each do |expr|
|
|
lexer_1_result = Liquid::Lexer1.new(expr).tokenize
|
|
lexer_2_result = Liquid::Lexer2.new(expr).tokenize
|
|
|
|
next if lexer_1_result == lexer_2_result
|
|
|
|
warn "Lexer1 and Lexer2 results are different for expression: #{expr}"
|
|
warn "expected: #{lexer_1_result}"
|
|
warn "got: #{lexer_2_result}"
|
|
abort
|
|
end
|
|
|
|
Benchmark.ips do |x|
|
|
x.config(time: 10, warmup: 5)
|
|
|
|
x.report("Liquid::Lexer1#tokenize") do
|
|
EXPRESSIONS.each do |expr|
|
|
l = Liquid::Lexer1.new(expr)
|
|
l.tokenize
|
|
end
|
|
end
|
|
|
|
x.report("Liquid::Lexer2#tokenize") do
|
|
EXPRESSIONS.each do |expr|
|
|
l = Liquid::Lexer2.new(expr)
|
|
l.tokenize
|
|
end
|
|
end
|
|
|
|
x.compare!
|
|
end
|