pione 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/History.txt +12 -1
  2. data/example/AbstractRule/AbstractRule.pione +40 -0
  3. data/example/Fib/Fib.pione +12 -5
  4. data/example/LucasNumber/LucasNumber.pione +1 -1
  5. data/example/MakePair/MakePair.pione +21 -6
  6. data/example/OddSelector/OddSelector.pione +17 -0
  7. data/example/OddSelector/data/1.i +0 -0
  8. data/example/OddSelector/data/10.i +0 -0
  9. data/example/OddSelector/data/2.i +0 -0
  10. data/example/OddSelector/data/3.i +0 -0
  11. data/example/OddSelector/data/4.i +0 -0
  12. data/example/OddSelector/data/5.i +0 -0
  13. data/example/OddSelector/data/6.i +0 -0
  14. data/example/OddSelector/data/7.i +0 -0
  15. data/example/OddSelector/data/8.i +0 -0
  16. data/example/OddSelector/data/9.i +0 -0
  17. data/example/SequentialParameter/SequentialParameter.pione +4 -0
  18. data/example/SieveOfEratosthenes/SieveOfEratosthenes.pione +31 -43
  19. data/example/SingleParticlesWithRef/SingleParticlesWithRef.pione +1 -1
  20. data/example/Touch/Touch.pione +3 -0
  21. data/lib/pione/command/pione-syntax-checker.rb +4 -4
  22. data/lib/pione/model/assignment.rb +6 -1
  23. data/lib/pione/model/basic-model.rb +92 -278
  24. data/lib/pione/model/binary-operator.rb +5 -1
  25. data/lib/pione/model/block.rb +17 -0
  26. data/lib/pione/model/boolean.rb +54 -22
  27. data/lib/pione/model/constraints.rb +34 -0
  28. data/lib/pione/model/data-expr.rb +184 -297
  29. data/lib/pione/model/feature-expr.rb +13 -4
  30. data/lib/pione/model/float.rb +24 -41
  31. data/lib/pione/model/integer.rb +75 -41
  32. data/lib/pione/model/keyed-sequence.rb +143 -0
  33. data/lib/pione/model/list.rb +12 -8
  34. data/lib/pione/model/message.rb +8 -4
  35. data/lib/pione/model/ordinal-sequence.rb +75 -0
  36. data/lib/pione/model/package.rb +6 -2
  37. data/lib/pione/model/parameters.rb +61 -9
  38. data/lib/pione/model/pione-method.rb +146 -0
  39. data/lib/pione/model/rule-expr.rb +44 -38
  40. data/lib/pione/model/rule-io.rb +11 -3
  41. data/lib/pione/model/rule.rb +105 -155
  42. data/lib/pione/model/sequence.rb +273 -0
  43. data/lib/pione/model/string.rb +75 -29
  44. data/lib/pione/model/ticket-expr.rb +17 -29
  45. data/lib/pione/model/type.rb +242 -0
  46. data/lib/pione/model/variable-table.rb +52 -53
  47. data/lib/pione/model/variable.rb +8 -4
  48. data/lib/pione/model.rb +34 -0
  49. data/lib/pione/parser/block-parser.rb +44 -20
  50. data/lib/pione/parser/common-parser.rb +2 -1
  51. data/lib/pione/parser/document-parser.rb +6 -1
  52. data/lib/pione/parser/expr-parser.rb +57 -11
  53. data/lib/pione/parser/flow-element-parser.rb +2 -2
  54. data/lib/pione/parser/rule-definition-parser.rb +23 -1
  55. data/lib/pione/patch/rinda-patch.rb +1 -5
  56. data/lib/pione/rule-handler/action-handler.rb +5 -5
  57. data/lib/pione/rule-handler/basic-handler.rb +30 -7
  58. data/lib/pione/rule-handler/empty-handler.rb +14 -0
  59. data/lib/pione/rule-handler/flow-handler.rb +132 -115
  60. data/lib/pione/rule-handler/root-handler.rb +6 -2
  61. data/lib/pione/rule-handler/update-criteria.rb +152 -0
  62. data/lib/pione/rule-handler.rb +14 -0
  63. data/lib/pione/system/identifier.rb +9 -9
  64. data/lib/pione/transformer/block-transformer.rb +4 -0
  65. data/lib/pione/transformer/expr-transformer.rb +1 -1
  66. data/lib/pione/transformer/flow-element-transformer.rb +4 -2
  67. data/lib/pione/transformer/literal-transformer.rb +14 -3
  68. data/lib/pione/transformer/rule-definition-transformer.rb +17 -5
  69. data/lib/pione/tuple-space/data-finder.rb +15 -52
  70. data/lib/pione/version.rb +1 -1
  71. data/lib/pione.rb +12 -38
  72. data/test/agent/spec_task-worker.rb +13 -12
  73. data/test/model/spec_assignment.rb +2 -2
  74. data/test/model/spec_binary-operator.rb +10 -10
  75. data/test/model/spec_block.rb +8 -8
  76. data/test/model/spec_boolean.rb +1 -72
  77. data/test/model/spec_boolean.yml +134 -0
  78. data/test/model/spec_data-expr.rb +50 -237
  79. data/test/model/spec_data-expr.yml +16 -45
  80. data/test/model/spec_data-expr_match.yml +45 -0
  81. data/test/model/spec_feature-expr.rb +2 -43
  82. data/test/model/spec_feature-expr.yml +0 -28
  83. data/test/model/spec_feature-expr_decide.yml +28 -0
  84. data/test/model/spec_float.rb +1 -119
  85. data/test/model/spec_float.yml +17 -0
  86. data/test/model/spec_integer.rb +1 -119
  87. data/test/model/spec_integer.yml +57 -0
  88. data/test/model/spec_keyed-sequence.rb +5 -0
  89. data/test/model/spec_keyed-sequence.yml +22 -0
  90. data/test/model/spec_message.rb +7 -7
  91. data/test/model/spec_parameters.rb +50 -63
  92. data/test/model/spec_pione-method.rb +56 -0
  93. data/test/model/spec_rule-expr.rb +18 -8
  94. data/test/model/spec_rule.rb +12 -12
  95. data/test/model/spec_sequence.rb +5 -0
  96. data/test/model/spec_sequence.yml +60 -0
  97. data/test/model/spec_string.rb +3 -70
  98. data/test/model/spec_string.yml +83 -0
  99. data/test/model/spec_ticket-expr.rb +4 -54
  100. data/test/model/spec_ticket-expr.yml +11 -0
  101. data/test/model/spec_variable-table.rb +41 -42
  102. data/test/model/spec_variable.rb +20 -22
  103. data/test/parser/spec_block-parser.yml +9 -0
  104. data/test/parser/spec_expr-parser.yml +0 -17
  105. data/test/parser/spec_flow-element-parser.yml +1 -1
  106. data/test/parser/spec_rule-definition-parser.yml +0 -4
  107. data/test/rule-handler/spec_update-criteria.pione +39 -0
  108. data/test/rule-handler/spec_update-criteria.rb +53 -0
  109. data/test/rule-handler/spec_update-criteria.yml +158 -0
  110. data/test/test-util.rb +25 -0
  111. data/test/transformer/spec_block-transformer.rb +7 -0
  112. data/test/transformer/spec_expr-transformer.rb +64 -19
  113. data/test/transformer/spec_flow-element-transformer.rb +11 -11
  114. data/test/transformer/spec_literal-transformer.rb +29 -29
  115. data/test/transformer/spec_rule-definition-transformer.rb +39 -21
  116. metadata +57 -11
  117. data/lib/pione/model/undefined-value.rb +0 -24
  118. data/lib/pione/tuple-space/update-criteria.rb +0 -97
  119. data/test/model/spec_list.rb +0 -26
  120. data/test/model/spec_rule-io.rb +0 -32
  121. data/test/spec_update-criteria.rb +0 -83
