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
@@ -5,14 +5,14 @@ describe 'Model::RuleCondition' do
5
5
  a = RuleCondition.new(
6
6
  [DataExpr.new("a")],
7
7
  [DataExpr.new("a")],
8
- Parameters.new(Variable.new("var") => "a".to_pione),
9
- Feature.and(Feature::RequisiteExpr.new("a"))
8
+ params: Parameters.new(Variable.new("var") => "a".to_pione),
9
+ features: Feature.and(Feature::RequisiteExpr.new("a"))
10
10
  )
11
11
  b = RuleCondition.new(
12
12
  [DataExpr.new("a")],
13
13
  [DataExpr.new("a")],
14
- Parameters.new(Variable.new("var") => "a".to_pione),
15
- Feature.and(Feature::RequisiteExpr.new("a"))
14
+ params: Parameters.new(Variable.new("var") => "a".to_pione),
15
+ features: Feature.and(Feature::RequisiteExpr.new("a"))
16
16
  )
17
17
  a.should == b
18
18
  end
@@ -21,14 +21,14 @@ describe 'Model::RuleCondition' do
21
21
  a = RuleCondition.new(
22
22
  [DataExpr.new("a")],
23
23
  [DataExpr.new("a")],
24
- Parameters.new(Variable.new("var") => "a".to_pione),
25
- Feature.and(Feature::RequisiteExpr.new("a"))
24
+ parmas: Parameters.new(Variable.new("var") => "a".to_pione),
25
+ features: Feature.and(Feature::RequisiteExpr.new("a"))
26
26
  )
27
27
  b = RuleCondition.new(
28
28
  [DataExpr.new("b")],
29
29
  [DataExpr.new("b")],
30
- Parameters.new(Variable.new("var") => "b".to_pione),
31
- Feature.and(Feature::RequisiteExpr.new("b"))
30
+ params: Parameters.new(Variable.new("var") => "b".to_pione),
31
+ features: Feature.and(Feature::RequisiteExpr.new("b"))
32
32
  )
33
33
  a.should.not == b
34
34
  end
@@ -37,14 +37,14 @@ end
37
37
  condition_a = RuleCondition.new(
38
38
  [DataExpr.new("a")],
39
39
  [DataExpr.new("a")],
40
- Parameters.new(Variable.new("var") => "a".to_pione),
41
- Feature.and(Feature::RequisiteExpr.new("a"))
40
+ params: Parameters.new(Variable.new("var") => "a".to_pione),
41
+ features: Feature.and(Feature::RequisiteExpr.new("a"))
42
42
  )
43
43
  condition_b = RuleCondition.new(
44
44
  [DataExpr.new("b")],
45
45
  [DataExpr.new("b")],
46
- Parameters.new(Variable.new("var") => "b".to_pione),
47
- Feature.and(Feature::RequisiteExpr.new("b"))
46
+ params: Parameters.new(Variable.new("var") => "b".to_pione),
47
+ features: Feature.and(Feature::RequisiteExpr.new("b"))
48
48
  )
49
49
 
50
50
  describe 'Model::ActionRule' do
