1 # frozen_string_literal: false
5 Raindrops::Aggregate::PMQ
7 warn "W: #{e} skipping #{__FILE__}"
10 if RUBY_VERSION.to_f < 1.9
12 warn "W: skipping #{__FILE__}, only Ruby 1.9 supported for now"
15 Thread.abort_on_exception = true
17 class TestAggregatePMQ < Test::Unit::TestCase
20 @queue = "/test.#{rand}"
24 POSIX_MQ.unlink @queue
28 pmq = Raindrops::Aggregate::PMQ.new :queue => @queue
29 thr = Thread.new { pmq.master_loop }
31 (1..10).each { |i| pmq << i; agg << i }
34 assert_equal agg.count, pmq.count
35 assert_equal agg.mean, pmq.mean
36 assert_equal agg.std_dev, pmq.std_dev
37 assert_equal agg.min, pmq.min
38 assert_equal agg.max, pmq.max
39 assert_equal agg.to_s, pmq.to_s
42 def test_multi_process
45 pmq = Raindrops::Aggregate::PMQ.new :queue => @queue
46 pid = fork { pmq.master_loop }
47 workers = (1..nr_workers).map {
49 (1..nr).each { |i| pmq << i }
53 workers.each { |wpid| assert Process.waitpid2(wpid).last.success? }
55 assert Process.waitpid2(pid).last.success?
56 assert_equal 400, pmq.count
58 (1..nr_workers).map { (1..nr).each { |i| agg << i } }
59 assert_equal agg.to_s, pmq.to_s
60 assert_equal agg.mean, pmq.mean
61 assert_equal agg.std_dev, pmq.std_dev
62 assert_equal agg.min, pmq.min
63 assert_equal agg.max, pmq.max
64 assert_equal agg.to_s, pmq.to_s