scout-gear 6.0.0 → 7.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 +4 -4
- data/.vimproject +436 -432
- data/VERSION +1 -1
- data/lib/scout/exceptions.rb +8 -0
- data/lib/scout/log/color.rb +29 -2
- data/lib/scout/log/progress/util.rb +2 -0
- data/lib/scout/log/progress.rb +2 -0
- data/lib/scout/log.rb +5 -1
- data/lib/scout/misc/digest.rb +1 -3
- data/lib/scout/open/stream.rb +20 -19
- data/lib/scout/tsv/parser.rb +144 -0
- data/lib/scout/tsv.rb +14 -0
- data/lib/scout/work_queue/worker.rb +16 -11
- data/lib/scout/work_queue.rb +48 -21
- data/lib/scout/workflow/step/info.rb +2 -2
- data/lib/scout/workflow/step.rb +2 -1
- data/lib/scout/workflow/task.rb +2 -2
- data/scout-gear.gemspec +7 -3
- data/test/scout/open/test_stream.rb +1 -1
- data/test/scout/test_semaphore.rb +1 -1
- data/test/scout/test_tsv.rb +34 -0
- data/test/scout/test_work_queue.rb +28 -0
- data/test/scout/tsv/test_parser.rb +87 -0
- data/test/scout/work_queue/test_worker.rb +48 -0
- metadata +6 -2
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
class TestTSV < Test::Unit::TestCase
|
5
|
+
def test_open_with_data
|
6
|
+
content =<<-'EOF'
|
7
|
+
#: :sep=/\s+/#:type=:double#:merge=:concat
|
8
|
+
#Id ValueA ValueB OtherID
|
9
|
+
row1 a|aa|aaa b Id1|Id2
|
10
|
+
row2 A B Id3
|
11
|
+
row2 a a id3
|
12
|
+
EOF
|
13
|
+
|
14
|
+
content2 =<<-'EOF'
|
15
|
+
#: :sep=/\s+/#:type=:double#:merge=:concat
|
16
|
+
#Id ValueA ValueB OtherID
|
17
|
+
row3 a|aa|aaa b Id1|Id2
|
18
|
+
row4 A B Id3
|
19
|
+
row4 a a id3
|
20
|
+
EOF
|
21
|
+
|
22
|
+
tsv = TmpFile.with_file(content) do |filename|
|
23
|
+
TSV.open(filename)
|
24
|
+
end
|
25
|
+
|
26
|
+
TmpFile.with_file(content2) do |filename|
|
27
|
+
TSV.open(filename, :data => tsv)
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_include tsv.keys, 'row4'
|
31
|
+
assert_include tsv.keys, 'row1'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -89,5 +89,33 @@ class TestWorkQueue < Test::Unit::TestCase
|
|
89
89
|
|
90
90
|
assert_equal 0, res.length
|
91
91
|
end
|
92
|
+
|
93
|
+
def test_queue_error
|
94
|
+
num = 10
|
95
|
+
reps = 10_000
|
96
|
+
|
97
|
+
q = WorkQueue.new num do |obj|
|
98
|
+
raise ScoutException if rand < 1
|
99
|
+
[Process.pid.to_s, obj.to_s] * " "
|
100
|
+
end
|
101
|
+
|
102
|
+
res = []
|
103
|
+
q.process do |out|
|
104
|
+
res << out
|
105
|
+
end
|
106
|
+
|
107
|
+
pid = Process.fork do
|
108
|
+
reps.times do |i|
|
109
|
+
q.write i
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
Process.wait pid
|
114
|
+
|
115
|
+
assert_raise ScoutException do
|
116
|
+
q.close
|
117
|
+
q.join
|
118
|
+
end
|
119
|
+
end
|
92
120
|
end
|
93
121
|
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
|
2
|
+
require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
|
3
|
+
|
4
|
+
require 'scout/tsv'
|
5
|
+
class TestTSVParser < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_parse_line
|
8
|
+
line = (0..10).to_a * "\t"
|
9
|
+
key, values = TSV.parse_line(line)
|
10
|
+
|
11
|
+
assert_equal "0", key
|
12
|
+
assert_equal (1..10).collect{|v| v.to_s }, values
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_parse_double
|
16
|
+
line = (0..10).collect{|v| v == 0 ? v : [v,v] * "|" } * "\t"
|
17
|
+
key, values = TSV.parse_line(line, type: :double, cast: :to_i)
|
18
|
+
|
19
|
+
assert_equal "0", key
|
20
|
+
assert_equal (1..10).collect{|v| [v,v] }, values
|
21
|
+
end
|
22
|
+
|
23
|
+
def __test_benchmark
|
24
|
+
num = 10_000
|
25
|
+
txt = num.times.inject(nil) do |acc,i|
|
26
|
+
(acc.nil? ? "" : acc << "\n") << (0..10).collect{|v| v == 0 ? i : [v,v] * "|" } * "\t"
|
27
|
+
end
|
28
|
+
|
29
|
+
txt = StringIO.new(([txt] * (10))*"\n")
|
30
|
+
Misc.benchmark 1 do
|
31
|
+
#Misc.profile do
|
32
|
+
data = TSV.parse_stream(txt, fix: true, type: :double, bar: true, merge: :concat)
|
33
|
+
assert_equal num, data.size
|
34
|
+
assert_equal 20, data['1'][0].length
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_parse_stream
|
39
|
+
lines =<<-EOF
|
40
|
+
1 2 3 4 5
|
41
|
+
11 12 13 14 15
|
42
|
+
EOF
|
43
|
+
|
44
|
+
lines = StringIO.new lines
|
45
|
+
|
46
|
+
data = TSV.parse_stream lines, sep: " "
|
47
|
+
assert_equal data["1"], %w(2 3 4 5)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_parse_stream_block
|
51
|
+
lines =<<-EOF
|
52
|
+
1 2 3 4 5
|
53
|
+
11 12 13 14 15
|
54
|
+
EOF
|
55
|
+
|
56
|
+
lines = StringIO.new lines
|
57
|
+
|
58
|
+
sum = 0
|
59
|
+
res = TSV.parse_stream(lines, sep: " ") do |k,values|
|
60
|
+
sum += values.inject(0){|acc,i| acc += i.to_i }
|
61
|
+
end
|
62
|
+
assert_equal 68, sum
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_parse_header
|
66
|
+
header =<<-EOF
|
67
|
+
#: :sep=" "
|
68
|
+
#Key ValueA ValueB
|
69
|
+
k A B
|
70
|
+
EOF
|
71
|
+
header = StringIO.new header
|
72
|
+
|
73
|
+
assert_equal "Key", TSV.parse_header(header)[1]
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_parse
|
77
|
+
header =<<-EOF
|
78
|
+
#: :sep=" "#:type=:double
|
79
|
+
#Key ValueA ValueB
|
80
|
+
k a|A b|B
|
81
|
+
EOF
|
82
|
+
header = StringIO.new header
|
83
|
+
|
84
|
+
tsv = TSV.parse(header)
|
85
|
+
assert_equal 'a', tsv['k'][0][0]
|
86
|
+
end
|
87
|
+
end
|
@@ -95,5 +95,53 @@ class TestQueueWorker < Test::Unit::TestCase
|
|
95
95
|
output.clean
|
96
96
|
end
|
97
97
|
|
98
|
+
def test_process_exception
|
99
|
+
input = WorkQueue::Socket.new
|
100
|
+
output = WorkQueue::Socket.new
|
101
|
+
|
102
|
+
workers = 10.times.collect{ WorkQueue::Worker.new }
|
103
|
+
workers.each do |w|
|
104
|
+
w.process(input, output) do |obj|
|
105
|
+
raise ScoutException
|
106
|
+
[Process.pid, obj.inspect] * " "
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
read = Thread.new do
|
111
|
+
Thread.current.report_on_exception = false
|
112
|
+
begin
|
113
|
+
while obj = output.read
|
114
|
+
if DoneProcessing === obj
|
115
|
+
pid = obj.pid
|
116
|
+
workers.delete_if{|w| w.pid = pid }
|
117
|
+
break if workers.empty?
|
118
|
+
end
|
119
|
+
raise obj if Exception === obj
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
write = Thread.new do
|
125
|
+
Thread.report_on_exception = false
|
126
|
+
100.times do |i|
|
127
|
+
input.write i
|
128
|
+
end
|
129
|
+
10.times do
|
130
|
+
input.write DoneProcessing.new
|
131
|
+
end
|
132
|
+
input.close_write
|
133
|
+
end
|
134
|
+
|
135
|
+
write.join
|
136
|
+
|
137
|
+
assert_raise ScoutException do
|
138
|
+
read.join
|
139
|
+
end
|
140
|
+
|
141
|
+
WorkQueue::Worker.join workers
|
142
|
+
input.clean
|
143
|
+
output.clean
|
144
|
+
end
|
145
|
+
|
98
146
|
end
|
99
147
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scout-gear
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: term-ansicolor
|
@@ -146,6 +146,8 @@ files:
|
|
146
146
|
- lib/scout/simple_opt/parse.rb
|
147
147
|
- lib/scout/simple_opt/setup.rb
|
148
148
|
- lib/scout/tmpfile.rb
|
149
|
+
- lib/scout/tsv.rb
|
150
|
+
- lib/scout/tsv/parser.rb
|
149
151
|
- lib/scout/work_queue.rb
|
150
152
|
- lib/scout/work_queue/socket.rb
|
151
153
|
- lib/scout/work_queue/worker.rb
|
@@ -206,8 +208,10 @@ files:
|
|
206
208
|
- test/scout/test_resource.rb
|
207
209
|
- test/scout/test_semaphore.rb
|
208
210
|
- test/scout/test_tmpfile.rb
|
211
|
+
- test/scout/test_tsv.rb
|
209
212
|
- test/scout/test_work_queue.rb
|
210
213
|
- test/scout/test_workflow.rb
|
214
|
+
- test/scout/tsv/test_parser.rb
|
211
215
|
- test/scout/work_queue/test_socket.rb
|
212
216
|
- test/scout/work_queue/test_worker.rb
|
213
217
|
- test/scout/workflow/step/test_info.rb
|