weel 1.1.1 → 1.2.1

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.
data/Changelog CHANGED
@@ -1,3 +1,8 @@
1
+ 1.2.x
2
+ -----
3
+
4
+ Ruby >= 1.9.3 only, use Queue instead of Threads and Mutexes of Weel::Continue
5
+
1
6
  1.1.x
2
7
  -----
3
8
  Simulation support: #sim is like search mode but without search positions and
@@ -194,19 +194,19 @@ class WEEL
194
194
 
195
195
  class Continue #{{{
196
196
  def initialize
197
- @thread = Thread.new{Thread.stop}
197
+ @q = Queue.new
198
+ @m = Mutex.new
198
199
  end
199
200
  def waiting?
200
- @thread.alive?
201
+ @m.synchronize do
202
+ !@q.empty?
203
+ end
201
204
  end
202
205
  def continue
203
- while @thread.status != 'sleep' && @thread.alive?
204
- Thread.pass
205
- end
206
- @thread.wakeup if @thread.alive?
206
+ @q.push nil
207
207
  end
208
208
  def wait
209
- @thread.join
209
+ @q.deq
210
210
  end
211
211
  end #}}}
212
212
 
@@ -525,9 +525,9 @@ class WEEL
525
525
  Thread.current[:alternative_mode] ||= []
526
526
  Thread.current[:alternative_executed] << false
527
527
  Thread.current[:alternative_mode] << mode
528
- hw, pos = __weel_sim_start(:choose,:mode => Thread.current[:alternative_mode]) if __weel_sim
528
+ hw, pos = __weel_sim_start(:choose,:mode => Thread.current[:alternative_mode].last) if __weel_sim
529
529
  yield
530
- __weel_sim_stop(:choose,hw,pos,:mode => Thread.current[:alternative_mode]) if __weel_sim
530
+ __weel_sim_stop(:choose,hw,pos,:mode => Thread.current[:alternative_mode].last) if __weel_sim
531
531
  Thread.current[:alternative_executed].pop
532
532
  Thread.current[:alternative_mode].pop
533
533
  nil
@@ -620,15 +620,12 @@ class WEEL
620
620
  end # }}}
621
621
  def __weel_recursive_continue(thread)# {{{
622
622
  return unless thread
623
- if thread.alive? && thread[:continue] && thread[:continue].waiting?
623
+ if thread.alive? && thread[:continue]
624
624
  thread[:continue].continue
625
625
  end
626
- if thread.alive? && thread[:branch_event] && thread[:branch_event].waiting?
626
+ if thread.alive? && thread[:branch_event]
627
627
  thread[:mutex].synchronize do
628
- unless thread[:branch_event].nil?
629
- thread[:branch_event].continue
630
- # thread[:branch_event] = nil
631
- end
628
+ thread[:branch_event].continue unless thread[:branch_event].nil?
632
629
  end
633
630
  end
634
631
  if thread[:branches]
@@ -51,6 +51,50 @@ class Trace #{{{
51
51
  nil
52
52
  end
53
53
 
54
+ def generate_list
55
+ pp self
56
+ pp recursive_generate_list(self,:otherwise=>false)
57
+ end
58
+
59
+ def recursive_generate_list(container,options)
60
+ traces = [[]]
61
+ container.each do |ele|
62
+ case ele
63
+ when TraceActivity
64
+ traces.last << ele.tid
65
+ when TraceChoose
66
+ options[:otherwise] = true
67
+ tmp = recursive_generate_list(ele,options)
68
+ options[:otherwise] = false
69
+ add_traces(traces,tmp)
70
+
71
+ #tmp = recursive_generate_list(ele,options)
72
+ when TraceAlternative
73
+ next if options[:otherwise]
74
+ tmp = recursive_generate_list(ele,options)
75
+ add_traces(traces,tmp)
76
+ when TraceOtherwise
77
+ next unless options[:otherwise]
78
+ options[:otherwise] = false
79
+ tmp = recursive_generate_list(ele,options)
80
+ p tmp
81
+ p '---'
82
+ add_traces(traces,tmp)
83
+ options[:otherwise] = true
84
+ end
85
+ end
86
+ traces
87
+ end
88
+
89
+ def add_traces(before,newones)
90
+ before.each do |trc|
91
+ newones.each do |no|
92
+ p trc
93
+ trc += no
94
+ end
95
+ end
96
+ end
97
+
54
98
  private :recursive_get_container
