logic 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 397f970e699d515bdde7d8e1de8c721fcd653ae4
4
- data.tar.gz: 9b13c676f0606347dea178edee118b0367df33db
3
+ metadata.gz: 11e5edf39c29218f130ec320ef00c7b883eb6800
4
+ data.tar.gz: 86a38a736d41e8801598678e4be7ac2639725b29
5
5
  SHA512:
6
- metadata.gz: 83fb66a1bcada7c6e4fcc26567ae367c8e429b0d4f39775fd5296ab2736c64c77cca0927fb2140e61f58e2aa5e431e9d63706c06c43e96498be40f10f54d2aae
7
- data.tar.gz: 3f1d5980bff682648e9fb2b6dc28fb7e395ef92b31544d57add4c8098de5a477e662d097b2994011b60a03547677cdb9c2a44b7a457d96e0f5e3c504b44a74a5
6
+ metadata.gz: cd9a8d5026c1011747cb33bd5f0bec1981c3054bc0cbcd4d02de8937c586bdf7cda367ae0b44da181f28cea3c44121f2b82dbc0e2ec3d5a233d07f58ea15d3fb
7
+ data.tar.gz: 067073560f67447e7bb195232ed9b149b3a93eb1e35d9bad6f0ca76e423e49d329d4ba9d7bf1c110236b4e63b70686d49c1915116dd17af3a2d0469e57bb2cba
data/LICENSE CHANGED
@@ -1,5 +1,5 @@
1
- Copyright (c) 2010 Bryan Ash
2
-
1
+ Copyright (c) 2017 Bryan Ash
2
+
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
5
5
  "Software"), to deal in the Software without restriction, including
@@ -7,10 +7,10 @@ without limitation the rights to use, copy, modify, merge, publish,
7
7
  distribute, sublicense, and/or sell copies of the Software, and to
8
8
  permit persons to whom the Software is furnished to do so, subject to
9
9
  the following conditions:
10
-
10
+
11
11
  The above copyright notice and this permission notice shall be
12
12
  included in all copies or substantial portions of the Software.
13
-
13
+
14
14
  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
15
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
16
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
@@ -8,10 +8,15 @@
8
8
 
9
9
  By default, you get a truth table and a list of MC/DC pairs:
10
10
 
11
- logic '(a or b) and (c or d)'
11
+ logic '(apple or bongo) and (cat or dog)'
12
12
 
13
13
  Gives you:
14
14
 
15
+ a <= apple
16
+ b <= bongo
17
+ c <= cat
18
+ d <= dog
19
+
15
20
  a b c d | output
16
21
  1) 0 0 0 0 | 0
17
22
  2) 0 0 0 1 | 0
@@ -35,6 +40,10 @@ Gives you:
35
40
  c => [[5, 7], [9, 11], [13, 15]]
36
41
  d => [[5, 6], [9, 10], [13, 14]]
37
42
 
43
+ == Operators
44
+
45
+ The syntax understands: 'and', '&&', 'or', '||', 'xor', '^', 'not', '!', and parenthesis.
46
+
38
47
  == Copyright
39
48
 
40
- Copyright (c) 2010 Bryan Ash. See LICENSE for details.
49
+ Copyright (c) 2017 Bryan Ash. See LICENSE for details.
@@ -1,12 +1,11 @@
1
1
  grammar Logic
2
-
3
2
  rule decision
4
3
  binary_decision / unary_decision
5
4
  end
6
5
 
7
6
  rule binary_decision
8
- operand_1:unary_decision space
9
- operator space
7
+ operand_1:unary_decision
8
+ operator
10
9
  operand_2:decision <BinaryDecision>
11
10
  end
12
11
 
@@ -15,12 +14,11 @@ grammar Logic
15
14
  end
16
15
 
17
16
  rule negation
18
- space?
19
- 'not' space operand:unary_decision <Negation>
17
+ ('not' space / '!' space?) operand:unary_decision <Negation>
20
18
  end
21
19
 
22
20
  rule condition
23
- [A-Za-z]+ <Condition>
21
+ [A-Za-z_]+ <Condition>
24
22
  end
25
23
 
26
24
  rule parenthesized
@@ -28,15 +26,14 @@ grammar Logic
28
26
  end
29
27
 
30
28
  rule operator
31
- 'and' <And>
29
+ (space 'and' space / space? '&&' space?) <And>
32
30
  /
33
- 'or' <Or>
31
+ (space 'or' space / space? '||' space?) <Or>
34
32
  /
35
- 'xor' <Xor>
33
+ (space 'xor' space / space? '^' space?) <Xor>
36
34
  end
37
35
 
38
36
  rule space
39
37
  [ \t\n\r]+
40
38
  end
41
-
42
39
  end
@@ -1,6 +1,5 @@
1
1
  require 'integer'
2
2
  require 'range'
3
- require 'symbol'
4
3
 
5
4
  class TestCase
6
5
 
@@ -4,41 +4,45 @@ require 'logic_parser'
4
4
  require 'logic_operations'
5
5
 
6
6
  describe LogicParser, :parsing do
7
-
8
7
  let(:parser) { LogicParser.new }
9
8
 
10
9
  describe "a single condition" do
11
10
  it "identifies the condition" do
12
11
  decision = parser.parse('Hello')
13
- decision.condition_identifiers.should == ['Hello']
12
+ expect(decision.condition_identifiers).to eq ['Hello']
13
+ end
14
+
15
+ it 'allows underscores in the condition' do
16
+ decision = parser.parse('a_name')
17
+ expect(decision.condition_identifiers).to eq ['a_name']
14
18
  end
15
19
  end
16
20
 
17
21
  describe "'A or B'" do
18
22
  it "condition identifiers are ['A','B']" do
19
23
  decision = parser.parse('A or B')
20
- decision.condition_identifiers.should == ['A','B']
24
+ expect(decision.condition_identifiers).to eq ['A','B']
21
25
  end
22
26
  end
23
27
 
24
28
  describe "'A or B or C'" do
25
29
  it "condition identifiers are ['A','B','C']" do
26
30
  decision = parser.parse('A or B or C')
27
- decision.condition_identifiers.should == ['A','B','C']
31
+ expect(decision.condition_identifiers).to eq ['A','B','C']
28
32
  end
29
33
  end
30
34
 
31
35
  describe "'A and B'" do
32
36
  it "conditions are ['A','B']" do
33
37
  decision = parser.parse('A and B')
34
- decision.condition_identifiers.should == ['A','B']
38
+ expect(decision.condition_identifiers).to eq ['A','B']
35
39
  end
36
40
  end
37
41
 
38
42
  describe "'A and B and C'" do
39
43
  it "condition identifiers are ['A','B','C']" do
40
44
  decision = parser.parse('A and B and C')
41
- decision.condition_identifiers.should == ['A','B','C']
45
+ expect(decision.condition_identifiers).to eq ['A','B','C']
42
46
  end
43
47
  end
44
48
 
@@ -50,7 +54,11 @@ describe LogicParser, :parsing do
50
54
  { [0] => 0,
51
55
  [1] => 1
52
56
  },
53
- ' not negated' =>
57
+ 'not negated' =>
58
+ { [0] => 1,
59
+ [1] => 0
60
+ },
61
+ '!negated' =>
54
62
  { [0] => 1,
55
63
  [1] => 0
56
64
  },
@@ -59,17 +67,54 @@ describe LogicParser, :parsing do
59
67
  [0, 1] => 1,
60
68
  [1, 0] => 1
61
69
  },
70
+ 'A || B' =>
71
+ { [0, 0] => 0,
72
+ [0, 1] => 1,
73
+ [1, 0] => 1
74
+ },
75
+ 'A||B' =>
76
+ { [0, 0] => 0,
77
+ [0, 1] => 1,
78
+ [1, 0] => 1
79
+ },
62
80
  'A xor B' =>
63
81
  { [0, 0] => 0,
64
82
  [0, 1] => 1,
65
83
  [1, 0] => 1,
66
84
  [1, 1] => 0
67
85
  },
86
+ 'A ^ B' =>
87
+ { [0, 0] => 0,
88
+ [0, 1] => 1,
89
+ [1, 0] => 1,
90
+ [1, 1] => 0
91
+ },
92
+ 'A^B' =>
93
+ { [0, 0] => 0,
94
+ [0, 1] => 1,
95
+ [1, 0] => 1,
96
+ [1, 1] => 0
97
+ },
68
98
  'A and B' =>
69
99
  { [1, 1] => 1,
70
100
  [0, 1] => 0,
71
101
  [1, 0] => 0
72
102
  },
103
+ 'A && B' =>
104
+ { [1, 1] => 1,
105
+ [0, 1] => 0,
106
+ [1, 0] => 0
107
+ },
108
+ 'A&&B' =>
109
+ { [1, 1] => 1,
110
+ [0, 1] => 0,
111
+ [1, 0] => 0
112
+ },
113
+ 'A and not B' =>
114
+ { [1, 1] => 0,
115
+ [0, 1] => 0,
116
+ [1, 0] => 1
117
+ },
73
118
  'A or B or C' =>
74
119
  { [0, 0, 0] => 0,
75
120
  [1, 0, 0] => 1,
@@ -102,15 +147,12 @@ describe LogicParser, :parsing do
102
147
  }
103
148
  }.each do |logic, cases|
104
149
  describe "'#{logic}'" do
105
-
106
150
  cases.each do |conditions, result|
107
151
  it "'#{conditions}' evaluates to '#{result}'" do
108
152
  decision = parser.parse(logic)
109
- decision.evaluate(conditions).should == result
153
+ expect(decision.evaluate(conditions)).to eq result
110
154
  end
111
155
  end
112
156
  end
113
-
114
157
  end
115
-
116
158
  end
@@ -1,12 +1,10 @@
1
1
  require 'test_case_set'
2
2
 
3
3
  describe TestCaseSet do
4
-
5
4
  describe "with 1 condition" do
6
5
  it "input_dentifiers includes 'a'" do
7
6
  test_case_set = TestCaseSet.new(['hello'], nil)
8
- test_case_set.input_identifiers.should include('a')
7
+ expect(test_case_set.input_identifiers).to include('a')
9
8
  end
10
9
  end
11
-
12
10
  end
metadata CHANGED
@@ -1,45 +1,73 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryan Ash
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-31 00:00:00.000000000 Z
11
+ date: 2017-01-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: treetop
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.4.2
19
+ version: 1.6.8
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.4.2
26
+ version: 1.6.8
27
27
  - !ruby/object:Gem::Dependency
28
- name: polyglot
28
+ name: aruba
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 0.2.9
34
- type: :runtime
33
+ version: 0.14.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.14.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: cucumber
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.4.0
48
+ type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - ">="
52
+ - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 0.2.9
54
+ version: 2.4.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.5.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.5.0
41
69
  description: Produces truth table and MC/DC test case pairs from parsed logic statement
42
- email: ''
70
+ email: bryan.a.ash@gmail.com
43
71
  executables:
44
72
  - logic
45
73
  extensions: []
@@ -55,7 +83,6 @@ files:
55
83
  - lib/logic_operations.rb
56
84
  - lib/logic_parser.treetop
57
85
  - lib/range.rb
58
- - lib/symbol.rb
59
86
  - lib/test_case.rb
60
87
  - lib/test_case_set.rb
61
88
  - lib/truth_table.rb
@@ -63,7 +90,8 @@ files:
63
90
  - spec/spec.opts
64
91
  - spec/test_case_set_spec.rb
65
92
  homepage:
66
- licenses: []
93
+ licenses:
94
+ - MIT
67
95
  metadata: {}
68
96
  post_install_message:
69
97
  rdoc_options:
@@ -79,10 +107,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - ">="
81
109
  - !ruby/object:Gem::Version
82
- version: '0'
110
+ version: 1.3.6
83
111
  requirements: []
84
112
  rubyforge_project:
85
- rubygems_version: 2.2.2
113
+ rubygems_version: 2.5.1
86
114
  signing_key:
87
115
  specification_version: 4
88
116
  summary: Taking the pain out of MC/DC testing
@@ -1,7 +0,0 @@
1
- class Symbol
2
-
3
- def to_proc
4
- Proc.new { |obj, *args| obj.send(self, *args) }
5
- end
6
-
7
- end