rgot 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b55640e6b13205e65a7e08765579b3566f43b385
4
- data.tar.gz: 2b9727ef0256af4d11d272f2c4aa255ecf91053c
3
+ metadata.gz: f04145f618564aea3aa444ea1f353bfa61c4982d
4
+ data.tar.gz: 8559b54a3131721381a1ce6f7e738113864719ee
5
5
  SHA512:
6
- metadata.gz: ce0a920a44014f5b876382e6091018a1b447d9acd96e460e9077640e07047907221cc4b9946f849b09efcc0cbf65b881b78e8d88b100cf197ac2ebf53eb865c7
7
- data.tar.gz: 516c281575d0fa554698adb4cd2e69af664670dba015922c31c7f9dcf67f874715adbd190cf3482e2bd9a08d99a10a50d6e44dcd728cf875ca783516e6bbbfea
6
+ metadata.gz: f2f74de8444e11d69a91f523d6d2dd66d40d94731c071fd8d584958008e166fbad6b70c625d61ab2ed4cc34dc83b964cff3556f650d16a6a4ac83366a996d0b5
7
+ data.tar.gz: 640a8bca855cce5e811c23269e5fa315f08dc5e4aab711039c4a617bbf388bfbf737a06ba6f43e390fdb2f2772707ebf01e8d1c5ac522f3fd58e74036a61c96b
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 2.1.6
5
- - 2.2.2
4
+ - 2.1.7
5
+ - 2.2.3
6
6
  notifications:
7
7
  email: false
data/README.md CHANGED
@@ -10,6 +10,7 @@ Rgot is a testing package convert from golang testing.
10
10
  ### Usage
11
11
 
12
12
  test/sample.rb
13
+
13
14
  ```ruby
14
15
  class Sample
15
16
  def sum(i, j)
@@ -19,6 +20,7 @@ end
19
20
  ```
20
21
 
21
22
  test/pass_test.rb
23
+
22
24
  ```ruby
23
25
  module SampleTest
24
26
  class TypeSum < Struct.new(:left, :right, :expect)
@@ -53,7 +55,7 @@ PASS
53
55
  ok 0.001s
54
56
  ```
55
57
 
56
- # Feature
58
+ # Features
57
59
 
58
60
  ## Testing
59
61
 
@@ -85,7 +87,7 @@ end
85
87
 
86
88
  ```
87
89
  $ rgot foo_test.rb --bench .
88
- benchmark_something 14400000 81.392 ns/op
90
+ benchmark_something 14400000 81 ns/op
89
91
  ok FooTest 2.782s
90
92
  ```
91
93
 
@@ -178,11 +180,12 @@ end
178
180
  $ rgot -h
179
181
  Usage: rgot [options]
180
182
  -v, --verbose log all tests
183
+ --version show Rgot version
181
184
  --bench [regexp] benchmark
182
185
  --benchtime [sec] benchmark running time
183
186
  --timeout [sec] set timeout sec to testing
184
- --cpu [count,...] set cpu counts of comma splited
185
- --thread [count,...] set thread counts of comma splited
187
+ --cpu [count,...] set cpu counts of comma split
188
+ --thread [count,...] set thread counts of comma split
186
189
  --require [path] load some code before running
187
190
  --load-path [path] Specify $LOAD_PATH directory
188
191
  ```
@@ -217,7 +220,7 @@ PASS
217
220
  ok 0.001s
218
221
  ```
219
222
 
220
- Show all log and more detail infomation of testing.
223
+ Show all log and more detail information of testing.
221
224
 
222
225
  ## Benchmark
223
226
 