@@ -0,0 +1,5 @@
1
+ require_relative '../test-util'
2
+
3
+ describe 'Model::Sequence' do
4
+ test_pione_method("sequence")
5
+ end
@@ -0,0 +1,60 @@
1
+ # type check
2
+ - '"integer"' : (1 | 2 | 3).type
3
+ - '"string"' : ("a" | "b" | "c").type
4
+ - '"float"' : (0.1 | 1.0 | 0.1e10).type
5
+ - '"boolean"' : (true | false).type
6
+
7
+ # each, each?, all, all?
8
+ - true : '"a".each?'
9
+ - false : '"a".all?'
10
+ - true : '"a".each.each?'
11
+ - false : '"a".each.all?'
12
+ - true : '"a".all.all?'
13
+ - false : '"a".all.each?'
14
+
15
+ # sequence
16
+ - "(1 | 2 | 3)" : ((1 | 2) | 3)
17
+ - "(1 | 2 | 3)" : (1 | (2 | 3))
18
+
19
+ # length
20
+ - true: '"abc".length == 1'
21
+ - true: '("a" | "b" | "c").length == 3'
22
+ - true: '("a" + "b" + "c").length == 1'
23
+
24
+ # []
25
+ - '"a"' : '("a" | "b" | "c")[1]'
26
+ - '"b"' : '("a" | "b" | "c")[2]'
27
+ - '"c"' : '("a" | "b" | "c")[3]'
28
+ - '"a" | "b"' : '("a" | "b" | "c")[1 | 2]'
29
+ - '"a" | "b" | "c"' : '("a" | "b" | "c")[1 | 2 | 3]'
30
+ - '"c" | "b" | "a"' : '("a" | "b" | "c")[3 | 2 | 1]'
31
+ - '"a"' : '"a"[1]'
32
+
33
+ # head
34
+ - '1' : '(1 | 2 | 3).head'
35
+ - '1' : '1.head'
36
+
37
+ # tail
38
+ - '2 | 3' : '(1 | 2 | 3).tail'
39
+ # - 'error' : '1.tail'
40
+
41
+ # last
42
+ - '3' : '(1 | 2 | 3).last'
43
+ - '1' : '1.last'
44
+
45
+ # init
46
+ - '1 | 2' : '(1 | 2 | 3).init'
47
+ # - 'error' : '1.init'
48
+
49
+ # memeber
50
+ - 'true' : '(1 | 2 | 3).member?(1)'
51
+ - 'true' : '(1 | 2 | 3).member?(2)'
52
+ - 'true' : '(1 | 2 | 3).member?(3)'
53
+ - 'false' : '(1 | 2 | 3).member?(4)'
54
+ - 'true | true | true' : '(1 | 2 | 3).member?(1 | 2 | 3)'
55
+ - 'true | false' : '(1 | 2).member?(1 | 3)'
56
+
57
+ # reverse
58
+ - '3 | 2 | 1' : '(1 | 2 | 3).reverse'
59
+ - '1' : '1.reverse'
60
+
@@ -20,8 +20,8 @@ describe 'Model::PioneString' do
20
20
 
21
21
  it 'should expand variables' do
22
22
  vtable = VariableTable.new({
23
- Variable.new("var1") => PioneString.new("a"),
24
- Variable.new("var2") => PioneString.new("b")
23
+ Variable.new("var1") => PioneString.new("a").to_seq,
24
+ Variable.new("var2") => PioneString.new("b").to_seq
25
25
  })
26
26
  PioneString.new("{$var1}:{$var2}").eval(vtable).should ==
27
27
  PioneString.new("a:b")
@@ -35,72 +35,5 @@ describe 'Model::PioneString' do
35
35
  PioneString.new("1 + 2 = 3")
36
36
  end
37
37
 
38
- describe 'pione method ==' do
39
- it 'should true' do
40
- @a.call_pione_method("==", PioneString.new("a")).should.true
41
- end
42
-
43
- it 'should false' do
44
- @a.call_pione_method("==", @b).should.not.true
45
- end
46
-
47
- it 'should raise type error' do
48
- should.raise(PioneModelTypeError) do
49
- @a.call_pione_method("==", PioneInteger.new(1))
50
- end
51
- end
52
- end
53
-
54
- describe 'pione method !=' do
55
- it 'should true' do
56
- @a.call_pione_method("!=", @b).should.true
57
- end
58
-
59
- it 'should false' do
60
- @a.call_pione_method("!=", PioneString.new("a")).should.not.true
61
- end
62
-
63
- it 'should raise type error' do
64
- should.raise(PioneModelTypeError) do
65
- @a.call_pione_method("!=", PioneInteger.new(1))
66
- end
67
- end
68
- end
69
-
70
- describe 'pione method +' do
71
- it 'should get appended string' do
72
- @a.call_pione_method("+", @b).should == PioneString.new("ab")
73
- end
74
-
75
- it 'should raise type error' do
76
- should.raise(PioneModelTypeError) do
77
- @a.call_pione_method("!=", PioneInteger.new(1))
78
- end
79
- end
80
- end
81
-
82
- describe 'pione method as_string' do
83
- it 'should get string' do
84
- @a.call_pione_method("as_string").should == @a
85
- end
86
- end
87
-
88
- describe 'pione method length' do
89
- it 'should get length of string' do
90
- @a.call_pione_method("length").should == PioneInteger.new(1)
91
- end
92
- end
93
-
94
- describe 'pione method include?' do
95
- it 'should get truth' do
96
- PioneString.new("acd").call_pione_method("include?", @a).should.true
97
- PioneString.new("acd").call_pione_method("include?", @b).should.false
98
- end
99
-
100
- it 'should raise type error' do
101
- should.raise(PioneModelTypeError) do
102
- @a.call_pione_method("include?", PioneInteger.new(1))
103
- end
104
- end
105
- end
38
+ test_pione_method("string")
106
39
  end
