Skip to content

Instantly share code, notes, and snippets.

@funny-falcon
Last active October 8, 2023 14:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save funny-falcon/a373bb9e97724713be52c70178981ffa to your computer and use it in GitHub Desktop.
Save funny-falcon/a373bb9e97724713be52c70178981ffa to your computer and use it in GitHub Desktop.
Crystal String.index patch benchmark
was idx now idx diff idx was bidx now bidx diff bidx
small 1 0.068663 0.061373 -10.62 0.071392 0.008054 -88.72
medium 1 0.503822 0.334602 -33.59 0.545443 0.010590 -98.06
big 1 4.697361 2.865704 -38.99 5.058999 0.027877 -99.45
small 2 0.069861 0.053189 -23.86 0.073254 0.034132 -53.41
medium 2 0.509033 0.336184 -33.96 0.548318 0.235357 -57.08
big 2 4.730817 3.117069 -34.11 5.062775 2.049732 -59.51
small 4 0.077225 0.058108 -24.75 0.079227 0.036833 -53.51
medium 4 0.510799 0.340637 -33.31 0.554923 0.242836 -56.24
big 4 4.702089 3.096297 -34.15 5.069510 2.052939 -59.50
small 6 0.078827 0.057426 -27.15 0.080145 0.038325 -52.18
medium 6 0.511529 0.339824 -33.57 0.559667 0.241253 -56.89
big 6 4.700362 3.093604 -34.18 5.076374 2.053248 -59.55
small 10 0.088149 0.077928 -11.60 0.084642 0.070408 -16.82
medium 10 0.517613 0.511492 -1.18 0.568815 0.555601 -2.32
big 10 4.699969 4.695120 -0.10 5.085927 5.074980 -0.22
small 14 0.089366 0.080371 -10.07 0.089447 0.072904 -18.49
medium 14 0.523864 0.511200 -2.42 0.575362 0.556926 -3.20
big 14 4.706731 4.701650 -0.11 5.092217 5.071227 -0.41
small 18 0.095913 0.082964 -13.50 0.098844 0.078447 -20.64
medium 18 0.549657 0.531382 -3.32 0.585257 0.561600 -4.04
big 18 4.744925 4.725939 -0.40 5.100282 5.076517 -0.47
require "benchmark"
b = "b"
ab = "ab"
baba = "baba"
baba6 = "ababaa"
baba10 = "aaababaaaa"
baba14 = "aaaaababaaaaaa"
baba18 = "aaaaaaababaaaaaaaa"
txt_small = "a£€𐍈"*2 + baba18 + "a"*2
txt_medium = "a£€𐍈"*20 + baba18 + "a"*2
txt_big = "a£€𐍈"*200 + baba18 + "a"*2
N = 1000000
i = 0
Benchmark.bm do |x|
x.report("just heat up") do
10000000.times {|j| i = (j.to_f**2.3 % 1e9).to_i }
end
x.report("small 1") do
N.times { i = txt_small.byte_index(b) }
end
x.report("medium 1") do
N.times { i = txt_medium.byte_index(b) }
end
x.report("big 1") do
N.times { i = txt_big.byte_index(b) }
end
x.report("small 2") do
N.times { i = txt_small.byte_index(ab) }
end
x.report("medium 2") do
N.times { i = txt_medium.byte_index(ab) }
end
x.report("big 2") do
N.times { i = txt_big.byte_index(ab) }
end
x.report("small 4") do
N.times { i = txt_small.byte_index(baba) }
end
x.report("medium 4") do
N.times { i = txt_medium.byte_index(baba) }
end
x.report("big 4") do
N.times { i = txt_big.byte_index(baba) }
end
x.report("small 6") do
N.times { i = txt_small.byte_index(baba6) }
end
x.report("medium 6") do
N.times { i = txt_medium.byte_index(baba6) }
end
x.report("big 6") do
N.times { i = txt_big.byte_index(baba6) }
end
x.report("small 10") do
N.times { i = txt_small.byte_index(baba10) }
end
x.report("medium 10") do
N.times { i = txt_medium.byte_index(baba10) }
end
x.report("big 10") do
N.times { i = txt_big.byte_index(baba10) }
end
x.report("small 14") do
N.times { i = txt_small.byte_index(baba14) }
end
x.report("medium 14") do
N.times { i = txt_medium.byte_index(baba14) }
end
x.report("big 14") do
N.times { i = txt_big.byte_index(baba14) }
end
x.report("small 18") do
N.times { i = txt_small.byte_index(baba18) }
end
x.report("medium 18") do
N.times { i = txt_medium.byte_index(baba18) }
end
x.report("big 18") do
N.times { i = txt_big.byte_index(baba18) }
end
end
p i
require "benchmark"
b = "b"
ab = "ab"
baba = "baba"
baba6 = "ababaa"
baba10 = "aaababaaaa"
baba14 = "aaaaababaaaaaa"
baba18 = "aaaaaaababaaaaaaaa"
txt_small = "a£€𐍈"*2 + baba18 + "a"*2
txt_medium = "a£€𐍈"*20 + baba18 + "a"*2
txt_big = "a£€𐍈"*200 + baba18 + "a"*2
N = 1000000
i = 0
Benchmark.bm do |x|
x.report("just heat up") do
10000000.times {|j| i = (j.to_f**2.3 % 1e9).to_i }
end
x.report("small 1") do
N.times { i = txt_small.index(b) }
end
x.report("medium 1") do
N.times { i = txt_medium.index(b) }
end
x.report("big 1") do
N.times { i = txt_big.index(b) }
end
x.report("small 2") do
N.times { i = txt_small.index(ab) }
end
x.report("medium 2") do
N.times { i = txt_medium.index(ab) }
end
x.report("big 2") do
N.times { i = txt_big.index(ab) }
end
x.report("small 4") do
N.times { i = txt_small.index(baba) }
end
x.report("medium 4") do
N.times { i = txt_medium.index(baba) }
end
x.report("big 4") do
N.times { i = txt_big.index(baba) }
end
x.report("small 6") do
N.times { i = txt_small.index(baba6) }
end
x.report("medium 6") do
N.times { i = txt_medium.index(baba6) }
end
x.report("big 6") do
N.times { i = txt_big.index(baba6) }
end
x.report("small 10") do
N.times { i = txt_small.index(baba10) }
end
x.report("medium 10") do
N.times { i = txt_medium.index(baba10) }
end
x.report("big 10") do
N.times { i = txt_big.index(baba10) }
end
x.report("small 14") do
N.times { i = txt_small.index(baba14) }
end
x.report("medium 14") do
N.times { i = txt_medium.index(baba14) }
end
x.report("big 14") do
N.times { i = txt_big.index(baba14) }
end
x.report("small 18") do
N.times { i = txt_small.index(baba18) }
end
x.report("medium 18") do
N.times { i = txt_medium.index(baba18) }
end
x.report("big 18") do
N.times { i = txt_big.index(baba18) }
end
end
p i
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment