lib/busted/counter.rb
require "monitor"
require "busted/stack"
module Busted
class Counter
def initialize(stack = Stack.new)
@stack = stack
@lock = Monitor.new
end
def start
lock.synchronize { stack.started = counts }
end
def finish
lock.synchronize { stack.finished = counts }
end
def report
lock.synchronize do
started = stack.started
finished = stack.finished
[:method, :constant].each_with_object({}) do |counter, result|
result[counter] = finished[counter] - started[counter]
end
end
end
private
attr_reader :stack, :lock
def counts
stat = RubyVM.stat
{
method: stat[:global_method_state],
constant: stat[:global_constant_state]
}
end
end
end