@@ -0,0 +1,83 @@
1
+ # ==, !=
2
+ - true : '"a" == "a"'
3
+ - false : '"a" != "a"'
4
+ - false : '"a" == "b"'
5
+ - true : '"a" != "b"'
6
+ - true : '"" == ""'
7
+ - true : '"" != "a"'
8
+ - true : '("a" | "b" | "c") == ("a" | "b" | "c")'
9
+ - true : '("a" | "b" | "c") != ("c" | "b" | "a")'
10
+ - false : '("" | "") == ""'
11
+
12
+ # +
13
+ - true : '("a" + "b") == "ab"'
14
+ - true : '("a" + "b" + "c") == "abc"'
15
+ - false : '("a" + "b" + "c") == ("a" | "b" | "c")'
16
+ - true : '(("a" | "b" | "c") + "a") == ("aa" | "ba" | "ca")'
17
+ - true : '("a" + ("a" | "b" | "c")) == ("aa" | "ab" | "ac")'
18
+ - true : '(("a" | "b" | "c") + ("a" | "b" | "c")) == ("aa" | "ab" | "ac" | "ba" | "bb" | "bc" | "ca" | "cb" | "cc")'
19
+
20
+ # include?
21
+ - true : '"abc".include?("")'
22
+ - true : '"abc".include?("a")'
23
+ - true : '"abc".include?("ab")'
24
+ - true : '"abc".include?("bc")'
25
+ - true : '"abc".include?("abc")'
26
+ - false : '"abc".include?("abcd")'
27
+ - 'true | true | true' : '("a" | "b" | "c").include?("")'
28
+ - 'true | false | false' : '("a" | "b" | "c").include?("a")'
29
+ - 'false | false | false' : '("a" | "b" | "c").include?("ab")'
30
+ - 'false | false | false' : '("a" | "b" | "c").include?("abc")'
31
+ - 'false | false | false' : '("a" | "b" | "c").include?("abcd")'
32
+ - 'false | false | false' : '"".include?("a" | "b" | "c")'
33
+ - 'true | false | false' : '"a".include?("a" | "b" | "c")'
34
+ - 'true | true | false' : '"ab".include?("a" | "b" | "c")'
35
+ - 'true | true | true' : '"abc".include?("a" | "b" | "c")'
36
+ - 'true | true | true' : '"abc".include?("c" | "b" | "a")'
37
+ - 'true | false | false | false | true | false | false | false | true' : '("a" | "b" | "c").include?("a" | "b" | "c")'
38
+
39
+ # insert
40
+ - '"Xabc"' : '"abc".insert(1, "X")'
41
+ - '"aXbc"' : '"abc".insert(2, "X")'
42
+ - '"abXc"' : '"abc".insert(3, "X")'
43
+ - '"abcX"' : '"abc".insert(4, "X")'
44
+ - '"Xabc" | "aXbc" | "abXc" | "abcX"' : '"abc".insert(1 | 2 | 3 | 4, "X")'
45
+
46
+ # count
47
+ - true: '"".count == 0'
48
+ - true: '"a".count == 1'
49
+ - true: '"ab".count == 2'
50
+ - true: '"abc".count == 3'
51
+ - true: '" ".count == 1'
52
+
53
+ # substring
54
+ - '""' : '"abc".substring(1,0)'
55
+ - '"a"' : '"abc".substring(1,1)'
56
+ - '"ab"' : '"abc".substring(1,2)'
57
+ - '"abc"' : '"abc".substring(1,3)'
58
+ - '"abc"' : '"abc".substring(1,4)'
59
+ - '"a" | "b" | "c"' : '"abc".substring(1 | 2 | 3, 1)'
60
+ - '"a" | "ab" | "abc"' : '"abc".substring(1, 1 | 2 | 3)'
61
+ - '"a" | "ab" | "abc" | "b" | "bc" | "bc" | "c" | "c" | "c"' : '"abc".substring(1 | 2 | 3, 1 | 2 | 3)'
62
+
63
+ # []
64
+ - true: '"abc"[0] == "abc"'
65
+ - true: '("a" | "b" | "c")[0] == "abc"'
66
+
67
+ # as_integer, i
68
+ - "1" : '"1".as_integer'
69
+ - "1" : '"1".i'
70
+ - "10" : '"10".i'
71
+ - "100" : '"100".i'
72
+ - "1" : '"01".i'
73
+ - "10" : '"010".i'
74
+ - "100" : '"0100".i'
75
+ - "-1" : '"-1".i'
76
+ - "(1 | 2 | 3)" : '("1" | "2" | "3").i'
77
+
78
+ # as_float, f
79
+ - "1.0" : '"1.0".as_float'
80
+ - "1.0" : '"1.0".f'
81
+ - "0.1" : '"0.1".f'
82
+ - "0.1e10" : '"0.1e10".f'
83
+ - "(0.1 | 1.0 | 0.1e10)" : '("0.1" | "1.0" | "0.1e10").f'
@@ -1,67 +1,17 @@
1
1
  require_relative '../test-util'