@@ -19,123 +19,5 @@ describe 'Model::PioneFloat' do
19
19
  @one.should.not == PioneInteger.new(1)
20
20
  end
21
21
 
22
- describe 'pione method ==' do
23
- it 'should true' do
24
- @one.call_pione_method("==", PioneFloat.new(1.0)).should.true
25
- end
26
-
27
- it 'should false' do
28
- @one.call_pione_method("==", @two).should.not.true
29
- end
30
-
31
- it 'should raise type error' do
32
- should.raise(PioneModelTypeError) do
33
- @one.call_pione_method("==", PioneInteger.new(1))
34
- end
35
- end
36
- end
37
-
38
- describe 'pione method !=' do
39
- it 'should true' do
40
- @one.call_pione_method("!=", @two).should.true
41
- end
42
-
43
- it 'should false' do
44
- @one.call_pione_method("!=", PioneFloat.new(1.0)).should.not.true
45
- end
46
-
47
- it 'should raise type error' do
48
- should.raise(PioneModelTypeError) do
49
- @one.call_pione_method("!=", PioneInteger.new(1))
50
- end
51
- end
52
- end
53
-
54
- describe 'pione method >' do
55
- it 'should true' do
56
- @one.call_pione_method(">", PioneFloat.new(0.0)).should.true
57
- end
58
-
59
- it 'should false' do
60
- @one.call_pione_method(">", PioneFloat.new(1.0)).should.false
61
- end
62
-
63
- it 'should raise type error' do
64
- should.raise(PioneModelTypeError) do
65
- @one.call_pione_method(">", PioneInteger.new(1))
66
- end
67
- end
68
- end
69
-
70
- describe 'pione method >=' do
71
- it 'should true' do
72
- @one.call_pione_method(">=", PioneFloat.new(1.0)).should.true
73
- end
74
-
75
- it 'should false' do
76
- @one.call_pione_method(">=", @two).should.false
77
- end
78
-
79
- it 'should raise type error' do
80
- should.raise(PioneModelTypeError) do
81
- @one.call_pione_method(">=", PioneInteger.new(1))
82
- end
83
- end
84
- end
85
-
86
- describe 'pione method <' do
87
- it 'should true' do
88
- @one.call_pione_method("<", @two).should.true
89
- end
90
-
91
- it 'should false' do
92
- @one.call_pione_method("<", PioneFloat.new(1.0)).should.false
93
- end
94
-
95
- it 'should raise type error' do
96
- should.raise(PioneModelTypeError) do
97
- @one.call_pione_method("<", PioneInteger.new(1))
98
- end
99
- end
100
- end
101
-
102
- describe 'pione method <=' do
103
- it 'should true' do
104
- @one.call_pione_method("<=", PioneFloat.new(1.0)).should.true
105
- end
106
-
107
- it 'should false' do
108
- @one.call_pione_method("<=", PioneFloat.new(0.0)).should.false
109
- end
110
-
111
- it 'should raise type error' do
112
- should.raise(PioneModelTypeError) do
113
- @one.call_pione_method("<=", PioneInteger.new(1))
114
- end
115
- end
116
- end
117
-
118
- describe 'pione method +' do
119
- it 'should sum' do
120
- @one.call_pione_method("+", @one).should == @two
121
- end
122
-
123
- it 'should raise type error' do
124
- should.raise(PioneModelTypeError) do
125
- @one.call_pione_method("+", PioneInteger.new(1))
126
- end
127
- end
128
- end
129
-
130
- describe 'pione method -' do
131
- it 'should get difference' do
132
- @two.call_pione_method("-", @one).should == @one
133
- end
134
-
135
- it 'should raise type error' do
136
- should.raise(PioneModelTypeError) do
137
- @one.call_pione_method("-", PioneInteger.new(1))
138
- end
139
- end
140
- end
22
+ test_pione_method("float")
141
23
  end
