hitimes 0.3.0-x86-mswin32-60

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,42 @@
1
+ #--
2
+ # Copyright (c) 2008 Jeremy Hinegardner
3
+ # All rights reserved. See LICENSE and/or COPYING for details
4
+ #++
5
+
6
+ module Hitimes
7
+ #
8
+ # module containing all the version information about Hitimes
9
+ #
10
+ module Version
11
+
12
+ MAJOR = 0
13
+ MINOR = 3
14
+ BUILD = 0
15
+
16
+ #
17
+ # :call-seq:
18
+ # Version.to_a -> [ MAJOR, MINOR, BUILD ]
19
+ #
20
+ # Return the version as an array of Integers
21
+ #
22
+ def to_a
23
+ [MAJOR, MINOR, BUILD]
24
+ end
25
+
26
+ #
27
+ # :call-seq:
28
+ # Version.to_s -> MAJOR.MINOR.BUILD
29
+ #
30
+ # Return the version as a String with dotted notation
31
+ #
32
+ def to_s
33
+ to_a.join(".")
34
+ end
35
+
36
+ module_function :to_a
37
+ module_function :to_s
38
+
39
+ STRING = Version.to_s
40
+ end
41
+ VERSION = Version.to_s
42
+ end
Binary file
@@ -0,0 +1,115 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
2
+
3
+ require 'hitimes_ext'
4
+
5
+ describe Hitimes::Interval do
6
+ it "has a 0 duration when newly created" do
7
+ i = Hitimes::Interval.new
8
+ i.duration == 0.0
9
+ end
10
+
11
+ it "knows if it has been started" do
12
+ i = Hitimes::Interval.new
13
+ i.should_not be_started
14
+
15
+ i.start
16
+ i.should be_started
17
+ end
18
+
19
+ it "knows if it has been stopped" do
20
+ i = Hitimes::Interval.new
21
+ i.start
22
+ i.should_not be_stopped
23
+ i.stop
24
+ i.should be_stopped
25
+ end
26
+
27
+ it "knows if it is currently running" do
28
+ i = Hitimes::Interval.new
29
+ i.should_not be_running
30
+ i.start
31
+ i.should be_running
32
+ i.stop
33
+ i.should_not be_running
34
+ end
35
+
36
+ it "can time a block of code" do
37
+ d = Hitimes::Interval.measure do
38
+ sleep 0.2
39
+ end
40
+ d.should be_close(0.2, 0.01)
41
+ end
42
+
43
+ it "raises an error if measure is called with no block" do
44
+ lambda{ Hitimes::Interval.measure }.should raise_error( Hitimes::Error )
45
+ end
46
+
47
+ it "creates an interval via #now" do
48
+ i = Hitimes::Interval.now
49
+ i.should be_started
50
+ i.should_not be_stopped
51
+ end
52
+
53
+ it "calling duration multiple times returns successivly grater durations" do
54
+ i = Hitimes::Interval.new
55
+ i.start
56
+ y = i.duration
57
+ z = i.duration
58
+ z.should > y
59
+ end
60
+
61
+ it "calling start multiple times on has no effect after the first call" do
62
+ i = Hitimes::Interval.new
63
+ i.start.should == true
64
+ x = i.start_instant
65
+ i.start_instant.should > 0
66
+ i.start.should == false
67
+ x.should == i.start_instant
68
+ end
69
+
70
+ it "returns the duration on the first call to stop" do
71
+ i = Hitimes::Interval.now
72
+ d = i.stop
73
+ d.should be_instance_of( Float )
74
+ end
75
+
76
+ it "calling stop multiple times on has no effect after the first call" do
77
+ i = Hitimes::Interval.new
78
+ i.start.should == true
79
+ i.stop
80
+
81
+ x = i.stop_instant
82
+ i.stop_instant.should > 0
83
+ i.stop.should == false
84
+ x.should == i.stop_instant
85
+
86
+ end
87
+
88
+ it "only calculates duration once after stop is called" do
89
+ i = Hitimes::Interval.new
90
+ i.start
91
+ i.stop
92
+ x = i.duration
93
+ y = i.duration
94
+ x.object_id.should == y.object_id
95
+ end
96
+
97
+ describe "#split" do
98
+
99
+ it "creates a new Interval object" do
100
+ i = Hitimes::Interval.new
101
+ i.start
102
+ i2 = i.split
103
+ i.object_id.should_not == i2.object_id
104
+ end
105
+
106
+ it "with the stop instant equivialent to the previous Interval's start instant" do
107
+ i = Hitimes::Interval.new
108
+ i.start
109
+ i2 = i.split
110
+ i.stop_instant.should == i2.start_instant
111
+ end
112
+ end
113
+
114
+ end
115
+
@@ -0,0 +1,14 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
2
+
3
+ require 'hitimes/paths'
4
+
5
+ describe Hitimes::Paths do
6
+ it "can access the root dir of the project" do
7
+ Hitimes::Paths.root_dir.should == File.expand_path( File.join( File.dirname( __FILE__ ), ".." ) ) + ::File::SEPARATOR
8
+ end
9
+
10
+ it "can access the lib path of the project" do
11
+ Hitimes::Paths.lib_path.should == File.expand_path( File.join( File.dirname( __FILE__ ), "..", "lib" ) ) + ::File::SEPARATOR
12
+ end
13
+
14
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+
4
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","ext"))
5
+ $: << File.expand_path(File.join(File.dirname(__FILE__),"..","lib"))
6
+
@@ -0,0 +1,48 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
2
+
3
+ require 'hitimes_ext'
4
+
5
+ describe Hitimes::Stats do
6
+ before( :each ) do
7
+ @stats = Hitimes::Stats.new
8
+ @full_stats = Hitimes::Stats.new
9
+
10
+ [ 1, 2, 3].each { |i| @full_stats.update( i ) }
11
+ end
12
+
13
+ it "is initialized with 0 values" do
14
+ @stats.count.should == 0
15
+ @stats.min.should == 0.0
16
+ @stats.max.should == 0.0
17
+ @stats.sum.should == 0.0
18
+ end
19
+
20
+ it "calculates the mean correctly" do
21
+ @full_stats.mean.should == 2.0
22
+ end
23
+
24
+ it "calculates the rate correctly" do
25
+ @full_stats.rate.should == 0.5
26
+ end
27
+
28
+ it "tracks the maximum value" do
29
+ @full_stats.max.should == 3.0
30
+ end
31
+
32
+ it "tracks the minimum value" do
33
+ @full_stats.min.should == 1.0
34
+ end
35
+
36
+ it "tracks the count" do
37
+ @full_stats.count.should == 3
38
+ end
39
+
40
+ it "tracks the sum" do
41
+ @full_stats.sum.should == 6.0
42
+ end
43
+
44
+ it "calculates the standard deviation" do
45
+ @full_stats.stddev.should == 1.0
46
+ end
47
+
48
+ end
@@ -0,0 +1,105 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper.rb" ) )
2
+
3
+ require 'hitimes/timer'
4
+
5
+ describe Hitimes::Timer do
6
+
7
+ it "knows if it is running or not" do
8
+ t = Hitimes::Timer.new
9
+ t.should_not be_running
10
+ t.start
11
+ t.should be_running
12
+ t.stop
13
+ t.should_not be_running
14
+ end
15
+
16
+ it "#split returns the last duration and the timer is still running" do
17
+ t = Hitimes::Timer.now
18
+ d = t.split
19
+ t.should be_running
20
+ d.should > 0
21
+ t.count.should == 1
22
+ t.duration.should == d
23
+ end
24
+
25
+ it "#stop returns false if called more than once in a row" do
26
+ t = Hitimes::Timer.new
27
+ t.start
28
+ t.stop.should > 0
29
+ t.stop.should == false
30
+ end
31
+
32
+ it "does not count a currently running interval as an interval in calculations" do
33
+ t = Hitimes::Timer.new
34
+ t.start
35
+ t.count.should == 0
36
+ t.split
37
+ t.count.should == 1
38
+ end
39
+
40
+ it "#split called on a stopped timer does nothing" do
41
+ t = Hitimes::Timer.new
42
+ t.start
43
+ t.stop
44
+ t.split.should == false
45
+ end
46
+
47
+ it "calculates the mean of the durations" do
48
+ t = Hitimes::Timer.new
49
+ 2.times { t.start ; sleep 0.05 ; t.stop }
50
+ t.mean.should > 0.04
51
+ end
52
+
53
+ it "calculates the rate of the counts " do
54
+ t = Hitimes::Timer.new
55
+ 5.times { t.start ; sleep 0.05 ; t.stop }
56
+ t.rate.should > 19.0
57
+ end
58
+
59
+
60
+ it "calculates the stddev of the durations" do
61
+ t = Hitimes::Timer.new
62
+ 2.times { t.start ; sleep 0.05 ; t.stop }
63
+ t.stddev.should > 0.0
64
+ end
65
+
66
+ it "returns 0.0 for stddev if there is no data" do
67
+ t = Hitimes::Timer.new
68
+ t.stddev.should == 0.0
69
+ end
70
+
71
+ it "retuns 0.0 for mean if there is no data" do
72
+ Hitimes::Timer.new.mean.should == 0.0
73
+ end
74
+
75
+ it "keeps track of the min value" do
76
+ t = Hitimes::Timer.new
77
+ 2.times { t.start ; sleep 0.05 ; t.stop }
78
+ t.min.should > 0
79
+ end
80
+
81
+ it "keeps track of the max value" do
82
+ t = Hitimes::Timer.new
83
+ 2.times { t.start ; sleep 0.05 ; t.stop }
84
+ t.max.should > 0
85
+ end
86
+
87
+ it "can create an already running timer" do
88
+ t = Hitimes::Timer.now
89
+ t.should be_running
90
+ end
91
+
92
+ it "can measure a block of code's execution time" do
93
+ dur = Hitimes::Timer.measure { sleep 0.05 }
94
+ dur.should > 0.025
95
+ end
96
+
97
+ it "can measuer a block of code from an instance" do
98
+ t = Hitimes::Timer.new
99
+ 3.times { t.measure { sleep 0.05 } }
100
+ t.duration.should > 0.14
101
+ t.count.should == 3
102
+ end
103
+
104
+ end
105
+
@@ -0,0 +1,27 @@
1
+ require File.expand_path( File.join( File.dirname( __FILE__ ), "spec_helper" ) )
2
+
3
+ describe "Hitimes::Version" do
4
+ it "should have a major numbers that is >= 0" do
5
+ Hitimes::Version::MAJOR.should >= 0
6
+ end
7
+
8
+ it "should have a minor number that is >= 0" do
9
+ Hitimes::Version::MINOR.should >= 0
10
+ end
11
+
12
+ it "should have a tiny number that is >= 0" do
13
+ Hitimes::Version::BUILD.should >= 0
14
+ end
15
+
16
+ it "should have an array representation" do
17
+ Hitimes::Version.to_a.should have(3).items
18
+ end
19
+
20
+ it "should have a string representation" do
21
+ Hitimes::Version.to_s.should match(/\d+\.\d+\.\d+/)
22
+ end
23
+
24
+ it "should be accessable as a constant" do
25
+ Hitimes::VERSION.should match(/\d+\.\d+\.\d+/)
26
+ end
27
+ end
@@ -0,0 +1,39 @@
1
+ require 'tasks/config'
2
+ #-------------------------------------------------------------------------------
3
+ # announcement methods
4
+ #-------------------------------------------------------------------------------
5
+
6
+ proj_config = Configuration.for('project')
7
+ namespace :announce do
8
+ desc "create email for ruby-talk"
9
+ task :email do
10
+ info = Utils.announcement
11
+
12
+ File.open("email.txt", "w") do |mail|
13
+ mail.puts "From: #{proj_config.author} <#{proj_config.email}>"
14
+ mail.puts "To: ruby-talk@ruby-lang.org"
15
+ mail.puts "Date: #{Time.now.rfc2822}"
16
+ mail.puts "Subject: [ANN] #{info[:subject]}"
17
+ mail.puts
18
+ mail.puts info[:title]
19
+ mail.puts
20
+ mail.puts " gem install #{Hitimes::GEM_SPEC.name}"
21
+ mail.puts
22
+ mail.puts info[:urls]
23
+ mail.puts
24
+ mail.puts info[:description]
25
+ mail.puts
26
+ mail.puts "{{ Release notes for Version #{Hitimes::VERSION} }}"
27
+ mail.puts
28
+ mail.puts info[:release_notes]
29
+ mail.puts
30
+ end
31
+ puts "Created the following as email.txt:"
32
+ puts "-" * 72
33
+ puts File.read("email.txt")
34
+ puts "-" * 72
35
+ end
36
+
37
+ CLOBBER << "email.txt"
38
+ end
39
+
data/tasks/config.rb ADDED
@@ -0,0 +1,107 @@
1
+ require 'configuration'
2
+
3
+ require 'rake'
4
+ require 'tasks/utils'
5
+
6
+ #-----------------------------------------------------------------------
7
+ # General project configuration
8
+ #-----------------------------------------------------------------------
9
+ Configuration.for('project') {
10
+ name "hitimes"
11
+ version Hitimes::Version.to_s
12
+ author "Jeremy Hinegardner"
13
+ email "jeremy at copiousfreetime dot org"
14
+ homepage "http://copiousfreetime.rubyforge.org/hitimes/"
15
+ description Utils.section_of("README", "description")
16
+ summary description.split(".").first
17
+ history "HISTORY"
18
+ license FileList["LICENSE"]
19
+ readme "README"
20
+ }
21
+
22
+ #-----------------------------------------------------------------------
23
+ # Packaging
24
+ #-----------------------------------------------------------------------
25
+ Configuration.for('packaging') {
26
+ # files in the project
27
+ proj_conf = Configuration.for('project')
28
+ files {
29
+ bin FileList["bin/*"]
30
+ ext FileList["ext/*.{c,h,rb}"]
31
+ examples FileList["examples/*.rb"]
32
+ lib FileList["lib/**/*.rb"]
33
+ test FileList["spec/**/*.rb", "test/**/*.rb"]
34
+ data FileList["data/**/*"]
35
+ tasks FileList["tasks/**/*.r{ake,b}"]
36
+ rdoc FileList[proj_conf.readme, proj_conf.history,
37
+ proj_conf.license] + lib + FileList["ext/*.c"]
38
+ all bin + examples + ext + lib + test + data + rdoc + tasks + FileList["Rakefile"]
39
+ }
40
+
41
+ # ways to package the results
42
+ formats {
43
+ tgz true
44
+ zip true
45
+ gem Configuration::Table.has_key?('gem')
46
+ }
47
+ }
48
+
49
+ #-----------------------------------------------------------------------
50
+ # Gem packaging
51
+ #-----------------------------------------------------------------------
52
+ Configuration.for("gem") {
53
+ spec "gemspec.rb"
54
+ Configuration.for('packaging').files.all << spec
55
+ }
56
+
57
+ #-----------------------------------------------------------------------
58
+ # Testing
59
+ # - change mode to 'testunit' to use unit testing
60
+ #-----------------------------------------------------------------------
61
+ Configuration.for('test') {
62
+ mode "spec"
63
+ files Configuration.for("packaging").files.test
64
+ options %w[ --format specdoc --color ]
65
+ ruby_opts %w[ ]
66
+ }
67
+
68
+ #-----------------------------------------------------------------------
69
+ # Rcov
70
+ #-----------------------------------------------------------------------
71
+ Configuration.for('rcov') {
72
+ output_dir "coverage"
73
+ libs %w[ lib ]
74
+ rcov_opts %w[ --html ]
75
+ ruby_opts %w[ ]
76
+ test_files Configuration.for('packaging').files.test
77
+ }
78
+
79
+ #-----------------------------------------------------------------------
80
+ # Rdoc
81
+ #-----------------------------------------------------------------------
82
+ Configuration.for('rdoc') {
83
+ files Configuration.for('packaging').files.rdoc
84
+ main_page files.first
85
+ title Configuration.for('project').name
86
+ options %w[ --line-numbers --inline-source ]#-f darkfish ]
87
+ output_dir "doc"
88
+ }
89
+
90
+ #-----------------------------------------------------------------------
91
+ # Extension
92
+ #-----------------------------------------------------------------------
93
+ Configuration.for('extension') {
94
+ configs Configuration.for('packaging').files.ext.find_all { |x| %w[ mkrf_conf.rb extconf.rb ].include?(File.basename(x)) }
95
+ }
96
+
97
+ #-----------------------------------------------------------------------
98
+ # Rubyforge
99
+ #-----------------------------------------------------------------------
100
+ Configuration.for('rubyforge') {
101
+ project "copiousfreetime"
102
+ user "jjh"
103
+ host "rubyforge.org"
104
+ rdoc_location "#{user}@#{host}:/var/www/gforge-projects/#{project}/hitimes"
105
+ }
106
+
107
+