rgot 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 57d8f9ab92c4012ef3961c16b85282ff90a56e10
4
- data.tar.gz: bd531b85de9472e12bd858619b9438915ab8fcdb
3
+ metadata.gz: b420828d0e0801d5f766faa6ef3c57c67ae81a6b
4
+ data.tar.gz: 49271b8268fc5eb3b61da0350a2ac12adb5b91c3
5
5
  SHA512:
6
- metadata.gz: 745a54c2504ef26f67a1bbcdbc54ee87d42eeab98edefefb56f8b477833a34f078aa7aff5c2ab732464bd782d1f18b0b61fd7f2b8f383a5eb4c60c59a7b45cfa
7
- data.tar.gz: bd09b0e3dc34cb369144ef7154eb8032c38b75b3a75b8ebd22bbd1269df1e4760c728ef3139f220ed84898a57b1d264740143c8109c85e68727f729039d93fc7
6
+ metadata.gz: 384ccc588fe79b31c639d8e4aaa6ada76ba283ab9082ddc113b84362277142616dcb54fba6c4250827bafc3443f90de7a1284b2ebda61e6bab1573b8f5ef39ea
7
+ data.tar.gz: 39490b59b9baf6c883b6beafce640ddd5301aa34ee2f0e3f199db0daead6932463c74c3408576638fc63ee5275f083d49b6b73f9bb05fdbb15e690c01e86a27d
@@ -1,5 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
+ - 2.0.0
3
4
  - 2.1.6
4
5
  - 2.2.2
5
6
  notifications:
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require "bundler/gem_tasks"
3
3
  desc "test to rgot"
4
4
  task :test do |t|
5
5
  target = "test/rgot_test.rb"
6
- ruby "bin/rgot #{target}"
6
+ ruby "bin/rgot -v #{target}"
7
7
  end
8
8
 
9
9
  task :default => [:test]
data/bin/rgot CHANGED
@@ -4,8 +4,17 @@ require 'rgot'
4
4
 
5
5
  opts = {}
6
6
  parser = OptionParser.new do |o|
7
- o.on '-v', '--verbose', "log all tests" do
8
- opts[:verbose] = true
7
+ o.on '-v', '--verbose', "log all tests" do |arg|
8
+ opts[:verbose] = arg
9
+ end
10
+ o.on '-b', '--bench [regexp]', "benchmark" do |arg|
11
+ unless arg
12
+ raise Rgot::OptionError, "missing argument for flag --bench"
13
+ end
14
+ opts[:bench] = arg
15
+ end
16
+ o.on '--benchtime [sec]', "benchmark running time" do |arg|
17
+ opts[:benchtime] = arg
9
18
  end
10
19
  end
11
20
  parser.parse!(ARGV)
@@ -20,7 +29,7 @@ if target
20
29
  require i
21
30
  end
22
31
  else
23
- puts USAGE
32
+ puts target
24
33
  end
25
34
  else
26
35
  Dir.glob("./**/*_test.rb") do |i|
@@ -38,20 +47,26 @@ if 1 != modules.length
38
47
  exit 1
39
48
  end
40
49
 
41
- cases = []
50
+ tests = []
51
+ benchmarks = []
42
52
  main = nil
43
53
  c = modules.first
44
54
 
45
55
  test_module = Object.const_get(c)
46
- test_module.instance_methods.grep(/\Atest_.*/).sort.each do |m|
56
+ methods = test_module.instance_methods
57
+ methods.grep(/\Atest_.*/).sort.each do |m|
47
58
  if m == :test_main && main.nil?
48
- main = Rgot::InternalTestType.new(test_module, m)
59
+ main = Rgot::InternalTest.new(test_module, m)
49
60
  else
50
- cases << Rgot::InternalTestType.new(test_module, m)
61
+ tests << Rgot::InternalTest.new(test_module, m)
51
62
  end
52
63
  end
