Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

69 lines (54 sloc) 1.695 kb
require "spec/helper/all"
require "em-synchrony/iterator"
describe EventMachine::Synchrony::Iterator do
it "should wait until the iterator is done" do
EM.synchrony do
results = []
i = EM::Synchrony::Iterator.new(1..50, 10).each do |num, iter|
results.push num
iter.next
end
results.should == (1..50).to_a
results.size.should == 50
EventMachine.stop
end
end
it "should map values within the iterator" do
EM.synchrony do
results = EM::Synchrony::Iterator.new(1..50, 10).map do |num, iter|
iter.return(num + 1)
end
results.should == (2..51).to_a
results.size.should == 50
EventMachine.stop
end
end
it "should sum values within the iterator" do
EM.synchrony do
data = (1..50).to_a
res = EM::Synchrony::Iterator.new(data, 10).inject(0) do |total, num, iter|
total += num
iter.return(total)
end
res.should == data.inject(:+)
EventMachine.stop
end
end
it "should fire async http requests in blocks of 2" do
EM.synchrony do
num_urls = 4
concurrency = 2
delay = 0.25
s = StubServer.new("HTTP/1.0 200 OK\r\nConnection: close\r\n\r\nFoo", delay)
urls = ['http://localhost:8081/'] * num_urls
start = now
results = EM::Synchrony::Iterator.new(urls, concurrency).map do |url, iter|
http = EventMachine::HttpRequest.new(url).aget
http.callback { iter.return(http) }
end
results.size.should == 4
(now - start.to_f).should be_within(delay * 0.15).of(delay * (num_urls / concurrency))
EventMachine.stop
end
end
end
Jump to Line
Something went wrong with that request. Please try again.