|
| 1 | +--- |
| 2 | +prelude: | |
| 3 | + require "net/imap" |
| 4 | +
|
| 5 | + def init(n:, d:) |
| 6 | + n = n.to_int |
| 7 | + samples = (1e5.to_i / n).ceil.clamp(1..100) |
| 8 | + domain = 1..(n*d).floor |
| 9 | + $sets = Array.new(samples) { |
| 10 | + set = Net::IMAP::SequenceSet.new |
| 11 | + n.times do set << rand(domain) end |
| 12 | + set |
| 13 | + } |
| 14 | + $idxs = Array.new([10_000, 2 * n].min) { rand(0..n - 1) } |
| 15 | + $lens = Array.new([10_000, n].min) { rand(1..n) } |
| 16 | + $ranges = Array.new([10_000, n * n].min) { |
| 17 | + start = idx |
| 18 | + stop = start.negative? ? rand(start..-1) : rand(start...n) |
| 19 | + start..stop |
| 20 | + } |
| 21 | + end |
| 22 | +
|
| 23 | + def set = $sets.sample |
| 24 | + def idx = $idxs.sample |
| 25 | + def len = $lens.sample |
| 26 | + def range = $ranges.sample |
| 27 | +
|
| 28 | + # warmup |
| 29 | + init n: 100, d: 2 |
| 30 | + 100.times do |
| 31 | + set[idx] |
| 32 | + set[range] |
| 33 | + set[idx, len] |
| 34 | + end |
| 35 | +
|
| 36 | +benchmark: |
| 37 | + |
| 38 | + - { name: "(N= 10 ) set[idx]", prelude: "init(n: 1e1, d: 4.0)", script: "set[idx]" } |
| 39 | + - { name: "(N=100 ) set[idx]", prelude: "init(n: 1e2, d: 4.0)", script: "set[idx]" } |
| 40 | + - { name: "(N= 1K) set[idx]", prelude: "init(n: 1e3, d: 2.0)", script: "set[idx]" } |
| 41 | + - { name: "(N= 10K) set[idx]", prelude: "init(n: 1e4, d: 2.0)", script: "set[idx]" } |
| 42 | + - { name: "(N=100K) set[idx]", prelude: "init(n: 1e5, d: 2.0)", script: "set[idx]" } |
| 43 | + - { name: "(N= 1M) set[idx]", prelude: "init(n: 1e6, d: 1.5)", script: "set[idx]" } |
| 44 | + |
| 45 | + - { name: "(N= 10 ) set[idx, len]", prelude: "init(n: 1e1, d: 4.0)", script: "set[idx, len]" } |
| 46 | + - { name: "(N=100 ) set[idx, len]", prelude: "init(n: 1e2, d: 4.0)", script: "set[idx, len]" } |
| 47 | + - { name: "(N= 1K) set[idx, len]", prelude: "init(n: 1e3, d: 2.0)", script: "set[idx, len]" } |
| 48 | + - { name: "(N= 10K) set[idx, len]", prelude: "init(n: 1e4, d: 2.0)", script: "set[idx, len]" } |
| 49 | + - { name: "(N=100K) set[idx, len]", prelude: "init(n: 1e5, d: 2.0)", script: "set[idx, len]" } |
| 50 | + - { name: "(N= 1M) set[idx, len]", prelude: "init(n: 1e6, d: 1.5)", script: "set[idx, len]" } |
| 51 | + |
| 52 | + - { name: "(N= 10 ) set[range]", prelude: "init(n: 1e1, d: 4.0)", script: "set[range]" } |
| 53 | + - { name: "(N=100 ) set[range]", prelude: "init(n: 1e2, d: 4.0)", script: "set[range]" } |
| 54 | + - { name: "(N= 1K) set[range]", prelude: "init(n: 1e3, d: 2.0)", script: "set[range]" } |
| 55 | + - { name: "(N= 10K) set[range]", prelude: "init(n: 1e4, d: 2.0)", script: "set[range]" } |
| 56 | + - { name: "(N=100K) set[range]", prelude: "init(n: 1e5, d: 2.0)", script: "set[range]" } |
| 57 | + - { name: "(N= 1M) set[range]", prelude: "init(n: 1e6, d: 1.5)", script: "set[range]" } |
0 commit comments