rgot 0.0.5 → 0.1.0

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: 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