53
64
 
54
- m = Rgot::M.new(cases, opts)
65
+ methods.grep(/\Abenchmark_.*/).sort.each do |m|
66
+ benchmarks << Rgot::InternalBenchmark.new(test_module, m)
67
+ end
68
+
69
+ m = Rgot::M.new(tests: tests, benchmarks: benchmarks, opts: opts)
55
70
  duration = Rgot.now
56
71
  at_exit {
57
72
  puts sprintf("ok\t%.3fs", Rgot.now - duration)
@@ -1,15 +1,28 @@
1
1
  module Rgot
2
2
  autoload :VERSION, 'rgot/version'
3
3
  autoload :Common, 'rgot/common'
4
- autoload :T, 'rgot/t'
5
4
  autoload :M, 'rgot/m'
5
+ autoload :T, 'rgot/t'
6
+ autoload :B, 'rgot/b'
7
+
8
+ class OptionError < StandardError
9
+ end
10
+
11
+ class InternalTest < Struct.new(:module, :name)
12
+ end
6
13
 
7
- class InternalTestType < Struct.new(:module, :name)
14
+ class InternalBenchmark < Struct.new(:module, :name)
8
15
  end
9
16
 
10
17
  class << self
11
- def now
12
- Process.clock_gettime(Process::CLOCK_MONOTONIC)
18
+ if "2.0.0" < RUBY_VERSION
19
+ def now
20
+ Process.clock_gettime(Process::CLOCK_MONOTONIC)
21
+ end
22
+ else
23
+ def now
24
+ Time.now
25
+ end
13
26
  end
14
27
  end
15
28
  end
@@ -0,0 +1,78 @@
1
+ module Rgot
2
+ class B < Common
3
+ attr_accessor :n
4
+ def initialize(benchmark_module, name, opts)
5
+ super()
6
+ @n = 1
7
+ @module = benchmark_module
8
+ @name = name
9
+ @opts = opts
10
+ @benchtime = @opts.fetch(:benchtime, 1).to_f
11
+ @timer_on = false
12
+ @start = Rgot.now
13
+ @duration = 0
14
+ @module.extend @module
15
+ end
16
+
17
+ def start_timer
18
+ if !@timer_on
19
+ @start = Rgot.now
20
+ @timer_on = true
21
+ end
22
+ end
23
+
24
+ def stop_timer
25
+ if @timer_on
26
+ @duration += Rgot.now - @start
27
+ @timer_on = false
28
+ end
29
+ end
30
+
31
+ def reset_timer
32
+ if @timer_on
33
+ @start = Rgot.now
34
+ end
35
+ @duration = 0
36
+ end
37
+
38
+ def run
39
+ n = 1
40
+ a = Rgot.now
41
+ run_n(n)
42
+ while !failed? && @duration < @benchtime && @n < 1e9
43
+ if @duration < (@benchtime / 100.0)
44
+ n *= 100
45
+ elsif @duration < (@benchtime / 10.0)
46
+ n *= 10
47
+ elsif @duration < (@benchtime / 5.0)
48
+ n *= 5
49
+ elsif @duration < (@benchtime / 2.0)
50
+ n *= 2
51
+ else
52
+ n *= 1.2
53
+ end
54
+ run_n(n)
55
+ end
56
+ end
57
+
58
+ def report
59
+ printf("%s\t%d\t%.3f ns/op\n", @name, @n, @duration / @n * 1_000_000_000)
60
+ end
61
+
62
+ private
63
+
64
+ def run_n(n)
65
+ GC.start
66
+ i = 0
67
+ @n = n
68
+ reset_timer
69
+ start_timer
70
+ call
71
+ stop_timer
72
+ end
73
+
74
+ def call
75
+ @module.instance_method(@name).bind(@module).call(self)
76
+ end
77
+ end
78
+ end
@@ -1,13 +1,16 @@
1
1
  module Rgot
2
2
  class M
3
- def initialize(cases, opts)
4
- @cases = cases
3
+ # Ruby-2.0.0 wants default value of keyword_argument
4
+ def initialize(tests: [], benchmarks: [], opts: {})
5
+ @tests = tests
6
+ @benchmarks = benchmarks
5
7
  @opts = opts
6
8
  end
7
9
 
8
10
  def run
9
11
  test_ok = run_tests
10
- if !test_ok
12
+ benchmark_ok = run_benchmarks
13
+ if !test_ok || !benchmark_ok
11
14
  puts "FAIL"
12
15
  1
13
16
  else
@@ -20,8 +23,8 @@ module Rgot
20
23
 
21
24
  def run_tests
22
25
  ok = true
23
- @cases.each do |test|
24
- t = Rgot::T.new(test.module, test.name.to_sym, @opts)
26
+ @tests.each do |test|
27
+ t = T.new(test.module, test.name.to_sym, @opts)
25
28
  if @opts[:verbose]
26
29
  puts "=== RUN #{test.name}\n"
27
30
  end
@@ -33,5 +36,21 @@ module Rgot
33
36
  end
34
37
  ok
35
38
  end
39
+
40
+ def run_benchmarks
41
+ ok = true
42
+ return ok unless @opts[:bench]
43
+ @benchmarks.each do |bench|
44
+ next unless /#{@opts[:bench]}/ =~ bench.name
45
+
46
+ b = B.new(bench.module, bench.name.to_sym, @opts)
47
+ b.run
48
+ b.report
49
+ if b.failed?
50
+ ok = false
51
+ end
52
+ end
53
+ ok
54
+ end
36
55
  end
37
56
  end
@@ -5,12 +5,12 @@ module Rgot
5
5
  @module = test_module
6
6
  @name = name
7
7
  @opts = opts
8
+ @module.extend @module
8
9
  end
9
10
 
10
11
  def run
11
12
  begin
12
- @module.extend @module
13
- @module.instance_method(@name).bind(@module).call(self)
13
+ call
14
14
  finished!
15
15
  rescue => e
16
16
  fail!
@@ -32,5 +32,9 @@ module Rgot
32
32
  end
33
33
  end
34
34
  end
35
+
36
+ def call
37
+ @module.instance_method(@name).bind(@module).call(self)
38
+ end
35
39
  end
36
40
  end
@@ -1,3 +1,3 @@
1
1
  module Rgot
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-31 00:00:00.000000000 Z
11
+ date: 2015-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: rgot is golang like testing module in ruby
@@ -46,14 +46,15 @@ executables:
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
- - ".gitignore"
50
- - ".travis.yml"
49
+ - .gitignore
50
+ - .travis.yml
51
51
  - Gemfile
52
52
  - LICENSE.txt
53
53
  - README.md
54
54
  - Rakefile
55
55
  - bin/rgot
56
56
  - lib/rgot.rb
57
+ - lib/rgot/b.rb
57
58
  - lib/rgot/common.rb
58
59
  - lib/rgot/m.rb
59
60
  - lib/rgot/t.rb
@@ -69,17 +70,17 @@ require_paths:
69
70
  - lib
70
71
  required_ruby_version: !ruby/object:Gem::Requirement
71
72
  requirements:
72
- - - ">="
73
+ - - '>='
73
74
  - !ruby/object:Gem::Version
74
75
  version: '0'
75
76
  required_rubygems_version: !ruby/object:Gem::Requirement
76
77
  requirements:
77
- - - ">="
78
+ - - '>='
78
79
  - !ruby/object:Gem::Version
79
80
  version: '0'
80
81
  requirements: []
81
82
  rubyforge_project:
82
- rubygems_version: 2.4.5
83
+ rubygems_version: 2.0.14
83
84
  signing_key:
84
85
  specification_version: 4
85
86
  summary: The Ruby GOlang like Testing module