2
2
 
3
3
  describe 'Model::TicketExpr' do
4
- it 'should get empty ticket expression' do
5
- TicketExpr.empty.should.empty
6
- end
7
-
8
4
  it 'should equal between same name ticket expressions' do
9
- TicketExpr.new(["T"]).should == TicketExpr.new(["T"])
5
+ TicketExpr.new("T").should == TicketExpr.new("T")
10
6
  end
11
7
 
12
8
  it 'should not equal' do
13
- TicketExpr.new(["T"]).should.not == TicketExpr.new(["t"])
9
+ TicketExpr.new("T").should.not == TicketExpr.new("t")
14
10
  end
15
11
 
16
12
  it 'should get names' do
17
- TicketExpr.new(["T"]).names.should == Set.new(["T"])
18
- end
19
-
20
- it 'should make complex ticket' do
21
- (TicketExpr.new(["T1"]) + TicketExpr.new(["T2"])).should == TicketExpr.new(["T1", "T2"])
22
- end
23
-
24
- describe 'pione method: ==' do
25
- it 'should true' do
26
- TicketExpr.new(["T"]).call_pione_method("==", TicketExpr.new(["T"])).should.true
27
- end
28
-
29
- it 'should false' do
30
- TicketExpr.new(["T"]).call_pione_method("==", TicketExpr.new(["t"])).should.not.true
31
- end
32
-
33
- it 'should raise type error' do
34
- should.raise(PioneModelTypeError) do
35
- TicketExpr.new(["T"]).call_pione_method("==", PioneString.new("T"))
36
- end
37
- end
13
+ TicketExpr.new("T").name.should == "T"
38
14
  end
39
15
 
40
- describe 'pione method: !=' do
41
- it 'should true' do
42
- TicketExpr.new(["T"]).call_pione_method("!=", TicketExpr.new(["t"])).should.true
43
- end
44
-
45
- it 'should false' do
46
- TicketExpr.new(["T"]).call_pione_method("!=", TicketExpr.new(["T"])).should.false
47
- end
48
-
49
- it 'should raise type error' do
50
- should.raise(PioneModelTypeError) do
51
- TicketExpr.new(["T"]).call_pione_method("==", PioneString.new("T"))
52
- end
53
- end
54
- end
55
-
56
- describe 'pione method: +' do
57
- it 'should make complex ticket expression' do
58
- TicketExpr.new(["T1"]).call_pione_method("+", TicketExpr.new(["T2"]))
59
- .should == TicketExpr.new(["T1", "T2"])
60
- end
61
-
62
- it 'should get itself' do
63
- TicketExpr.new(["T"]).call_pione_method("+", TicketExpr.new(["T"]))
64
- .should == TicketExpr.new(["T"])
65
- end
66
- end
16
+ test_pione_method("ticket-expr")
67
17
  end
@@ -0,0 +1,11 @@
1
+ # ==
2
+ - "true" : "<T1> == <T1>"
3
+ - "false" : "<T1> == <T2>"
4
+
5
+ # !=
6
+ - "true" : "<T1> != <T2>"
7
+ - "false" : "<T1> != <T1>"
8
+
9
+ # |
10
+ - "true" : "(<T1> | <T2>)[1] == <T1>"
11
+
@@ -3,9 +3,9 @@ require_relative '../test-util'
3
3
  describe 'Model::VariableTable' do
