gpt4 book ai didi

ruby - 无法通过 RSpec 测试。时间不能强制进入 Fixnum

转载 作者:数据小太阳 更新时间:2023-10-29 08:04:16 25 4
gpt4 key购买 nike

我在进行此 rspec 测试时遇到了问题。我正在使用 Ruby 1.93 和 RSPEC 2.14.8(我认为)很抱歉这篇文章会这么长。我可以获得我发现可以工作的其他代码,但我无法让我的代码工作,我不确定为什么。

我的代码:

def measure(number = 1)  
counter = number
total = 0
while counter > 0
start = Time.now
counter-=1

yield

stop = Time.now
total = total + stop - start

end

total / number
end

我发现的其他有效代码:

def measure count=1  
total_time = 0
count.times do
start_time = Time.now

yield

end_time = Time.now
total_time += end_time - start_time
end
total_time / count
end

测试:

require_relative "performance_monitor"  

require "time" # loads up the Time.parse method -- do NOT create time.rb!

describe "Performance Monitor" do
before do
@eleven_am = Time.parse("2011-1-2 11:00:00")
end

it "takes about 0 seconds to run an empty block" do
elapsed_time = measure do
end
elapsed_time.should be_within(0.1).of(0)
end

it "takes exactly 0 seconds to run an empty block (with stubs)" do
Time.stub(:now) { @eleven_am }
elapsed_time = measure do
end
elapsed_time.should == 0
end

it "takes about 1 second to run a block that sleeps for 1 second" do
elapsed_time = measure do
sleep 1
end
elapsed_time.should be_within(0.1).of(1)
end

it "takes exactly 1 second to run a block that sleeps for 1 second (with stubs)" do
fake_time = @eleven_am
Time.stub(:now) { fake_time }
elapsed_time = measure do
fake_time += 60 # adds one minute to fake_time
end
elapsed_time.should == 60
end

it "runs a block N times" do
n = 0
measure(4) do
n += 1
end
n.should == 4
end

it "returns the average time, not the total time, when running multiple times" do
run_times = [8,6,5,7]
fake_time = @eleven_am
Time.stub(:now) { fake_time }
average_time = measure(4) do
fake_time += run_times.pop
end
average_time.should == 6.5
end

it "returns the average time when running a random number of times for random lengths of time" do
fake_time = @eleven_am
Time.stub(:now) { fake_time }
number_of_times = rand(10) + 2
average_time = measure(number_of_times) do
delay = rand(10)
fake_time += delay
end
average_time.should == (fake_time - @eleven_am).to_f/number_of_times
end

end

运行时显示的内容:

Performance Monitor takes about 0 seconds to run an empty block (FAILED - 1)

Failures:

1) Performance Monitor takes about 0 seconds to run an empty block
Failure/Error: elapsed_time = measure do
TypeError:
Time can't be coerced into Fixnum
# ./06_performance_monitor/performance_monitor.rb:11:in '+' #./06_performance_monitor/performance_monitor.rb:11:in 'measure' #./06_performance_monitor/performance_monitor_spec.rb:21:in `block (2 levels) in '

Finished in 0.008 seconds 1 example, 1 failure

最佳答案

total = total + stop - starttotal = total + (stop - start) 不同

第一个实际上是计算为 total = (total + t) - n 这不起作用,因为您不能将两个时间相加。

我想你的意思是:

total = total + (stop - start) 或者更简洁的 total += stop - start

关于ruby - 无法通过 RSpec 测试。时间不能强制进入 Fixnum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23172972/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com