55
99
  end #}}}
56
100
 
@@ -74,7 +118,7 @@ class TraceContainer < TraceBase #{{{
74
118
  def close!; @open = false; end
75
119
  end #}}}
76
120
 
77
- class TraceElement < TraceBase #{{{
121
+ class TraceActivity < TraceBase #{{{
78
122
  attr_accessor :item
79
123
  def initialize(tid, item)
80
124
  super tid
@@ -107,8 +151,6 @@ class PlainTrace
107
151
  end
108
152
  end
109
153
 
110
- $trace = Trace.new
111
-
112
154
  class SimHandlerWrapper < WEEL::HandlerWrapperBase
113
155
  def initialize(args,endpoint=nil,position=nil,continue=nil)
114
156
  @__myhandler_stopped = false
@@ -119,11 +161,11 @@ class SimHandlerWrapper < WEEL::HandlerWrapperBase
119
161
  end
120
162
 
121
163
  def simulate(type,nesting,tid,parent,parameters={})
122
- pp "#{type} - #{nesting} - #{tid} - #{parent} - #{parameters.inspect}"
164
+ # pp "#{type} - #{nesting} - #{tid} - #{parent} - #{parameters.inspect}"
123
165
 
124
166
  case type
125
167
  when :activity
126
- $trace.get_container(parent) << TraceElement.new(tid,parameters[:endpoint])
168
+ $trace.get_container(parent) << TraceActivity.new(tid,parameters[:endpoint])
127
169
  when :parallel
128
170
  simulate_add_to_container($trace,nesting,parent,tid) { TraceParallel.new(tid) }
129
171
  when :loop
@@ -68,6 +68,7 @@ class TestParallel < Test::Unit::TestCase
68
68
  parallel :wait => 1 do
69
69
  parallel_branch do
70
70
  activity :a_1, :call, :endpoint1
71
+ Thread.pass
71
72
  end
72
73
  parallel_branch do
73
74
  activity :a_2, :call, :endpoint1, :call => Proc.new{ sleep 0.5 }
@@ -4,11 +4,11 @@ require File.expand_path(::File.dirname(__FILE__) + '/../TestWorkflow')
4
4
  class TestState < Test::Unit::TestCase
5
5
  include TestMixin
6
6
 
7
- def test_check_state
8
- s = @wf.state
9
- assert(s.is_a?(Symbol), "state is not a symbol")
10
- assert(s == :ready, "state is not set to :ready, it is #{s}")
11
- end
7
+ #def test_check_state
8
+ # s = @wf.state
9
+ # assert(s.is_a?(Symbol), "state is not a symbol")
10
+ # assert(s == :ready, "state is not set to :ready, it is #{s}")
11
+ #end
12
12
  def test_check_stop_state
13
13
  @wf.start
14
14
  @wf.stop.join
@@ -10,6 +10,7 @@ class TestWFPStructuredDiscriminator < Test::Unit::TestCase
10
10
  parallel :wait => 1 do
11
11
  parallel_branch do
12
12
  activity :a_1_1, :call, :endpoint1
13
+ Thread.pass
13
14
  end
14
15
  parallel_branch do
15
16
  activity :a_1_2, :call, :endpoint1, :call => Proc.new{sleep 0.2}
@@ -12,6 +12,7 @@ class TestWFPDeferredChoice < Test::Unit::TestCase
12
12
  activity :a1_1, :call, :endpoint1 do
13
13
  data.choice = 1
14
14
  end
15
+ Thread.pass
15
16
  end
16
17
  parallel_branch do
17
18
  activity(:a1_2, :call, :endpoint1, :call => Proc.new{sleep 1.0}) do
@@ -30,8 +31,9 @@ class TestWFPDeferredChoice < Test::Unit::TestCase
30
31
  end
31
32
  @wf.start.join
32
33
  wf_assert('CALL a1_1')
33
- wf_assert('CALL a1_2')
34
- wf_sassert('Da1_1NLNa1_2Ca2_1Da2_1|finished|')
34
+ wf_assert('DONE a1_1')
35
+ wf_assert('MANIPULATE a1_1')
36
+ wf_sassert('NLNa1_2Ca2_1Da2_1|finished|')
35
37
  data = @wf.data
36
38
  assert(data[:choice] == 1, "data[:choice] has not the correct value [#{data[:x]}]")
37
39
  end