@@ -0,0 +1,17 @@
1
+ # +
2
+ - "1.1" : "1.0 + 0.1"
3
+
4
+ # -
5
+ - "0.9" : "1.0 - 0.1"
6
+
7
+ # as_string, str
8
+ - '"0.1"' : "0.1.as_string"
9
+ - '"1.0"' : "1.0.str"
10
+
11
+ # as_int, i
12
+ - "1" : "1.0.as_integer"
13
+ - "0" : "0.1.i"
14
+
15
+ # as_float, f
16
+ - "0.1" : "0.1.as_float"
17
+ - "1.0" : "1.0.f"
@@ -19,123 +19,5 @@ describe 'Model::PioneInteger' do
19
19
  @one.should.not == PioneFloat.new(1.0)
20
20
  end
21
21
 
22
- describe 'pione method ==' do
23
- it 'should true' do
24
- @one.call_pione_method("==", PioneInteger.new(1)).should.true
25
- end
26
-
27
- it 'should false' do
28
- @one.call_pione_method("==", PioneInteger.new(2)).should.not.true
29
- end
30
-
31
- it 'should raise type error' do
32
- should.raise(PioneModelTypeError) do
33
- @one.call_pione_method("==", PioneFloat.new(1.0))
34
- end
35
- end
36
- end
37
-
38
- describe 'pione method !=' do
39
- it 'should true' do
40
- @one.call_pione_method("!=", PioneInteger.new(2)).should.true
41
- end
42
-
43
- it 'should false' do
44
- @one.call_pione_method("!=", PioneInteger.new(1)).should.not.true
45
- end
46
-
47
- it 'should raise type error' do
48
- should.raise(PioneModelTypeError) do
49
- @one.call_pione_method("!=", PioneFloat.new(1.0))
50
- end
51
- end
52
- end
53
-
54
- describe 'pione method >' do
55
- it 'should true' do
56
- @one.call_pione_method(">", PioneInteger.new(0)).should.true
57
- end
58
-
59
- it 'should false' do
60
- @one.call_pione_method(">", PioneInteger.new(1)).should.false
61
- end
62
-
63
- it 'should raise type error' do
64
- should.raise(PioneModelTypeError) do
65
- @one.call_pione_method(">", PioneFloat.new(1.0))
66
- end
67
- end
68
- end
69
-
70
- describe 'pione method >=' do
71
- it 'should true' do
72
- @one.call_pione_method(">=", PioneInteger.new(1)).should.true
73
- end
74
-
75
- it 'should false' do
76
- @one.call_pione_method(">=", PioneInteger.new(2)).should.false
77
- end
78
-
79
- it 'should raise type error' do
80
- should.raise(PioneModelTypeError) do
81
- @one.call_pione_method(">=", PioneFloat.new(1.0))
82
- end
83
- end
84
- end
85
-
86
- describe 'pione method <' do
87
- it 'should true' do
88
- @one.call_pione_method("<", PioneInteger.new(2)).should.true
89
- end
90
-
91
- it 'should false' do
92
- @one.call_pione_method("<", PioneInteger.new(1)).should.false
93
- end
94
-
95
- it 'should raise type error' do
96
- should.raise(PioneModelTypeError) do
97
- @one.call_pione_method("<", PioneFloat.new(1.0))
98
- end
99
- end
100
- end
101
-
102
- describe 'pione method <=' do
103
- it 'should true' do
104
- @one.call_pione_method("<=", PioneInteger.new(1)).should.true
105
- end
106
-
107
- it 'should false' do
108
- @one.call_pione_method("<=", PioneInteger.new(0)).should.false
109
- end
110
-
111
- it 'should raise type error' do
112
- should.raise(PioneModelTypeError) do
113
- @one.call_pione_method("<=", PioneFloat.new(1.0))
114
- end
115
- end
116
- end
117
-
118
- describe 'pione method +' do
119
- it 'should sum' do
120
- @one.call_pione_method("+", @one).should == @two
121
- end
122
-
123
- it 'should raise type error' do
124
- should.raise(PioneModelTypeError) do
125
- @one.call_pione_method("+", PioneFloat.new(1.0))
126
- end
127
- end
128
- end
129
-
130
- describe 'pione method -' do
131
- it 'should get difference' do
132
- @two.call_pione_method("-", @one).should == @one
133
- end
134
-
135
- it 'should raise type error' do
136
- should.raise(PioneModelTypeError) do
137
- @one.call_pione_method("-", PioneFloat.new(1.0))
138
- end
139
- end
140
- end
22
+ test_pione_method("integer")
141
23
  end