4
4
  before do
5
5
  @table = VariableTable.new
6
- @table.set(Variable.new('A'), PioneInteger.new(1))
7
- @table.set(Variable.new('B'), PioneInteger.new(2))
8
- @table.set(Variable.new('C'), PioneInteger.new(3))
6
+ @table.set(Variable.new('A'), PioneInteger.new(1).to_seq)
7
+ @table.set(Variable.new('B'), PioneInteger.new(2).to_seq)
8
+ @table.set(Variable.new('C'), PioneInteger.new(3).to_seq)
9
9
  end
10
10
 
11
11
  it 'should get an empty table' do
@@ -13,9 +13,9 @@ describe 'Model::VariableTable' do
13
13
  end
14
14
 
15
15
  it 'should get a variable value' do
16
- @table.get(Variable.new('A')).should == PioneInteger.new(1)
17
- @table.get(Variable.new('B')).should == PioneInteger.new(2)
18
- @table.get(Variable.new('C')).should == PioneInteger.new(3)
16
+ @table.get(Variable.new('A')).should == PioneInteger.new(1).to_seq
17
+ @table.get(Variable.new('B')).should == PioneInteger.new(2).to_seq
18
+ @table.get(Variable.new('C')).should == PioneInteger.new(3).to_seq
19
19
  end
20
20
 
21
21
  it 'should get nil if the variable is unknown in the table' do
@@ -29,9 +29,9 @@ describe 'Model::VariableTable' do
29
29
 
30
30
  it 'should not raise errors by binding same value as same name variable' do
31
31
  should.not.raise(VariableBindingError) do
32
- @table.set(Variable.new('A'), PioneInteger.new(1))
33
- @table.set(Variable.new('B'), PioneInteger.new(2))
34
- @table.set(Variable.new('C'), PioneInteger.new(3))
32
+ @table.set(Variable.new('A'), PioneInteger.new(1).to_seq)
33
+ @table.set(Variable.new('B'), PioneInteger.new(2).to_seq)
34
+ @table.set(Variable.new('C'), PioneInteger.new(3).to_seq)
35
35
  end
36
36
  end
37
37
 
@@ -69,49 +69,48 @@ describe 'Model::VariableTable' do
69
69
 
70
70
  it 'should have input auto variables' do
71
71
  input_exprs = [
72
- DataExpr.new('*.a'),
73
- DataExpr.new('*.b').all
72
+ DataExpr.new('*.a').to_seq,
73
+ DataExpr.new('*.b').to_seq.set_all
74
74
  ]
75
75
  input_tuples = [
76
- Tuple[:data].new(name: '1.a', uri: 'test'),
77
- [ Tuple[:data].new(name: '1.b', uri: 'test1'),
78
- Tuple[:data].new(name: '2.b', uri: 'test2'),
79
- Tuple[:data].new(name: '3.b', uri: 'test3')]
76
+ Tuple[:data].new(name: '1.a', location: Location['test']),
77
+ [ Tuple[:data].new(name: '1.b', location: Location['test1']),
78
+ Tuple[:data].new(name: '2.b', location: Location['test2']),
79
+ Tuple[:data].new(name: '3.b', location: Location['test3'])]
80
80
  ]
81
81
 
82
82
  @table.make_input_auto_variables(input_exprs, input_tuples)
83
83
 
84
84
  input = @table.get(Variable.new('I'))
85
- input.should.kind_of(RuleIOList)
85
+ input.should.kind_of(KeyedSequence)
86
86
  input.should == @table.get(Variable.new('INPUT'))
87
87
 
88
- input1 = input[0]
89
- input1.should.kind_of(RuleIOElement)
90
- input1.name.should == "1.a".to_pione
91
- input1.match.size.should == 2
92
- input1.match[0] == "1.a".to_pione
93
- input1.match[1] == "1".to_pione
94
- input1.uri = "test"
88
+ input1 = input.get(PioneInteger.new(1)).first
89
+ input1.should.kind_of(DataExpr)
90
+ input1.should == DataExpr.new("1.a")
91
+ input1.matched_data.size.should == 2
92
+ input1.matched_data[0].should == "1.a"
93
+ input1.matched_data[1].should == "1"
94
+ input1.location.should == Location["test"]
95
95
 