@@ -1,18 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "weel"
3
- s.version = "1.1.1"
3
+ s.version = "1.2.1"
4
4
  s.platform = Gem::Platform::RUBY
5
- s.summary = "preliminary release of the Workflow Execution Engine Library (WEEL)"
5
+ s.license = "LGPL-2"
6
+ s.summary = "Preliminary release of the Workflow Execution Engine Library (WEEL)"
6
7
 
7
- s.description = <<-EOF
8
- For WEE Library specific information see http://cpee.org/.
8
+ s.description = "Workflow Execution Engine Library (WEEL)"
9
9
 
10
- Copyright (C) 2008-2013 Jürgen Mangler <juergen.mangler@gmail.com> and others.
11
-
12
- WEE Library is freely distributable according to the terms of the GNU Lesser General Public License (see the file 'COPYING').
13
-
14
- This program is distributed without any warranty. See the file 'COPYING' for details.
15
- EOF
10
+ s.required_ruby_version = '>=1.9.3'
16
11
 
17
12
  s.files = Dir['{example/**/*,lib/weel.rb}'] + %w(COPYING Changelog FEATURES INSTALL Rakefile weel.gemspec README AUTHORS)
18
13
  s.require_path = 'lib'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weel
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,21 +10,9 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-12 00:00:00.000000000 Z
13
+ date: 2013-06-21 00:00:00.000000000 Z
14
14
  dependencies: []
15
- description: ! 'For WEE Library specific information see http://cpee.org/.
16
-
17
-
18
- Copyright (C) 2008-2013 Jürgen Mangler <juergen.mangler@gmail.com> and others.
19
-
20
-
21
- WEE Library is freely distributable according to the terms of the GNU Lesser General
22
- Public License (see the file ''COPYING'').
23
-
24
-
25
- This program is distributed without any warranty. See the file ''COPYING'' for details.
26
-
27
- '
15
+ description: Workflow Execution Engine Library (WEEL)
28
16
  email: juergen.mangler@gmail.com
29
17
  executables: []
30
18
  extensions: []
@@ -46,36 +34,37 @@ files:
46
34
  - test/SimHandlerWrapper.rb
47
35
  - test/TestHandlerWrapper.rb
48
36
  - test/ContinueTest.rb
49
- - test/TestMixin.rb
50
37
  - test/TestWorkflow.rb
51
- - test/wfp_state_based/tc_interleavedparallelrouting.rb
38
+ - test/TestMixin.rb
39
+ - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
40
+ - test/wfp_basic/tc_parallelsplit_synchronization.rb
41
+ - test/wfp_basic/tc_sequence.rb
52
42
  - test/wfp_state_based/tc_deferredchoice.rb
43
+ - test/wfp_state_based/tc_interleavedparallelrouting.rb
53
44
  - test/wfp_iteration/tc_structuredloop.rb
54
- - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
55
- - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
56
- - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
57
- - test/wfp_adv_branching/tc_threadmerge.rb
58
- - test/wfp_adv_branching/tc_generalizedjoin.rb
59
- - test/wfp_adv_branching/tc_threadsplit.rb
60
- - test/wfp_adv_branching/tc_multimerge.rb
61
- - test/wfp_adv_branching/tc_structured_discriminator.rb
62
- - test/wfp_adv_branching/tc_structured_partial_join.rb
45
+ - test/basic/tc_choose.rb
46
+ - test/basic/tc_wf_control.rb
47
+ - test/basic/tc_endpoint.rb
48
+ - test/basic/tc_parallel.rb
63
49
  - test/basic/tc_codereplace.rb
64
50
  - test/basic/tc_data.rb
65
- - test/basic/tc_handler.rb
66
- - test/basic/tc_parallel.rb
67
51
  - test/basic/tc_search.rb
68
- - test/basic/tc_endpoint.rb
69
- - test/basic/tc_wf_control.rb
70
- - test/basic/tc_choose.rb
71
52
  - test/basic/tc_state.rb
72
- - test/complex/tc_parallel_stop.rb
53
+ - test/basic/tc_handler.rb
54
+ - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
55
+ - test/wfp_adv_branching/tc_threadsplit.rb
56
+ - test/wfp_adv_branching/tc_multimerge.rb
57
+ - test/wfp_adv_branching/tc_threadmerge.rb
58
+ - test/wfp_adv_branching/tc_structured_partial_join.rb
59
+ - test/wfp_adv_branching/tc_generalizedjoin.rb
60
+ - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
61
+ - test/wfp_adv_branching/tc_structured_discriminator.rb
62
+ - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
73
63
  - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