@@ -0,0 +1,57 @@
1
+ # ==, !=
2
+ - true : '1 == 1'
3
+ - false : '1 == 2'
4
+ - true : '1 != 2'
5
+ - false : '1 != 1'
6
+
7
+ # length
8
+ - "3" : '(1 | 2 | 3).length'
9
+
10
+ # []
11
+ - "1" : '(1 | 2 | 3)[1]'
12
+ - "2" : '(1 | 2 | 3)[2]'
13
+ - "3" : '(1 | 2 | 3)[3]'
14
+
15
+ # as_string, str
16
+ - '"1" | "2" | "3"' : '(1 | 2 | 3).str'
17
+
18
+ # +
19
+ - "6" : '1 + 2 + 3'
20
+ - "2 | 3 | 4" : '1 + (1 | 2 | 3)'
21
+ - "2 | 3 | 4" : '(1 | 2 | 3) + 1'
22
+ - "2 | 3 | 4| 3 | 4 | 5 | 4 | 5 | 6" : '(1 | 2 | 3) + (1 | 2 | 3)'
23
+
24
+ # -
25
+ - "-4" : '1 - 2 - 3'
26
+ - "0 | -1 | -2" : '1 - (1 | 2 | 3)'
27
+ - "0 | 1 | 2" : '(1 | 2 | 3) - 1'
28
+ - "0 | -1 | -2 | 1 | 0 | -1 | 2 | 1 | 0" : '(1 | 2 | 3) - (1 | 2 | 3)'
29
+
30
+ # *
31
+ - "6" : '1 * 2 * 3'
32
+ - "3 | 6 | 9" : '3 * (1 | 2 | 3)'
33
+ - "3 | 6 | 9" : '(1 | 2 | 3) * 3'
34
+ - "1 | 2 | 3 | 2 | 4 | 6 | 3 | 6 | 9" : '(1 | 2 | 3) * (1 | 2 | 3)'
35
+
36
+ # /
37
+ - true : '4 / 2 == 2'
38
+ - true : '4 / (4 | 2) == (1 | 2)'
39
+ - true : '(4 | 2) / 2 == (2 | 1)'
40
+ - true : '(4 | 2) / (4 | 2) == (1 | 2 | 0 | 1)'
41
+
42
+ # upto
43
+ - '1 | 2 | 3' : '1.upto(3)'
44
+ - '1' : '1.upto(1)'
45
+ - '1' : '1.upto(0)'
46
+ - '1 | 2 | 3 | 2 | 3 | 3' : '(1 | 2 | 3).upto(3)'
47
+ - '1 | 1 | 2 | 1 | 2 | 3' : '1.upto(1 | 2 | 3)'
48
+ - '1 | 1 | 2 | 1 | 2 | 3 | 2 | 2 | 2 | 3 | 3 | 3 | 3' : '(1 | 2 | 3).upto(1 | 2 | 3)'
49
+
50
+ # downto
51
+ - '3 | 2 | 1' : '3.downto(1)'
52
+ - '3' : '3.downto(3)'
53
+ - '3' : '3.downto(4)'
54
+ - '3 | 2 | 1 | 2 | 1 | 1' : '(3 | 2 | 1).downto(1)'
55
+ - '3 | 3 | 2 | 3 | 2 | 1' : '3.downto(3 | 2 | 1)'
56
+ - '3 | 3 | 2 | 3 | 2 | 1 | 2 | 2 | 2 | 1 | 1 | 1 | 1' : '(3 | 2 | 1).downto(3 | 2 | 1)'
57
+
@@ -0,0 +1,5 @@
1
+ require_relative '../test-util'
2
+
3
+ describe 'Model::Sequence' do
4
+ test_pione_method("keyed-sequence")
5
+ end
@@ -0,0 +1,22 @@
1
+ # :
2
+ - '(1 : "a") | (2 : "b") | (3 : "c")' : '(1 : "a") | (2 : "b") | (3 : "c")'
3
+ - '("a" : 1) | ("b" : 2) | ("c" : 3)' : '("a" : 1) | ("b" : 2) | ("c" : 3)'
4
+ - '(1 : "a") | (2 : "a") | (3 : "a")' : '(1 | 2 | 3) : "a"'
5
+
6
+ # []
7
+ - '"a"' : '((1 : "a") | (2 : "b") | (3 : "c"))[1]'
8
+ - '"b"' : '((1 : "a") | (2 : "b") | (3 : "c"))[2]'
9
+ - '"c"' : '((1 : "a") | (2 : "b") | (3 : "c"))[3]'
10
+ - '"a" | "b"' : '((1 : ("a" | "b")) | (2 : ("c" | "d")) | (3 : ("e" | "f")))[1]'
11
+ - '"c" | "d"' : '((1 : ("a" | "b")) | (2 : ("c" | "d")) | (3 : ("e" | "f")))[2]'
12
+ - '"e" | "f"' : '((1 : ("a" | "b")) | (2 : ("c" | "d")) | (3 : ("e" | "f")))[3]'
13
+ - '1' : '(("a" : 1) | ("b" : 2) | ("c" : 3))["a"]'
14
+ - '2' : '(("a" : 1) | ("b" : 2) | ("c" : 3))["b"]'
15
+ - '3' : '(("a" : 1) | ("b" : 2) | ("c" : 3))["c"]'
16
+
17
+ # keys
18
+ - '1 | 2 | 3' : '((1 : "a") | (2 : "b") | (3 : "c")).keys'
19
+
20
+ # values
21
+ - '"a" | "b" | "c"' : '((1 : "a") | (2 : "b") | (3 : "c")).values'
22
+
@@ -2,13 +2,13 @@ require_relative '../test-util'
2
2
 
3
3
  describe 'Model::Message' do
4
4
  before do
5
- @a = Model::Message.new("next", 1)
6
- @b = Model::Message.new("substring", "abcdefg", 2, 3)
5
+ @a = Model::Message.new("next", PioneInteger.new(1).to_seq)
6
+ @b = Model::Message.new("substring", PioneString.new("abcdefg").to_seq, PioneInteger.new(2).to_seq, PioneInteger.new(3).to_seq)
7
7
  end
8
8
 
9
9
  it 'should equal' do
10
- @a.should == Model::Message.new("next", 1)
11
- @b.should == Model::Message.new("substring", "abcdefg", 2, 3)
10
+ @a.should == Model::Message.new("next", PioneInteger.new(1).to_seq)
11
+ @b.should == Model::Message.new("substring", PioneString.new("abcdefg").to_seq, PioneInteger.new(2).to_seq, PioneInteger.new(3).to_seq)
12
12
  end
13
13
 
14
14
  it 'should not equal' do
@@ -16,14 +16,14 @@ describe 'Model::Message' do
16
16
  end
17
17
 
18
18
  it 'should send message' do
19
- @a.eval(VariableTable.new).should == 2.to_pione
20
- @b.eval(VariableTable.new).should == "cde".to_pione
19
+ @a.eval(VariableTable.new).should == PioneInteger.new(2).to_seq
20
+ @b.eval(VariableTable.new).should == PioneString.new("bcd").to_seq
21
21
  end
