iotas 0.0.4 → 0.0.5

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/spec/board_spec.rb DELETED
@@ -1,95 +0,0 @@
1
- #! /usr/bin/env ruby
2
- # -*- coding: UTF-8 -*-
3
- #
4
-
5
- require 'spec_helper'
6
- #
7
- describe Iotas::Board do
8
- #
9
- before (:all) do
10
- @spin = Iotas::Spin.new 'dom0'
11
- end
12
- #
13
- before(:each) do
14
- @spin.clear!
15
- end
16
- #
17
- it "require_p release_p" do
18
- board = Iotas::Board.new 'hell', @spin
19
- p0 = board.require_p Iotas::Particle
20
- p0.src.should be board
21
- p1 = board.require_p Iotas::Particle
22
- p1.src.should be board
23
- (p0===p1).should be_false
24
- board.release_p p0
25
- p2 = board.require_p Iotas::Particle
26
- p2.src.should be board
27
- (p0===p2).should be_true
28
- end
29
- #
30
- it "particle wait and merge" do
31
- p0 = Iotas::Particle.new
32
- p0['k0'] = 'v0'
33
- p0['k1'] = 'neither'
34
- p0['k2'] = 'v2'
35
- p0.set_link_fields 'k0,k2'
36
- p0.link_value.should eql 'v0v2'
37
- p1 = Iotas::Particle.new
38
- p1['k0'] = 'v0'
39
- p1['k1'] = 'nore'
40
- p1['k2'] = 'v2'
41
- p1.set_link_fields 'k0,k2'
42
- p1.link_value.should eql 'v0v2'
43
- P0 = p0
44
- P1 = p1
45
- class Board0 < Iotas::Board
46
- attr_reader :ok, :follow
47
- def receive_p p
48
- @ok = false
49
- case p.action
50
- when Iotas::ACT_FOLLOW
51
- @follow = true
52
- @ok = (p===P0 and p.merged(0)===P1)
53
- else
54
- @follow = false
55
- @ok = (p===P1 and p.merged(0)===P0)
56
- end
57
- end
58
- end
59
- b0 = Board0.new 'door0', @spin
60
- b0.process_p p0
61
- p0.merged(0).should be_nil
62
- b0.process_p p1
63
- b0.ok.should be_true
64
- b0.follow.should be_false
65
- #
66
- p1.merged_shift
67
- #
68
- b0.process_p p0
69
- p0.merged(0).should be_nil
70
- # need to set it to p0 too, so case in Board0 is ok
71
- p0.add_dst Iotas::ACT_FOLLOW
72
- p0.split_dst!
73
- p1.add_dst Iotas::ACT_FOLLOW
74
- p1.split_dst!
75
- b0.process_p p1
76
- b0.ok.should be_true
77
- b0.follow.should be_true
78
- end
79
- #
80
- it "board->json->board" do
81
- board = Iotas::Board.new 'hell', @spin
82
- p0 = Iotas::Particle.new
83
- p1 = Iotas::Particle.new
84
- p1['v0']=0
85
- p1.set_link_fields 'v0'
86
- board.process_p p0
87
- board.process_p p1
88
- hell = Iotas::Board.json_create( JSON.load( JSON.generate(board) ) )
89
- board.name.should eql hell.name
90
- JSON.generate(board).should eql JSON.generate(hell)
91
- end
92
- #
93
- end
94
- #
95
- # EOF
data/spec/door_spec.rb DELETED
@@ -1,98 +0,0 @@
1
- #! /usr/bin/env ruby
2
- # -*- coding: UTF-8 -*-
3
- #
4
-
5
- require 'spec_helper'
6
- #
7
- describe Iotas::Door do
8
- #
9
- before (:all) do
10
- @spin = Iotas::Spin.new 'dom0'
11
- end
12
- #
13
- before(:each) do
14
- @spin.clear!
15
- end
16
- #
17
- it "require_p release_p" do
18
- door = Iotas::Door.new 'hell', @spin
19
- p0 = door.require_p Iotas::Particle
20
- p0.src.should be door
21
- p1 = door.require_p Iotas::Particle
22
- p1.src.should be door
23
- (p0===p1).should be_false
24
- door.release_p p0
25
- p2 = door.require_p Iotas::Particle
26
- p2.src.should be door
27
- (p0===p2).should be_true
28
- end
29
- #
30
- it "NoMethodError when receive_p not overridden" do
31
- class Door0 < Iotas::Door
32
- end
33
- f = Fake.new 'fake', @spin
34
- d0 = Door0.new 'door0', f
35
- p0 = d0.require_p Iotas::Particle
36
- lambda { d0.process_p p0 }.should raise_error(NoMethodError)
37
- end
38
- #
39
- it "send_p, send_sys_p, release_p and release of lost particles" do
40
- class Door0 < Iotas::Door
41
- def receive_p p
42
- case p.action
43
- when 'RELEASE'
44
- release_p p
45
- when 'SEND'
46
- send_p p
47
- when 'SEND_SYS'
48
- send_sys_p p
49
- else
50
- # lost!!
51
- end
52
- end
53
- end
54
- f = Fake.new 'fake', @spin
55
- d0 = Door0.new 'door0', f
56
- p0 = d0.require_p Iotas::Particle
57
- #
58
- p0.add_dst 'SEND'
59
- p0.split_dst!
60
- d0.process_p p0
61
- f.p.should eql p0
62
- p0.clear_dsts!
63
- #
64
- p0.add_dst 'SEND_SYS'
65
- p0.split_dst!
66
- d0.process_p p0
67
- f.sp.should eql p0
68
- p0.clear_dsts!
69
- #
70
- p0.add_dst 'RELEASE'
71
- p0.split_dst!
72
- d0.process_p p0
73
- p1 = d0.require_p Iotas::Particle
74
- p1.should be p0
75
- p0.clear_dsts!
76
- #
77
- p0.add_dst 'LOST'
78
- p0.split_dst!
79
- d0.process_p p0
80
- p1 = d0.require_p Iotas::Particle
81
- p1.should be p0
82
- p0.clear_dsts!
83
- #
84
- d0.process_sys_p p0
85
- p1 = @spin.require_p Iotas::Particle
86
- p1.should be p0
87
- end
88
- #
89
- it "door->json->door" do
90
- door = Iotas::Door.new 'hell', @spin
91
- hell = Iotas::Door.json_create( JSON.load( JSON.generate(door) ) )
92
- door.name.should eql hell.name
93
- JSON.generate(door).should eql JSON.generate(hell)
94
- end
95
- #
96
- end
97
- #
98
- # EOF
data/spec/link_spec.rb DELETED
@@ -1,38 +0,0 @@
1
- #! /usr/bin/env ruby
2
- # -*- coding: UTF-8 -*-
3
- #
4
-
5
- require 'spec_helper'
6
- #
7
- describe Iotas::Link do
8
- #
9
- it "from particle data" do
10
- @spin = Iotas::Spin.new 'dom0'
11
- p = @spin.require_p Iotas::Particle
12
- p.set_data Iotas::LNK_SRC, 'input1'
13
- p.set_data Iotas::LNK_DSTS, 'concat1?follow,output1'
14
- p.set_data Iotas::LNK_FIELDS, 'f0,f2'
15
- p.set_data Iotas::LNK_CONDF, 'f0,f1,f2'
16
- p.set_data Iotas::LNK_CONDV, 'v0v1v2'
17
- lnk = Iotas::Link.from_particle_data p
18
- lnk.src.should eql 'input1'
19
- lnk.dsts.should eql 'concat1?follow,output1'
20
- lnk.fields.should eql 'f0,f2'
21
- lnk.cond_fields.should eql 'f0,f1,f2'
22
- lnk.cond_value.should eql 'v0v1v2'
23
- end
24
- #
25
- it "link->json->link" do
26
- link = Iotas::Link.new 'input1', 'concat1?follow,output1', 'f0,f2', 'f0,f1,f2', 'v0v1v2'
27
- lnk = Iotas::Link.json_create( JSON.load( JSON.generate(link) ) )
28
- link.src.should eql lnk.src
29
- link.dsts.should eql lnk.dsts
30
- link.fields.should eql lnk.fields
31
- link.cond_fields.should eql lnk.cond_fields
32
- link.cond_value.should eql lnk.cond_value
33
- JSON.generate(link).should eql JSON.generate(lnk)
34
- end
35
- #
36
- end
37
- #
38
- # EOF
@@ -1,257 +0,0 @@
1
- #! /usr/bin/env ruby
2
- # -*- coding: UTF-8 -*-
3
- #
4
-
5
- require 'spec_helper'
6
- #
7
- describe Iotas::Particle do
8
- #
9
- it "payload manipulation" do
10
- p = Iotas::Particle.new
11
- #
12
- p['key']=666
13
- p['key'].should eql 666
14
- p.data('key').should eql 666
15
- p.get_data('key').should eql 666
16
- #
17
- p.set_data 'key', 69
18
- p['key'].should eql 69
19
- p.data('key').should eql 69
20
- p.get_data('key').should eql 69
21
- end
22
- #
23
- it "payload clone" do
24
- p = Iotas::Particle.new
25
- p['k00'] = { 'k0'=>0,'k1'=>1}
26
- p['k11'] = [1,2,3]
27
- o = Iotas::Particle.new
28
- o.clone_data p
29
- p['k00']=nil
30
- p['k00'].should be_nil
31
- o['k00']['k0'].should eql 0
32
- o['k00']['k1'].should eql 1
33
- p['k11']=nil
34
- p['k11'].should be_nil
35
- o['k11'][0].should eql 1
36
- o['k11'][1].should eql 2
37
- o['k11'][2].should eql 3
38
- end
39
- #
40
- it "particle merge" do
41
- p = Iotas::Particle.new
42
- q = Iotas::Particle.new
43
- o = Iotas::Particle.new
44
- p.merge! q
45
- p.merge! o
46
- p.merged(0).should be q
47
- p.merged(1).should be o
48
- p.merged(2).should be_nil
49
- p.merged_shift.should be q
50
- p.merged(0).should be o
51
- p.merged(1).should be_nil
52
- p.merged_shift.should be o
53
- p.merged(0).should be_nil
54
- p.merge! q
55
- p.merge! o
56
- p.merged(0).should be q
57
- p.merged(1).should be o
58
- p.clear_merged!
59
- p.merged(0).should be_nil
60
- end
61
- #
62
- it "routing: add_dsts, next_dst and dst_routed!" do
63
- p = Iotas::Particle.new
64
- d0 = Iotas::Door.new 'door0', nil
65
- d1 = Iotas::Door.new 'door1', nil
66
- p.dst.should be_nil
67
- p.next_dst.should be_nil
68
- p.add_dsts 'some?where,room0/room1/door?action,room/door,door'
69
- p.next_dst.should eql 'some?where'
70
- p.dst_routed! d0
71
- p.dst.should be d0
72
- p.next_dst.should eql 'room0/room1/door?action'
73
- p.dst_routed! d1
74
- p.dst.should be d1
75
- p.next_dst.should eql 'room/door'
76
- p.dst_routed! nil
77
- p.dst.should be_nil
78
- p.next_dst.should eql 'door'
79
- end
80
- #
81
- it "wrong path should raise exeption" do
82
- p = Iotas::Particle.new
83
- lambda { p.add_dst 'action', '/room' }.should raise_error(Iotas::Exception)
84
- lambda { p.add_dst 'action', 'room/' }.should raise_error(Iotas::Exception)
85
- lambda { p.add_dst '', 'room/' }.should raise_error(Iotas::Exception)
86
- lambda { p.add_dst 'action', 'room//door' }.should raise_error(Iotas::Exception)
87
- lambda { p.add_dst ' ' }.should raise_error(Iotas::Exception)
88
- lambda { p.add_dst ' ', '' }.should raise_error(Iotas::Exception)
89
- lambda { p.add_dst 'f f' }.should raise_error(Iotas::Exception)
90
- lambda { p.add_dst '', ' d' }.should raise_error(Iotas::Exception)
91
- lambda { p.add_dst '' }.should raise_error(Iotas::Exception)
92
- lambda { p.add_dst '', '' }.should raise_error(Iotas::Exception)
93
- lambda { p.add_dst nil }.should raise_error(TypeError)
94
- lambda { p.add_dst 'action', nil }.should raise_error(NoMethodError)
95
- end
96
- #
97
- it "routing: set_dst!" do
98
- p = Iotas::Particle.new
99
- d0 = Iotas::Door.new 'door0', nil
100
- #
101
- p.set_dst! 'action', d0
102
- p.action.should eql 'action'
103
- p.dst.should be d0
104
- end
105
- #
106
- it "routing: add_dst and split_dst!" do
107
- p = Iotas::Particle.new
108
- d0 = Iotas::Door.new 'door0', nil
109
- #
110
- p.split_dst!
111
- p.room.should be_nil
112
- p.door.should be_nil
113
- p.action.should be_nil
114
- #
115
- p.add_dst 'action', 'room0/room1/door'
116
- p.split_dst!
117
- p.room.should eql 'room0/room1'
118
- p.door.should eql 'door'
119
- p.action.should eql 'action'
120
- p.clear_dsts!
121
- #
122
- p.add_dst 'action', 'room/door'
123
- p.split_dst!
124
- p.room.should eql 'room'
125
- p.door.should eql 'door'
126
- p.action.should eql 'action'
127
- p.clear_dsts!
128
- #
129
- p.add_dst 'action', ''
130
- p.split_dst!
131
- p.room.should be_nil
132
- p.door.should be_nil
133
- p.action.should eql 'action'
134
- p.clear_dsts!
135
- #
136
- p.add_dst 'action'
137
- p.split_dst!
138
- p.room.should be_nil
139
- p.door.should be_nil
140
- p.action.should eql 'action'
141
- p.clear_dsts!
142
- #
143
- p.add_dsts 'door?action,?action'
144
- p.split_dst!
145
- p.room.should be_nil
146
- p.door.should eql 'door'
147
- p.action.should eql 'action'
148
- #
149
- p.dst_routed! d0
150
- #
151
- p.dst.should be d0
152
- p.split_dst!
153
- p.room.should be_nil
154
- p.door.should be_nil
155
- p.action.should eql 'action'
156
- #
157
- end
158
- #
159
- it "routing: error!" do
160
- p = Iotas::Particle.new
161
- d = Iotas::Door.new 'door', nil
162
- p.init! d
163
- p.add_dsts 'door?action,?action'
164
- p.next_dst.should eql 'door?action'
165
- p.error! 'err_msg'
166
- p[Iotas::FIELD_ERROR_MSG].should eql 'err_msg'
167
- p.action.should eq Iotas::ACT_ERROR
168
- p.dst.should be d
169
- end
170
- #
171
- it "link fields and link value" do
172
- p = Iotas::Particle.new
173
- p['k0'] = 'v0'
174
- p['k1'] = 'v1'
175
- p['k2'] = 'v2'
176
- p.set_link_fields 'k0,k2'
177
- p.link_value.should eql 'v0v2'
178
- p.set_link_fields 'k1,k0'
179
- p.link_value.should eql 'v1v0'
180
- p['k0']='vx'
181
- p.link_value.should eql 'v1vx'
182
- end
183
- #
184
- it "apply_link!" do
185
- p = Iotas::Particle.new
186
- p['k0'] = 'v0'
187
- p['k1'] = 'v1'
188
- p['k2'] = 'v2'
189
- p.set_link_fields 'k0,k2'
190
- p.add_dsts 'door?action,?action'
191
- p.src.should be_nil
192
- p.link_value.should eql 'v0v2'
193
- p.next_dst.should eql 'door?action'
194
- lnk = Iotas::Link.new('door0', 'door1?get,door2', 'k1', 'f0,f1', 'v0v1')
195
- f = Fake.new 'fake', nil
196
- lnk.door = f
197
- p.apply_link! lnk
198
- p.src.should be f
199
- p.next_dst.should eql 'door1?get'
200
- p.link_value.should eql 'v1'
201
- end
202
- #
203
- it "particle->json->particle" do
204
- s0 = Iotas::Spin.new 'top'
205
- s1 = Iotas::Room.new 'room0', s0
206
- s2 = Iotas::Room.new 'room1', s1
207
- s3 = Iotas::Door.new 'doora', s2
208
- s4 = Iotas::Door.new 'doorb', s1
209
- p0 = Iotas::Particle.new
210
- p0['k0'] = 'v0'
211
- p0['k1'] = 'v1'
212
- p0['k2'] = 'v2'
213
- p0.init! s3
214
- p0.set_link_fields 'k0,k2'
215
- p0.add_dsts 'room0/room1/room2/doorX?myaction,door?action,?action'
216
- p0.split_dst!
217
- p1 = Iotas::Particle.new
218
- p1['k3'] = 'v6'
219
- p1['k4'] = 'v7'
220
- p1['k5'] = 'v8'
221
- p1.init! s3
222
- p1.dst_routed! s4
223
- p1.set_link_fields 'k5,k4,k3'
224
- p1.add_dsts 'room0/room1/door?action,output?action'
225
- p0.merge! p1
226
- o = JSON.load( JSON.generate(p0) )
227
- o['spin'] = s0
228
- px = Iotas::Particle.json_create( o )
229
- ((px.ts-p0.ts)<0.5).should be_true
230
- px.src.should be s3
231
- px.dst.should be_nil
232
- px.room.should eql 'room0/room1/room2'
233
- px.door.should eql 'doorX'
234
- px.action.should eql 'myaction'
235
- px.next_dst.should eql 'room0/room1/room2/doorX?myaction'
236
- px.link_value.should eql 'v0v2'
237
- px['k0'].should eql 'v0'
238
- px['k1'].should eql 'v1'
239
- px['k2'].should eql 'v2'
240
- py = px.merged(0)
241
- ((py.ts-p1.ts)<0.5).should be_true
242
- py.src.should be s3
243
- py.dst.should be s4
244
- py.room.should be_nil
245
- py.door.should be_nil
246
- py.action.should be_nil
247
- py.next_dst.should eql 'room0/room1/door?action'
248
- py.link_value.should eql 'v8v7v6'
249
- py['k3'].should eql 'v6'
250
- py['k4'].should eql 'v7'
251
- py['k5'].should eql 'v8'
252
- JSON.generate(p0).should eql JSON.generate(px)
253
- end
254
- #
255
- end
256
- #
257
- # EOF