74
- - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
75
- - test/wfp_basic/tc_sequence.rb
76
- - test/wfp_basic/tc_parallelsplit_synchronization.rb
64
+ - test/complex/tc_parallel_stop.rb
77
65
  homepage: http://cpee.org
78
- licenses: []
66
+ licenses:
67
+ - LGPL-2
79
68
  post_install_message:
80
69
  rdoc_options: []
81
70
  require_paths:
@@ -85,7 +74,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
85
74
  requirements:
86
75
  - - ! '>='
87
76
  - !ruby/object:Gem::Version
88
- version: '0'
77
+ version: 1.9.3
89
78
  required_rubygems_version: !ruby/object:Gem::Requirement
90
79
  none: false
91
80
  requirements:
@@ -94,39 +83,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
83
  version: '0'
95
84
  requirements: []
96
85
  rubyforge_project:
97
- rubygems_version: 1.8.11
86
+ rubygems_version: 1.8.23
98
87
  signing_key:
99
88
  specification_version: 3
100
- summary: preliminary release of the Workflow Execution Engine Library (WEEL)
89
+ summary: Preliminary release of the Workflow Execution Engine Library (WEEL)
101
90
  test_files:
102
91
  - test/SimHandlerWrapper.rb
103
92
  - test/TestHandlerWrapper.rb
104
93
  - test/ContinueTest.rb
105
- - test/TestMixin.rb
106
94
  - test/TestWorkflow.rb
107
- - test/wfp_state_based/tc_interleavedparallelrouting.rb
95
+ - test/TestMixin.rb
96
+ - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
97
+ - test/wfp_basic/tc_parallelsplit_synchronization.rb
98
+ - test/wfp_basic/tc_sequence.rb
108
99
  - test/wfp_state_based/tc_deferredchoice.rb
100
+ - test/wfp_state_based/tc_interleavedparallelrouting.rb
109
101
  - test/wfp_iteration/tc_structuredloop.rb
110
- - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
111
- - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
112
- - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
113
- - test/wfp_adv_branching/tc_threadmerge.rb
114
- - test/wfp_adv_branching/tc_generalizedjoin.rb
115
- - test/wfp_adv_branching/tc_threadsplit.rb
116
- - test/wfp_adv_branching/tc_multimerge.rb
117
- - test/wfp_adv_branching/tc_structured_discriminator.rb
118
- - test/wfp_adv_branching/tc_structured_partial_join.rb
102
+ - test/basic/tc_choose.rb
103
+ - test/basic/tc_wf_control.rb
104
+ - test/basic/tc_endpoint.rb
105
+ - test/basic/tc_parallel.rb
119
106
  - test/basic/tc_codereplace.rb
120
107
  - test/basic/tc_data.rb
121
- - test/basic/tc_handler.rb
122
- - test/basic/tc_parallel.rb
123
108
  - test/basic/tc_search.rb
124
- - test/basic/tc_endpoint.rb
125
- - test/basic/tc_wf_control.rb
126
- - test/basic/tc_choose.rb
127
109
  - test/basic/tc_state.rb
128
- - test/complex/tc_parallel_stop.rb
110
+ - test/basic/tc_handler.rb
111
+ - test/wfp_adv_branching/tc_multichoice_structuredsynchronizingmerge.rb
112
+ - test/wfp_adv_branching/tc_threadsplit.rb
113
+ - test/wfp_adv_branching/tc_multimerge.rb
114
+ - test/wfp_adv_branching/tc_threadmerge.rb
115
+ - test/wfp_adv_branching/tc_structured_partial_join.rb
116
+ - test/wfp_adv_branching/tc_generalizedjoin.rb
117
+ - test/wfp_adv_branching/tc_generalsynchronizingmerge.rb
118
+ - test/wfp_adv_branching/tc_structured_discriminator.rb
119
+ - test/wfp_adv_branching/tc_localsynchronizingmerge.rb
129
120
  - test/complex/tc_generalsynchonizingmerge_loopsearch.rb
130
- - test/wfp_basic/tc_exclusivechoice_simplemerge.rb
131
- - test/wfp_basic/tc_sequence.rb
132
- - test/wfp_basic/tc_parallelsplit_synchronization.rb
121
+ - test/complex/tc_parallel_stop.rb