22
22
 
23
23
  it 'should get the method result from variable table' do
24
24
  vtable = VariableTable.new
25
25
  vtable.set(Variable.new("X"), @a)
26
- vtable.get(Variable.new("X")).should == 2.to_pione
26
+ vtable.get(Variable.new("X")).should == PioneInteger.new(2).to_seq
27
27
  vtable.to_hash[Variable.new("X")].should == @a
28
28
  end
29
29
 
@@ -77,72 +77,59 @@ describe 'Model::Parameters' do
77
77
  @params_a.should.not.be.empty
78
78
  end
79
79
 
80
- describe 'pione method ==' do
81
- it 'should get true' do
82
- params_a = @params_a
83
- params_b = Parameters.new({
84
- Variable.new("a") => "A".to_pione,
85
- Variable.new("b") => "B".to_pione,
86
- Variable.new("c") => "C".to_pione
87
- })
88
- params_a.call_pione_method("==", params_b).should ==
89
- PioneBoolean.true
90
- end
91
-
92
- it 'should get false' do
93
- params_a = {"a" => "A", "b" => "B", "c" => "C"}.to_params
94
- params_b = {"a" => "X", "b" => "Y", "c" => "Z"}.to_params
95
- params_a.call_pione_method("==", params_b).should ==
96
- PioneBoolean.false
97
- end
98
- end
99
-
100
- describe 'pione method !=' do
101
- it 'should get true' do
102
- params_a = {"a" => "A", "b" => "B", "c" => "C"}.to_params
103
- params_b = {"a" => "X", "b" => "Y", "c" => "Z"}.to_params
104
- params_a.call_pione_method("!=", params_b).should ==
105
- PioneBoolean.true
106
- end
107
-
108
- it 'should get false' do
109
- params_a = {"a" => "A", "b" => "B", "c" => "C"}.to_params
110
- params_b = {"a" => "A", "b" => "B", "c" => "C"}.to_params
111
- params_a.call_pione_method("!=", params_b).should ==
112
- PioneBoolean.false
113
- end
114
- end
115
-
116
- describe 'pione method []' do
117
- it 'should get a value' do
118
- @params_a.call_pione_method("[]", "a".to_pione).should ==
119
- "A".to_pione
120
- end
121
- end
122
-
123
- describe 'pione method get' do
124
- it 'should get a value' do
125
- @params_a.call_pione_method("get", "a".to_pione).should ==
126
- "A".to_pione
127
- end
128
- end
129
-
130
- describe 'pione method set' do
131
- it 'should add a parameter' do
132
- new_params = @params_a.call_pione_method("set", "d".to_pione, "D".to_pione)
133
- new_params.get(Variable.new("d")).should == "D".to_pione
134
- end
135
-
136
- it 'should overwrite a parameter' do
137
- new_params = @params_a.call_pione_method("set", "a".to_pione, "X".to_pione)
138
- new_params.get(Variable.new("a")).should == "X".to_pione
80
+ it 'should expand sequence with each modifier' do
81
+ seq_a = StringSequence.new([PioneString.new("X"), PioneString.new("Y"), PioneString.new("Z")]).set_each
82
+ seq_b = IntegerSequence.new([PioneInteger.new(1), PioneInteger.new(2), PioneInteger.new(3)]).set_each
83
+ seq_c = BooleanSequence.new([PioneBoolean.new(true), PioneBoolean.new(false)]).set_each
84
+ params = Parameters.new(Variable.new("A") => seq_a, Variable.new("B") => seq_b, Variable.new("C") => seq_c)
85
+ params.to_a.tap do |list|
86
+ list.size.should == 18
87
+ comb = [
88
+ [PioneString.new("X"), PioneInteger.new(1), PioneBoolean.new(true)],
89
+ [PioneString.new("X"), PioneInteger.new(2), PioneBoolean.new(true)],
90
+ [PioneString.new("X"), PioneInteger.new(3), PioneBoolean.new(true)],
91
+ [PioneString.new("X"), PioneInteger.new(1), PioneBoolean.new(false)],
92
+ [PioneString.new("X"), PioneInteger.new(2), PioneBoolean.new(false)],
93
+ [PioneString.new("X"), PioneInteger.new(3), PioneBoolean.new(false)],
94
+ [PioneString.new("Y"), PioneInteger.new(1), PioneBoolean.new(true)],
95
+ [PioneString.new("Y"), PioneInteger.new(2), PioneBoolean.new(true)],
96
+ [PioneString.new("Y"), PioneInteger.new(3), PioneBoolean.new(true)],
97
+ [PioneString.new("Y"), PioneInteger.new(1), PioneBoolean.new(false)],
98
+ [PioneString.new("Y"), PioneInteger.new(2), PioneBoolean.new(false)],
99
+ [PioneString.new("Y"), PioneInteger.new(3), PioneBoolean.new(false)],
100
+ [PioneString.new("Z"), PioneInteger.new(1), PioneBoolean.new(true)],
101
+ [PioneString.new("Z"), PioneInteger.new(2), PioneBoolean.new(true)],
102
+ [PioneString.new("Z"), PioneInteger.new(3), PioneBoolean.new(true)],
103
+ [PioneString.new("Z"), PioneInteger.new(1), PioneBoolean.new(false)],
104
+ [PioneString.new("Z"), PioneInteger.new(2), PioneBoolean.new(false)],
105
+ [PioneString.new("Z"), PioneInteger.new(3), PioneBoolean.new(false)]
106
+ ]
107
+ comb.each do |elts|
108
+ list.should.include(
109
+ Parameters.new(
110
+ Variable.new("A") => elts[0].to_seq,
111
+ Variable.new("B") => elts[1].to_seq,
112
+ Variable.new("C") => elts[2].to_seq
113
+ )
114
+ )
115
+ end
139
116
  end