@@ -235,13 +238,13 @@ Set `someone` if you only run benchmark to match `someone` method.(e.g. benchmar
235
238
 
236
239
  Benchmark for parallel performance.
237
240
 
238
- `--cpu` option set process counts (default 1).
241
+ `--cpu` option set process counts (default `Etc.nprocessors`).
239
242
 
240
243
  And `--thread` option set thread counts (default 1).
241
244
 
242
245
  Benchmark fork, run and report each by process counts.
243
246
 
244
- (**process** and **thread** means ruby/linux process)
247
+ (**process** and **thread** means ruby/linux native process and thread)
245
248
 
246
249
  ```ruby
247
250
  module FooTest
@@ -259,10 +262,10 @@ end
259
262
 
260
263
  ```
261
264
  $ rgot foo_test.rb --bench . --cpu=2,4 --thread=2,4
262
- benchmark_any_func-2(2) 40 13363604.899 ns/op
263
- benchmark_any_func-2(4) 160 7125845.113 ns/op
264
- benchmark_any_func-4(2) 160 7224815.534 ns/op
265
- benchmark_any_func-4(4) 320 3652431.962 ns/op
265
+ benchmark_any_func-2(2) 40 13363604 ns/op
266
+ benchmark_any_func-2(4) 160 7125845 ns/op
267
+ benchmark_any_func-4(2) 160 7224815 ns/op
268
+ benchmark_any_func-4(4) 320 3652431 ns/op
266
269
  ok FooTest 3.061s
267
270
  ```
268
271
 
@@ -276,7 +279,30 @@ You can set timeout sec for testing (default 0).
276
279
 
277
280
  Fail testing and print raised exception message to STDERR if timeout.
278
281
 
279
- # Rgot::M (Main)
282
+ # Methods
283
+
284
+ ## Rgot
285
+
286
+ ### Rgot.benchmark
287
+
288
+ Run benchmark function without framework.
289
+
290
+ ```ruby
291
+ result = Rgot.benchmark do |b|
292
+ i = 0
293
+ while i < b.n
294
+ some_func()
295
+ i += 1
296
+ end
297
+ end
298
+ puts result #=> 100000 100 ns/op
299
+ ```
300
+
301
+ ### Rgot.verbose?
302
+
303
+ Check running with option verbose true/false.
304
+
305
+ ## Rgot::M (Main)
280
306
 
281
307
  Main method run first on testing.
282
308
 
@@ -311,23 +337,31 @@ module TestSomeCode
311
337
  end
312
338
  ```
313
339
 
314
- # Rgot::Common
340
+ ## Rgot::Common
315
341
 
316
342
  `Rgot::Common` is inherited to `Rgot::T` and `Rgot::B`
317
343
 
318
344
  `Rgot::Common` have some logging method.
319
345
 
320
- ## Rgot::Common#log
346
+ ### Rgot::Common#log
321
347
 
322
348
  ```ruby
323
- t.log("wooooo")
349
+ t.log("wooooo", 1, 2, 3)
324
350
  ```
325
351
 
326
352
  Write any log message.
327
353
 
328
354
  But this message to show need -v option.
329
355
 
330
- ## Rgot::Common#error
356
+ ### Rgot::Common#logf
357
+
358
+ Write any log message like sprintf.
359
+
360
+ ```ruby
361
+ t.logf("%d-%s", 10, "foo")
362
+ ```
363
+
364
+ ### Rgot::Common#error
331
365
 
332
366
  ```ruby
333
367
  t.error("expect #{a} got #{b}")
@@ -335,7 +369,23 @@ t.error("expect #{a} got #{b}")
335
369
 
336
370
  Test fail and show some error message.
337
371
 
338
- ## Rgot::Common#skip
372
+ ### Rgot::Common#errorf
373
+
374
+ Fail loggin same as logf
375
+
376
+ ### Rgot::Common#fatal
377
+
378
+ Testing stop and fail with log.
379
+
380
+ ```ruby
381
+ t.fatal("fatal error!")
382
+ ```
383
+
384
+ ### Rgot::Common#fatalf
385
+
386
+ Fatal logging same as logf
387
+
388
+ ### Rgot::Common#skip
339
389
 
340
390
  ```ruby
341
391
  t.skip("this method was skipped")
@@ -345,7 +395,11 @@ Skip current testing method.
345
395
 
346
396
  And run to next testing method.
347
397
 
348
- # Rgot::T (Testing)
398
+ ### Rgot::Common#skipf
399
+
400
+ Skip logging same as logf
401
+
402
+ ## Rgot::T (Testing)
349
403
 
350
404
  Testing is a main usage of this package.
351
405
 
@@ -358,13 +412,13 @@ end
358
412
 
359
413
  The `t` variable is instance of `Rgot::T` class means Testing.
360
414
 
361
- # Rgot::B (Benchmark)
415
+ ## Rgot::B (Benchmark)
362
416
 
363
417
  For Benchmark class.
364
418
 
365
419
  Can use log methods same as `Rgot::T` class
366
420
 
367
- ## Rgot::B#n
421
+ ### Rgot::B#n
368
422
 
369
423
  Automatic number calculated by running time.
370
424
 
@@ -380,7 +434,7 @@ def benchmark_something(b)
380
434
  end
381
435
  ```
382
436
 
383
- ## Rgot::B#reset_timer
437
+ ### Rgot::B#reset_timer
384
438
 
385
439
  Reset benchmark timer
386
440
 
@@ -396,15 +450,15 @@ def benchmark_something(b)
396
450
  end
397
451
  ```
398
452
 
399
- ## Rgot::B#start_timer
453
+ ### Rgot::B#start_timer
400
454
 
401
455
  Start benchmark timer
402
456
 
403
- ## Rgot::B#stop_timer
457
+ ### Rgot::B#stop_timer
404
458
 
405
459
  Stop benchmark timer
406
460
 
407
- ## Rgot::B#run_parallel
461
+ ### Rgot::B#run_parallel
408
462
 
409
463
  Start parallel benchmark using `fork` and `Thread.new`.
410
464
 
@@ -412,9 +466,9 @@ This method should be call with block.
412
466
 
413
467
  The block argument is instance of Rgot::PB.
414
468
 
415
- # Rgot::PB (Parallel Benchmark)
469
+ ## Rgot::PB (Parallel Benchmark)
416
470
 
417
- ## Rgot::PB#next
471
+ ### Rgot::PB#next
418
472
 
419
473
  Should be call this when parallel benchmark.
420
474
 
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require "bundler/gem_tasks"
2
2
 
3
3
  desc "test to rgot"
4
4
  task :test do |t|
5
- target = "test/rgot_test.rb"
5
+ target = "test/{rgot_common,rgot}_test.rb"
6
6
  ruby "bin/rgot -v #{target}"
7
7
  end
8
8
 
data/bin/rgot CHANGED
@@ -2,40 +2,43 @@
2
2
  require 'optparse'
3
3
  require 'rgot'
4
4
 
5
- opts = {
6
- require_paths: []
7
- }
5
+ opts = Rgot::M::Options.new
6
+ require_paths = []
8
7
  parser = OptionParser.new do |o|
9
8
  o.on '-v', '--verbose', "log all tests" do |arg|
10
- opts[:verbose] = arg
9
+ Rgot.class_eval{ @chatty = arg }
10
+ end
11
+ o.on '--version', "show Rgot version" do |arg|
12
+ puts "Rgot v#{Rgot::VERSION}"
13
+ exit 0
11
14
  end
12
15
  o.on '--bench [regexp]', "benchmark" do |arg|
13
16
  unless arg
14
17
  raise Rgot::OptionError, "missing argument for flag --bench"
15
18
  end
16
- opts[:bench] = arg
19
+ opts.bench = arg
17
20
  end
18
21
  o.on '--benchtime [sec]', "benchmark running time" do |arg|
19
- opts[:benchtime] = arg
22
+ opts.benchtime = arg
20
23
  end
21
24
  o.on '--timeout [sec]', "set timeout sec to testing" do |arg|
22
- opts[:timeout] = arg
25
+ opts.timeout = arg
23
26
  end
24
- o.on '--cpu [count,...]', "set cpu counts of comma splited" do |arg|
25
- opts[:cpu] = arg
27
+ o.on '--cpu [count,...]', "set cpu counts of comma split" do |arg|
28
+ opts.cpu = arg
26
29
  end
27
- o.on '--thread [count,...]', "set thread counts of comma splited" do |arg|
28
- opts[:thread] = arg
30
+ o.on '--thread [count,...]', "set thread counts of comma split" do |arg|
31
+ opts.thread = arg
29
32
  end
30
33
  o.on '--require [path]', "load some code before running" do |arg|
31
- opts[:require_paths] << arg
34
+ require_paths << arg
32
35
  end
33
36
  o.on '--load-path [path]', "Specify $LOAD_PATH directory" do |arg|
34
37
  $LOAD_PATH.unshift(arg)
35
38
  end
36
39
  end
37
40
  parser.parse!(ARGV)
38
- opts[:require_paths].each do |path|
41
+ require_paths.each do |path|
39
42
  require path
40
43
  end
41
44
 
@@ -71,59 +74,62 @@ modules = Object.constants.select { |c|
71
74
 
72
75
  code = 0
73
76
  modules.each do |test_module|
74
- pid = fork {
75
- tests = []
76
- benchmarks = []
77
- examples = []
78
- main = nil
79
- methods = test_module.instance_methods.sort
80
- methods.grep(/\Atest_/).each do |m|
81
- if m == :test_main && main.nil?
82
- main = Rgot::InternalTest.new(test_module, m)
83
- else
84
- tests << Rgot::InternalTest.new(test_module, m)
77
+ begin
78
+ pid = fork {
79
+ tests = []
80
+ benchmarks = []
81
+ examples = []
82
+ main = nil
83
+ methods = test_module.instance_methods.sort
84
+ methods.grep(/\Atest_/).each do |m|
85
+ if m == :test_main && main.nil?
86
+ main = Rgot::InternalTest.new(test_module, m)
87
+ else
88
+ tests << Rgot::InternalTest.new(test_module, m)
89
+ end
85
90
  end
86
- end
87
91
 
88
- methods.grep(/\Abenchmark_/).each do |m|
89
- benchmarks << Rgot::InternalBenchmark.new(test_module, m)
90
- end
92
+ methods.grep(/\Abenchmark_/).each do |m|
93
+ benchmarks << Rgot::InternalBenchmark.new(test_module, m)
94
+ end
91
95
 
92
- methods.grep(/\Aexample_?/).each do |m|
93
- examples << Rgot::InternalExample.new(test_module, m)
94
- end
96
+ methods.grep(/\Aexample_?/).each do |m|
97
+ examples << Rgot::InternalExample.new(test_module, m)
98
+ end
95
99
 
96
- duration = Rgot.now
97
- at_exit {
98
- template = "%s\t%s\t%.3fs"
100
+ duration = Rgot.now
101
+ at_exit {
102
+ template = "%s\t%s\t%.3fs"
99
103
 
100
- case $!
101
- when SystemExit
102
- if $!.success?
103
- # exit 0
104
- puts sprintf(template, "ok", test_module, Rgot.now - duration)
104
+ case $!
105
+ when SystemExit
106
+ if $!.success?
107
+ # exit 0
108
+ puts sprintf(template, "ok", test_module, Rgot.now - duration)
109
+ else
110
+ # exit 1
111
+ puts sprintf(template, "FAIL", test_module, Rgot.now - duration)
112
+ end
113
+ when NilClass
114
+ # not raise, not exit
105
115
  else
106
- # exit 1
116
+ # any exception
107
117
  puts sprintf(template, "FAIL", test_module, Rgot.now - duration)
108
118
  end
109
- when NilClass
110
- # not raise, not exit
119
+ }
120
+ m = Rgot::M.new(tests: tests, benchmarks: benchmarks, examples: examples, opts: opts)
121
+ if main
122
+ main.module.extend main.module
123
+ main.module.instance_method(main.name).bind(main.module).call(m)
111
124
  else
112
- # any exception
113
- puts sprintf(template, "FAIL", test_module, Rgot.now - duration)
125
+ exit m.run
114
126
  end
115
127
  }
116
- m = Rgot::M.new(tests: tests, benchmarks: benchmarks, examples: examples, opts: opts)
117
- if main
118
- main.module.extend main.module
119
- main.module.instance_method(main.name).bind(main.module).call(m)
120
- else
121
- exit m.run
128
+ ensure
129
+ _, status = Process.waitpid2(pid)
130
+ unless status.success?
131
+ code = 1
122
132
  end
123
- }
124
- _, status = Process.waitpid2(pid)
125
- unless status.success?
126
- code = 1
127
133
  end
128
134
  end
129
135
 
@@ -34,8 +34,16 @@ module Rgot
34
34
  end
35
35
  end
36
36
 
37
- def benchmark(opts={}, &block)
37
+ def benchmark(opts_hash={}, &block)
38
+ opts = B::Options.new
39
+ opts_hash.each do |k, v|
40
+ opts[k] = v
41
+ end
38
42
  B.new(nil, nil, opts).run(&block)
39
43
  end
44
+
45
+ def verbose?
46
+ @chatty
47
+ end
40
48
  end
41
49
  end
@@ -1,7 +1,13 @@
1
1
  module Rgot
2
2
  class B < Common
3
+ class Options < Struct.new(
4
+ :procs,
5
+ :threads,
6
+ :benchtime
7
+ ); end
8
+
3
9
  attr_accessor :n
4
- def initialize(benchmark_module, name, opts={})
10
+ def initialize(benchmark_module, name, opts=Options.new)
5
11
  super()
6
12
  @n = 1
7
13
  @module = benchmark_module
@@ -35,25 +41,27 @@ module Rgot
35
41
 
36
42
  def run(&block)
37
43
  n = 1
38
- benchtime = @opts.fetch(:benchtime, 1).to_f
39
- run_n(n.to_i, block)
40
- while !failed? && @duration < benchtime && @n < 1e9
41
- if @duration < (benchtime / 100.0)
42
- @n *= 100
43
- elsif @duration < (benchtime / 10.0)
44
- @n *= 10
45
- elsif @duration < (benchtime / 5.0)
46
- @n *= 5
47
- elsif @duration < (benchtime / 2.0)
48
- @n *= 2
49
- else
50
- if @n.to_i == 1
51
- break
44
+ benchtime = (@opts.benchtime || 1).to_f
45
+ catch(:skip) {
46
+ run_n(n.to_i, block)
47
+ while !failed? && @duration < benchtime && @n < 1e9
48
+ if @duration < (benchtime / 100.0)
49
+ @n *= 100
50
+ elsif @duration < (benchtime / 10.0)
51
+ @n *= 10
52
+ elsif @duration < (benchtime / 5.0)
53
+ @n *= 5
54
+ elsif @duration < (benchtime / 2.0)
55
+ @n *= 2
56
+ else
57
+ if @n.to_i == 1
58
+ break
59
+ end
60
+ @n *= 1.2
52
61
  end
53
- @n *= 1.2
62
+ run_n(@n.to_i, block)
54
63
  end
55
- run_n(@n.to_i, block)
56
- end
64
+ }
57
65
 
58
66
  BenchmarkResult.new(n: @n, t: @duration)
59
67
  end
@@ -61,16 +69,19 @@ module Rgot
61
69
  def run_parallel
62
70
  raise LocalJumpError, "no block given" unless block_given?
63
71
 
64
- @opts[:procs].times do
72
+ procs = (@opts.procs || 1)
73
+ threads = (@opts.threads || 1)
74
+
75
+ procs.times do
65
76
  fork {
66
- Array.new(@opts[:threads]) {
77
+ Array.new(threads) {
67
78
  Thread.new {
68
79
  yield PB.new(bn: @n)
69
80
  }.tap { |t| t.abort_on_exception = true }
70
81
  }.each(&:join)
71
82
  }
72
83
  end
73
- @n *= @opts[:procs] * @opts[:threads]
84
+ @n *= procs * threads
74
85
  Process.waitall
75
86
  end
76
87
 
@@ -78,7 +89,6 @@ module Rgot
78
89
 
79
90
  def run_n(n, block=nil)
80
91
  GC.start
81
- i = 0
82
92
  @n = n
83
93
  reset_timer
84
94
  start_timer
@@ -9,7 +9,7 @@ module Rgot
9
9
  end
10
10
 
11
11
  def to_s
12
- sprintf("%d\t%.3f ns/op", @n, @t / @n * 1_000_000_000)
12
+ sprintf("%d\t%d ns/op", @n, @t / @n * 1_000_000_000)
13
13
  end
14
14
  end
15
15
  end
@@ -1,62 +1,86 @@
1
+ require 'thread'
2
+
1
3
  module Rgot
2
4
  class Common
5
+ attr_accessor :output
6
+
3
7
  def initialize
4
8
  @output = ""
5
9
  @failed = false
6
10
  @skipped = false
7
11
  @finished = false
8
12
  @start = Rgot.now
13
+ @mutex = Mutex.new
9
14
  end
10
15
 
11
16
  def failed?
12
- @failed
17
+ @mutex.synchronize { @failed }
13
18
  end
14
19
 
15
20
  def skipped?
16
- @skipped
21
+ @mutex.synchronize { @skipped }
17
22
  end
18
23
 
19
24
  def finished?
20
- @finished
25
+ @mutex.synchronize { @finished }
21
26
  end
22
27
 
23
28
  def fail!
24
- @failed = true
29
+ @mutex.synchronize { @failed = true }
25
30
  end
26
31
 
27
32
  def skip!
28
- @skipped = true
33
+ @mutex.synchronize { @skipped = true }
29
34
  end
30
35
 
31
36
  def finish!
32
- @finished = true
37
+ @mutex.synchronize { @finished = true }
33
38
  end
34
39
 
35
40
  def log(*args)
36
- internal_log(sprintf(*args))
41
+ internal_log(args.map(&:to_s).join(' '))
37
42
  end
38
43
 
39
- def skip(*args)
44
+ def logf(*args)
40
45
  internal_log(sprintf(*args))
41
- skip_now
42
46
  end
43
47
 
44
- def skip_now
45
- skip!
46
- finish!
47
- throw :skip
48
+ def error(*args)
49
+ internal_log(args.map(&:to_s).join(' '))
50
+ fail!
48
51
  end
49
52
 
50
- def error(*args)
53
+ def errorf(*args)
51
54
  internal_log(sprintf(*args))
52
55
  fail!
53
56
  end
54
57
 
55
- def fatal(msg)
56
- internal_log(msg)
58
+ def fatal(*args)
59
+ internal_log(args.map(&:to_s).join(' '))
60
+ fail_now
61
+ end
62
+
63
+ def fatalf(*args)
64
+ internal_log(sprintf(*args))
57
65
  fail_now
58
66
  end
59
67
 
68
+ def skip(*args)
69
+ internal_log(args.map(&:to_s).join(' '))
70
+ skip_now
71
+ end
72
+
73
+ def skipf(*args)
74
+ internal_log(sprintf(*args))
75
+ skip_now
76
+ end
77
+
78
+ def skip_now
79
+ skip!
80
+ finish!
81
+ throw :skip
82
+ end
83
+
60
84
  def fail_now
61
85
  fail!
62
86
  finish!
@@ -74,7 +98,7 @@ module Rgot
74
98
  end
75
99
 
76
100
  def internal_log(msg)
77
- @output << decorate(msg)
101
+ @mutex.synchronize { @output << decorate(msg) }
78
102
  end
79
103
  end
80
104
  end
@@ -1,38 +1,42 @@
1
1
  require 'stringio'
2
+ require 'etc'
2
3
 
3
4
  module Rgot
4
5
  class M
6
+ class Options < Struct.new(
7
+ :bench,
8
+ :benchtime,
9
+ :timeout,
10
+ :cpu,
11
+ :thread,
12
+ ); end
13
+
5
14
  # Ruby-2.0.0 wants default value of keyword_argument
6
- def initialize(tests: nil, benchmarks: nil, examples: nil, opts: {})
15
+ def initialize(tests: nil, benchmarks: nil, examples: nil, opts: Options.new)
7
16
  raise ArgumentError, "missing keyword: tests" unless tests
8
17
  raise ArgumentError, "missing keyword: benchmarks" unless benchmarks
9
18
  raise ArgumentError, "missing keyword: examples" unless examples
10
-
11
- @tests = tests
12
- @benchmarks = benchmarks
13
- @examples = examples
14
- @opts = opts
15
- @cpu_list = @opts.fetch(:cpu, "1").split(',').map { |i|
19
+ @cpu_list = (opts.cpu || "#{Etc.nprocessors}").split(',').map { |i|
16
20
  j = i.to_i
17
- if j == 0
18
- raise OptionError, "expect integer string, got #{i.inspect}"
19
- end
21
+ raise Rgot::OptionError, "invalid value #{i.inspect} for --cpu" unless 0 < j
20
22
  j
21
23
  }
22
- @thread_list = @opts.fetch(:thread, "1").split(',').map { |i|
24
+ @thread_list = (opts.thread || "1").split(',').map { |i|
23
25
  j = i.to_i
24
- if j == 0
25
- raise OptionError, "expect integer string, got #{i.inspect}"
26
- end
26
+ raise Rgot::OptionError, "invalid value #{i.inspect} for --thread" unless 0 < j
27
27
  j
28
28
  }
29
+ @tests = tests
30
+ @benchmarks = benchmarks
31
+ @examples = examples
32
+ @opts = opts
29
33
  end
30
34
 
31
35
  def run
32
36
  test_ok = false
33
37
  example_ok = false
34
38
 
35
- Timeout.timeout(@opts[:timeout].to_f) {
39
+ Timeout.timeout(@opts.timeout.to_f) {
36
40
  test_ok = run_tests
37
41
  example_ok = run_examples
38
42
  }
@@ -40,7 +44,7 @@ module Rgot
40
44
  puts "FAIL"
41
45
  return 1
42
46
  end
43
- puts "PASS" if @opts[:verbose]
47
+ puts "PASS" if Rgot.verbose?
44
48
  run_benchmarks
45
49
  0
46
50
  end
@@ -50,8 +54,8 @@ module Rgot
50
54
  def run_tests
51
55
  ok = true
52
56
  @tests.each do |test|
53
- t = T.new(test.module, test.name.to_sym, @opts)
54
- if @opts[:verbose]
57
+ t = T.new(test.module, test.name.to_sym)
58
+ if Rgot.verbose?
55
59
  puts "=== RUN #{test.name}"
56
60
  end
57
61
  t.run
@@ -65,15 +69,16 @@ module Rgot
65
69
 
66
70
  def run_benchmarks
67
71
  ok = true
68
- return ok unless @opts[:bench]
72
+ return ok unless @opts.bench
69
73
  @benchmarks.each do |bench|
70
- next unless /#{@opts[:bench]}/ =~ bench.name
74
+ next unless /#{@opts.bench}/ =~ bench.name
71
75
 
72
76
  @cpu_list.each do |procs|
73
77
  @thread_list.each do |threads|
74
- opts = @opts.dup
75
- opts[:procs] = procs
76
- opts[:threads] = threads
78
+ opts = B::Options.new
79
+ opts.benchtime = @opts.benchtime
80
+ opts.procs = procs
81
+ opts.threads = threads
77
82
  b = B.new(bench.module, bench.name.to_sym, opts)
78
83
 
79
84
  benchname = bench.name.to_s
@@ -81,9 +86,13 @@ module Rgot
81
86
  benchname << "(#{threads})" if 1 < threads
82
87
  print "#{benchname}\t"
83
88
  result = b.run
84
- puts result
85
89
  if b.failed?
86
90
  ok = false
91
+ next
92
+ end
93
+ puts result
94
+ if 0 < b.output.length
95
+ printf("--- BENCH: %s\n%s", benchname, b.output)
87
96
  end
88
97
  end
89
98
  end
@@ -94,7 +103,7 @@ module Rgot
94
103
  def run_examples
95
104
  ok = true
96
105
  @examples.each do |example|
97
- if @opts[:verbose]
106
+ if Rgot.verbose?
98
107
  puts "=== RUN #{example.name}"
99
108
  end
100
109
  example.module.extend(example.module)
@@ -1,10 +1,9 @@
1
1
  module Rgot
2
2
  class T < Common
3
- def initialize(test_module, name, opts={})
3
+ def initialize(test_module, name)
4
4
  super()
5
5
  @module = test_module
6
6
  @name = name
7
- @opts = opts
8
7
  @module.extend @module
9
8
  end
10
9
 
@@ -24,7 +23,7 @@ module Rgot
24
23
  template = "--- %s: %s (%.5fs)\n%s"
25
24
  if failed?
26
25
  printf template, "FAIL", @name, duration, @output
27
- elsif @opts[:verbose]
26
+ elsif Rgot.verbose?
28
27
  if skipped?
29
28
  printf template, "SKIP", @name, duration, @output
30
29
  else
@@ -1,3 +1,3 @@
1
1
  module Rgot
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rgot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - ksss
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-20 00:00:00.000000000 Z
11
+ date: 2015-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler