Sha256: 95e09ff8715077d6e3ecd5fa7e828f94f696d402d775c2e71dda48c34920040d

Contents?: true

Size: 787 Bytes

Versions: 2

Compression:

Stored size: 787 Bytes

Contents

shared_examples :concurrent_increment do
  def increment_thread(name)
    Thread.new do
      s = new_store
      100.times do |i|
        100.times do |j|
          s.increment("counter#{j}", 1, expires: false)
          Thread.pass if rand(1000) >= 995
        end
        s.store("#{name}#{i}", i.to_s, expires: false)
      end
      s.close
    end
  end

  it 'have atomic increment across multiple threads', isolate: true do
    a = increment_thread('a')
    b = increment_thread('b')
    c = increment_thread('c')
    a.join
    b.join
    c.join
    100.times do |i|
      store["a#{i}"].should == i.to_s
      store["b#{i}"].should == i.to_s
      store["c#{i}"].should == i.to_s
    end
    100.times do |j|
      store.raw["counter#{j}"].should == 300.to_s
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
moneta-1.1.1 spec/features/concurrent_increment.rb
moneta-1.1.0 spec/features/concurrent_increment.rb