140
117
  end
141
118
 
142
- describe 'pione method empty?' do
143
- it 'should get true' do
144
- Parameters.new({}).call_pione_method("empty?").should ==
145
- PioneBoolean.true
119
+ it 'should expand sequences with all modifier' do
120
+ seq_a = StringSequence.new([PioneString.new("X"), PioneString.new("Y"), PioneString.new("Z")]).set_all
121
+ seq_b = IntegerSequence.new([PioneInteger.new(1), PioneInteger.new(2), PioneInteger.new(3)]).set_all
122
+ seq_c = BooleanSequence.new([PioneBoolean.new(true), PioneBoolean.new(false)]).set_all
123
+ params = Parameters.new(Variable.new("A") => seq_a, Variable.new("B") => seq_b, Variable.new("C") => seq_c)
124
+ params.to_a.tap do |list|
125
+ list.size.should == 1
126
+ list.should.include(
127
+ Parameters.new(
128
+ Variable.new("A") => seq_a,
129
+ Variable.new("B") => seq_b,
130
+ Variable.new("C") => seq_c
131
+ )
132
+ )
146
133
  end
147
134
  end
148
135
  end
@@ -0,0 +1,56 @@
1
+ require_relative '../test-util'
2
+
3
+ describe "Pione::Model::PioneMethod" do
4
+ before do
5
+ @int_1 = PioneInteger.new(1).to_seq
6
+ @int_2 = PioneInteger.new(2).to_seq
7
+ @int_3 = PioneInteger.new(3).to_seq
8
+ @str_1 = PioneString.new(1).to_seq
9
+ @method_1 = Model::PioneMethod.new([TypeInteger], TypeInteger, lambda{|rec, arg1| arg1})
10
+ @method_2 = Model::PioneMethod.new([TypeInteger, TypeString], TypeInteger, lambda{|rec, arg1, arg2| arg1})
11
+ @method_3 = Model::PioneMethod.new([], :receiver_type, lambda{|rec| rec})
12
+ @method_bad = Model::PioneMethod.new([TypeString], TypeInteger, lambda{|rec, arg1| arg1})
13
+ end
14
+
15
+ it "should get inputs" do
16
+ @method_1.inputs.should == [TypeInteger]
17
+ @method_2.inputs.should == [TypeInteger, TypeString]
18
+ @method_3.inputs.should == []
19
+ @method_bad.inputs.should == [TypeString]
20
+ end
21
+
22
+ it "should get output" do
23
+ @method_1.output.should == TypeInteger
24
+ @method_2.output.should == TypeInteger
25
+ @method_3.output.should == :receiver_type
26
+ @method_bad.output.should == TypeInteger
27
+ end
28
+
29
+ it "should be callable" do
30
+ @method_1.call(@int_1, @int_2).should == @int_2
31
+ @method_2.call(@int_1, @int_2, @str_1).should == @int_2
32
+ @method_3.call(@int_1).should == @int_1
33
+ @method_3.call(@str_1).should == @str_1
34
+ end
35
+
36
+ it "should validate inputs" do
37
+ @method_1.validate_inputs(@int_1).should.be.false
38
+ @method_2.validate_inputs(@int_1).should.be.false
39
+ @method_2.validate_inputs(@int_1, @str_1).should.be.false
40
+ @method_2.validate_inputs(@int_1, @int_2).should.be.false
41
+ @method_2.validate_inputs(@int_1, @int_2, @int_3, @str_1).should.be.false
42
+ @method_3.validate_inputs(@int_1, @int_2).should.be.false
43
+ end
44
+
45
+ it "should call" do
46
+ @method_1.call(@int_1, @int_2).should == @int_2
47
+ @method_2.call(@int_1, @int_2, @str_1).should == @int_2
48
+ @method_3.call(@int_1).should == @int_1
49
+ end
50
+
51
+ it "should raise interface error" do
52
+ should.raise(MethodInterfaceError){ @method_1.call(@int_1, @str_1) }
53
+ should.raise(MethodInterfaceError){ @method_2.call(@int_1, @str_1, @str_1) }
54
+ should.raise(MethodInterfaceError){ @method_bad.call(@int_1, @str_1) }
55
+ end
56
+ end
@@ -14,11 +14,21 @@ describe 'Model::RuleExpr' do
14
14
  @a.should.not == @b