96
- input2 = input[1]
97
- input2.should.kind_of(RuleIOList)
96
+ input2 = input.get(PioneInteger.new(2))
98
97
  input2.size.should == 3
99
- input2[0].should.kind_of(RuleIOElement)
100
- input2[0].name.should == "1.b".to_pione
101
- input2[0].match.size.should == 2
102
- input2[0].match[0].should == "1.b".to_pione
103
- input2[0].match[1].should == "1".to_pione
104
- input2[1].should.kind_of(RuleIOElement)
105
- input2[1].name.should == "2.b".to_pione
106
- input2[1].match.size.should == 2
107
- input2[1].match[0].should == "2.b".to_pione
108
- input2[1].match[1].should == "2".to_pione
109
- input2[2].should.kind_of(RuleIOElement)
110
- input2[2].name.should == "3.b".to_pione
111
- input2[2].match.size.should == 2
112
- input2[2].match[0].should == "3.b".to_pione
113
- input2[2].match[1].should == "3".to_pione
114
-
115
- @table.get(Variable.new('*')).should == PioneString.new('1')
98
+ input2[0].should.kind_of(DataExpr)
99
+ input2[0].name.should == "1.b"
100
+ input2[0].matched_data.size.should == 2
101
+ input2[0].matched_data[0].should == "1.b"
102
+ input2[0].matched_data[1].should == "1"
103
+ input2[1].should.kind_of(DataExpr)
104
+ input2[1].name.should == "2.b"
105
+ input2[1].matched_data.size.should == 2
106
+ input2[1].matched_data[0].should == "2.b"
107
+ input2[1].matched_data[1].should == "2"
108
+ input2[2].should.kind_of(DataExpr)
109
+ input2[2].name.should == "3.b"
110
+ input2[2].matched_data.size.should == 2
111
+ input2[2].matched_data[0].should == "3.b"
112
+ input2[2].matched_data[1].should == "3"
113
+
114
+ @table.get(Variable.new('*')).should == StringSequence.new([PioneString.new('1')], separator: ":")
116
115
  end
117
116
  end
@@ -16,23 +16,22 @@ describe 'Model::Variable' do
16
16
 
17
17
  describe 'pione method ==' do
18
18
  it 'should true' do
19
- @a.call_pione_method("==", @a).should.true
20
19
  vtable = VariableTable.new
21
- vtable.set(@a, PioneInteger.new(1))
22
- vtable.set(@b, PioneInteger.new(1))
23
- BinaryOperator.new("==", @a, @b).eval(vtable).should.true
20
+ vtable.set(@a, PioneInteger.new(1).to_seq)
21
+ vtable.set(@b, PioneInteger.new(1).to_seq)
22
+ BinaryOperator.new("==", @a, @b).eval(vtable).should == PioneBoolean.new(true).to_seq
24
23
  end
25
24
 
26
25
  it 'should false' do
27
26
  vtable = VariableTable.new
28
- vtable.set(@a, PioneInteger.new(1))
29
- vtable.set(@b, PioneInteger.new(2))
30
- BinaryOperator.new("==", @a, @b).eval(vtable).should.false
27
+ vtable.set(@a, PioneInteger.new(1).to_seq)
28
+ vtable.set(@b, PioneInteger.new(2).to_seq)
29
+ BinaryOperator.new("==", @a, @b).eval(vtable).should == PioneBoolean.new(false).to_seq
31
30
  end
32
31
 
33
32
  it 'should raise unbound variable error' do
34
33
  vtable = VariableTable.new
35
- vtable.set(@a, PioneInteger.new(1))
34
+ vtable.set(@a, PioneInteger.new(1).to_seq)
36
35
  should.raise(UnboundVariableError) do
37
36
  BinaryOperator.new("==", @a, @b).eval(vtable)
38
37
  end
@@ -40,9 +39,9 @@ describe 'Model::Variable' do
40
39
 
41
40
  it 'should raise type error' do
42
41
  vtable = VariableTable.new
