Class: Test_Timer

Inherits:
Test::Unit::TestCase
  • Object
show all
Defined in:
lib/carat-dev/timer/timer.rb

Overview

These tests may not work on a slow machine or heavily loaded system; try adjusting FUDGE.

Constant Summary collapse

FUDGE =

:nodoc:

0.01

Instance Method Summary collapse

Instance Method Details

#generic_test {|steps, period, max_sleep| ... } ⇒ Object

a constant independent of period.

Yields:

  • (steps, period, max_sleep)


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/carat-dev/timer/timer.rb', line 90

def generic_test
  steps = 100
  period = 0.01
  max_sleep = period/2
  
  start_time = Time.now
  yield steps, period, max_sleep
  finish_time = Time.now
  
  assert_in_delta(
    start_time.to_f + steps*period,
    finish_time.to_f,
    period + FUDGE,
    "delta = #{finish_time.to_f - (start_time.to_f + steps*period)}"
  )
end

#test_everyObject



107
108
109
110
111
112
113
114
115
116
117
# File 'lib/carat-dev/timer/timer.rb', line 107

def test_every
  generic_test do |steps, period, max_sleep|
    Timer.every period do |elapsed|
      s = rand()*max_sleep
      #puts "#{elapsed} elapsed; sleeping #{s}"
      sleep(s)
      steps -= 1
      break if steps == 0
    end
  end
end

#test_every_with_expireObject



119
120
121
122
123
124
125
126
127
# File 'lib/carat-dev/timer/timer.rb', line 119

def test_every_with_expire
  generic_test do |steps, period, max_sleep|
    Timer.every period, period*steps do
      s = rand()*max_sleep
      #puts "#{elapsed} elapsed; sleeping #{s}"
      sleep(s)
    end
  end
end

#test_if_readyObject



141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/carat-dev/timer/timer.rb', line 141

def test_if_ready
  generic_test do |steps, period, max_sleep|
    timer = Timer.new(period)
    catch :done do
      loop do
        timer.if_ready do |elapsed|
          s = rand()*max_sleep
          #puts "#{elapsed} elapsed; sleeping #{s}"
          sleep(s)
          steps -= 1
          throw :done if steps == 0
        end
      end
    end
  end
end

#test_waitObject



129
130
131
132
133
134
135
136
137
138
139
# File 'lib/carat-dev/timer/timer.rb', line 129

def test_wait
  generic_test do |steps, period, max_sleep|
    timer = Timer.new(period)
    steps.times do
      s = rand()*max_sleep
      #puts "#{timer.elapsed} elapsed; sleeping #{s}"
      sleep(s)
      timer.wait
    end
  end
end