15
15
  end
16
16
 
17
+ it 'should set/get input ticket expression' do
18
+ ticket = TicketExpr.new("A").to_seq
19
+ @a.add_input_ticket_expr(ticket).input_ticket_expr.should == ticket
20
+ end
21
+
22
+ it 'should set/get output ticket expression' do
23
+ ticket = TicketExpr.new("A").to_seq
24
+ @a.add_output_ticket_expr(ticket).output_ticket_expr.should == ticket
25
+ end
26
+
17
27
  describe 'pione method ==' do
18
28
  it 'should true' do
19
29
  @a.call_pione_method(
20
30
  "==", RuleExpr.new(Package.new("main"), "a")
21
- ).should.true
31
+ ).should == PioneBoolean.new(true).to_seq
22
32
  end
23
33
 
24
34
  it 'should false' do
@@ -26,15 +36,15 @@ describe 'Model::RuleExpr' do
26
36
  end
27
37
 
28
38
  it 'should raise type error' do
29
- should.raise(PioneModelTypeError) do
30
- @a.call_pione_method("==", PioneInteger.new(1))
39
+ should.raise(MethodNotFound) do
40
+ @a.call_pione_method("==", PioneInteger.new(1).to_seq)
31
41
  end
32
42
  end
33
43
  end
34
44
 
35
45
  describe 'pione method !=' do
36
46
  it 'should true' do
37
- @a.call_pione_method("!=", @b).should.true
47
+ @a.call_pione_method("!=", @b).should == PioneBoolean.new(true).to_seq
38
48
  end
39
49
 
40
50
  it 'should false' do
@@ -44,15 +54,15 @@ describe 'Model::RuleExpr' do
44
54
  end
45
55
 
46
56
  it 'should raise type error' do
47
- should.raise(PioneModelTypeError) do
48
- @a.call_pione_method("!=", PioneInteger.new(1))
57
+ should.raise(MethodNotFound) do
58
+ @a.call_pione_method("!=", PioneInteger.new(1).to_seq)
49
59
  end
50
60
  end
51
61
  end
52
62
 
53
63
  describe 'pione method as_string' do
54
64
  it 'should get string' do
55
- @a.call_pione_method("as_string").should == PioneString.new("a")
65
+ @a.call_pione_method("as_string").should == PioneString.new("a").to_seq
56
66
  end
57
67
  end
58
68
 
@@ -60,7 +70,7 @@ describe 'Model::RuleExpr' do
60
70
  it 'should set parameters' do
61
71
  params = Parameters.new({Variable.new("a") => PioneBoolean.true})
62
72
  @a.call_pione_method("params", params).should ==
63
- RuleExpr.new(Package.new("main"), "a", params)
73
+ RuleExpr.new(Package.new("main"), "a", params: params)
64
74
  end
65
75
  end
66
76
  end