Sha256: 584c47deadd24e1a674be3f20eb50949bb2554b1e14baffa34dbdc90101080f8

Contents?: true

Size: 1.74 KB

Versions: 1

Compression:

Stored size: 1.74 KB

Contents

require 'spec_helper'
require 'win/time'

include Win::Time

describe Win::Time do

  describe "#query_performance_frequency" do
    spec { use { success = QueryPerformanceFrequency(freq = FFI::MemoryPointer.new(:int64)) } }
    spec { use { freq = query_performance_frequency() } }

    it "original api returns non-zero and high-res performance counter frequency it a pointer" do
      QueryPerformanceFrequency(freq = FFI::MemoryPointer.new(:int64)).should be > 0
      freq.get_int64(0).should be > 500000
    end

    it "snake_case api returns high-res performance counter frequency or nil if counter not available. " do
      query_performance_frequency().should be > 500000
    end

  end # describe query_performance_frequency

  describe "#query_performance_counter" do
    spec { use { success = QueryPerformanceCounter(count = FFI::MemoryPointer.new(:int64)) } }
    spec { use { success = query_performance_counter() } }

    it "original api succeeds, the return value is nonzero, counter value returned at given pointer." do
      QueryPerformanceCounter(count = FFI::MemoryPointer.new(:int64)).should be > 0
      count.get_int64(0).should be > 500000000000
    end

    it "snake_case api succeeds, the return value is counter value (in counts)" do
      count = query_performance_counter()
      count.should be > 500000000000
    end

    it "successive function calls return (slightly) incremented counter values" do
      100.times do
        count1 = query_performance_counter()
        count2 = query_performance_counter()
        diff = count2 - count1
        diff.should be > 10
        diff.should be < 50000 # GC calls make it hard to guarantee uniform measurements?
      end
    end
  end # describe query_performance_counter

end # describe Win::Time

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
win-0.3.25 spec/win/time_spec.rb