43
- vtable.set(@a, PioneInteger.new(1))
44
- vtable.set(@b, PioneFloat.new(1.0))
45
- should.raise(PioneModelTypeError) do
42
+ vtable.set(@a, PioneInteger.new(1).to_seq)
43
+ vtable.set(@b, PioneFloat.new(1.0).to_seq)
44
+ should.raise(MethodNotFound) do
46
45
  BinaryOperator.new("==", @a, @b).eval(vtable)
47
46
  end
48
47
  end
@@ -51,22 +50,21 @@ describe 'Model::Variable' do
51
50
  describe 'pione method !=' do
52
51
  it 'should true' do
53
52
  vtable = VariableTable.new
54
- vtable.set(@a, PioneInteger.new(1))
55
- vtable.set(@b, PioneInteger.new(2))
56
- BinaryOperator.new("!=", @a, @b).eval(vtable).should.true
53
+ vtable.set(@a, PioneInteger.new(1).to_seq)
54
+ vtable.set(@b, PioneInteger.new(2).to_seq)
55
+ BinaryOperator.new("!=", @a, @b).eval(vtable).should == PioneBoolean.new(true).to_seq
57
56
  end
58
57
 
59
58
  it 'should false' do
60
- @a.call_pione_method("!=", @a).should.false
61
59
  vtable = VariableTable.new
62
- vtable.set(@a, PioneInteger.new(1))
63
- vtable.set(@b, PioneInteger.new(1))
64
- BinaryOperator.new("!=", @a, @b).eval(vtable).should.false
60
+ vtable.set(@a, PioneInteger.new(1).to_seq)
61
+ vtable.set(@b, PioneInteger.new(1).to_seq)
62
+ BinaryOperator.new("!=", @a, @b).eval(vtable).should == PioneBoolean.new(false).to_seq
65
63
  end
66
64
 
67
65
  it 'should raise unbound variable error' do
68
66
  vtable = VariableTable.new
69
- vtable.set(@a, PioneInteger.new(1))
67
+ vtable.set(@a, PioneInteger.new(1).to_seq)
70
68
  should.raise(UnboundVariableError) do
71
69
  BinaryOperator.new("!=", @a, @b).eval(vtable)
72
70
  end
@@ -74,9 +72,9 @@ describe 'Model::Variable' do
74
72
 
75
73
  it 'should raise type error' do
76
74
  vtable = VariableTable.new
77
- vtable.set(@a, PioneInteger.new(1))
78
- vtable.set(@b, PioneFloat.new(1.0))
79
- should.raise(PioneModelTypeError) do
75
+ vtable.set(@a, PioneInteger.new(1).to_seq)
76
+ vtable.set(@b, PioneFloat.new(1.0).to_seq)
77
+ should.raise(MethodNotFound) do
80
78
  BinaryOperator.new("!=", @a, @b).eval(vtable)
81
79
  end
82
80
  end
@@ -83,3 +83,12 @@ flow_block:
83
83
  - |
84
84
  Flow
85
85
  rule Test
86
+ action_block:
87
+ valid:
88
+ - |
89
+ Action
90
+ echo "abc" > A.txt
91
+ End
92
+ empty_block:
93
+ valid:
94
+ - "End"
@@ -1,20 +1,3 @@
1
- expr_operator:
2
- valid:
3
- - "=="
4
- - "!="
5
- - ">="
6
- - "<="
7
- - ">"
8
- - "<"
9
- - "&&"
10
- - "||"
11
- - "+"
12
- - "-"
13
- - "*"
14
- - "%"
15
- - "/"
16
- - ">>>"
17
- - "==>"
18
1
  expr_operator_application:
19
2
  valid:
20
3
  - "true == true"
@@ -7,7 +7,7 @@ call_rule_line:
7
7
  invalid:
8
8
  - rule
9
9
  - "rule &package:$var"
10
- - rule $var:Test
10
+ # - rule $var:Test # should be invalid?
11
11
  - rule :$var
12
12
  if_block_begin:
13
13
  valid:
@@ -2,14 +2,10 @@ input_line:
2
2
  valid:
3
3
  - input '*.txt'
4
4
  - input "*.txt".as_data_expr
5
- invalid:
6
- - input @@@
7
5
  output_line:
8
6
  valid:
9
7
  - output '*.txt'
10
8
  - output "*.txt".as_data_expr
11
- invalid:
12
- - output @@@
13
9
  param_line:
14
10
  valid:
15
11
  - "param $abc"