Sha256: e3e05c7b870ac9dfe918bf53db23b7b4badf6c8c9aad493cfedb9d499c2bd53a

Contents?: true

Size: 1.12 KB

Versions: 1

Compression:

Stored size: 1.12 KB

Contents

require 'zmachine/hashed_wheel'

describe ZMachine::HashedWheel do
  let(:wheel) { ZMachine::HashedWheel.new(16, 100) }

  it 'adds timeouts to the correct slot' do
    wheel.add 0
    wheel.add 90
    wheel.add 110
    wheel.add 1000
    wheel.add 1600
    wheel.add 3200
    expect(wheel.slots[0].length).to eq(4)
    expect(wheel.slots[1].length).to eq(1)
    expect(wheel.slots[10].length).to eq(1)
  end

  it 'times out same slot timeouts correctly' do
    now = wheel.reset
    wheel.add 10
    wheel.add 50
    timedout = wheel.advance(now + 30 * 1_000_000)
    expect(timedout.length).to eq(1)
  end

  it 'calculates the timeout set correctly' do
    now = wheel.reset
    wheel.add 10
    wheel.add 40
    wheel.add 1900
    wheel.add 3300
    wheel.add 4000
    timedout = wheel.advance(now + 3900 * 1_000_000)
    expect(timedout).to be
    expect(timedout.length).to eq(4)
  end

  it 'cancels timers correctly' do
    now = wheel.reset
    t1 = wheel.add 90
    t2 = wheel.add 110
    t1.cancel
    timedout = wheel.advance(now + 200 * 1_000_000)
    expect(timedout.first).to eq(t2)
    expect(timedout.length).to eq(1)
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zmachine-0.4.0 spec/hashed_wheel_spec.rb