Sha256: a1c52d9eaca1fc7e289725f172b8499fb320880739ec90f66af107ea8bc554b8

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

require_relative 'helper'

class ThreadTest < MiniTest::Test
  def test_thread_spin
    buffer = []
    spin { (1..3).each { |i| snooze; buffer << i } }
    t = Thread.new do
      s1 = spin { (11..13).each { |i| snooze; buffer << i } }
      s2 = spin { (21..23).each { |i| snooze; buffer << i } }
      Fiber.join(s1, s2)
    end
    t.join

    assert_equal [1, 2, 3, 11, 12, 13, 21, 22, 23], buffer.sort
  end

  def test_thread_join
    buffer = []
    spin { (1..3).each { |i| snooze; buffer << i } }
    t = Thread.new { sleep 0.01; buffer << 4 }
    r = t.join

    assert_equal [1, 2, 3, 4], buffer
    assert_equal t, r
  end

  def test_thread_join_with_timeout
    buffer = []
    spin { (1..3).each { |i| snooze; buffer << i } }
    t = Thread.new { sleep 1; buffer << 4 }
    t0 = Time.now
    r = t.join(0.01)

    assert Time.now - t0 < 0.2
    assert_equal [1, 2, 3], buffer
    assert_nil r
  ensure
    # killing the thread will prevent stopping the sleep timer, as well as the
    # thread's event selector, leading to a memory leak.
    t.kill if t.alive?
  end

  def test_thread_inspect
    lineno = __LINE__ + 1
    t = Thread.new {}
    str = format(
      "#<Thread:%d %s:%d (run)>",
      t.object_id,
      __FILE__,
      lineno,
    )
    assert_equal str, t.inspect
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
polyphony-0.28 test/test_thread.rb