about summary refs log tree commit homepage
path: root/test/test_posix_mq.rb
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2010-12-24 18:11:04 -0800
committerEric Wong <normalperson@yhbt.net>2010-12-24 18:12:03 -0800
commit31dee76d5ef41ec5524c3e4dfb802db4a7a468ef (patch)
tree118425e0b84920c716e85366678d8cefef846781 /test/test_posix_mq.rb
parent748d4aa2d3ece18db7d48c355ce77c877e4d3bb9 (diff)
downloadruby_posix_mq-31dee76d5ef41ec5524c3e4dfb802db4a7a468ef.tar.gz
This function isn't exported in the standard Ruby headers,
it returns an aggregate value and isn't available in Rubinius,
either, so nuke it.

While we're at it, use clock_gettime() instead of gettimeofday()
to avoid unnecessary timeval usage since mq_send/mq_receive
rely on higher-precision timespecs instead.
Diffstat (limited to 'test/test_posix_mq.rb')
-rw-r--r--test/test_posix_mq.rb30
1 files changed, 28 insertions, 2 deletions
diff --git a/test/test_posix_mq.rb b/test/test_posix_mq.rb
index 7e6ad9d..1f5c9b4 100644
--- a/test/test_posix_mq.rb
+++ b/test/test_posix_mq.rb
@@ -49,14 +49,40 @@ class Test_POSIX_MQ < Test::Unit::TestCase
     assert_equal @mq.object_id, clone.object_id
   end
 
-  def test_timed_receive
+  def test_timed_receive_float
     interval = 0.01
     @mq = POSIX_MQ.new(@path, :rw)
     assert ! @mq.nonblock?
     t0 = Time.now
     assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
     elapsed = Time.now - t0
-    assert elapsed > interval
+    assert elapsed > interval, elapsed.inspect
+    assert elapsed < 0.02, elapsed.inspect
+  end
+
+  def test_timed_receive_divmod
+    interval = Object.new
+    def interval.divmod(num)
+      num == 1 ? [ 0, 0.01 ] : nil
+    end
+    @mq = POSIX_MQ.new(@path, :rw)
+    assert ! @mq.nonblock?
+    t0 = Time.now
+    assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
+    elapsed = Time.now - t0
+    assert elapsed >= 0.01, elapsed.inspect
+    assert elapsed <= 0.02, elapsed.inspect
+  end
+
+  def test_timed_receive_fixnum
+    interval = 1
+    @mq = POSIX_MQ.new(@path, :rw)
+    assert ! @mq.nonblock?
+    t0 = Time.now
+    assert_raises(Errno::ETIMEDOUT) { @mq.receive "", interval }
+    elapsed = Time.now - t0
+    assert elapsed >= interval, elapsed.inspect
+    assert elapsed < 1.10, elapsed.inspect
   end
 
   def test_timed_send