srl_ruby 0.3.3 → 0.3.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: 5d359b7fdd648df4b9e77e0bf64266b3fec2d474
4
- data.tar.gz: 7a8a1efb3f978b8f45b15c47c0b457a6109daf37
3
+ metadata.gz: 75b3f62195385724cef744d9d066001cacb56da7
4
+ data.tar.gz: c987288da96445ada26f5b115e1b9e64e5062fbb
5
5
  SHA512:
6
- metadata.gz: 20c7d24104afefa0371692ca2f0713916b9a6edbc1825c32bb77ff1c29760fa46bd04731ab88914f8dbd1d97f1cbd523f8b5e765d57ad0cf9ea7938110161c95
7
- data.tar.gz: 9110435c0ae7bf089c167a46c81f6aabe91a7f9d52926843654972877aef2ccc1838c5a5218e8eac1f628cf95328f1f044a62b9d1fc4cfbcc6db49752b24b9ee
6
+ metadata.gz: 288976a2ff3ce17282af5c74385c84ccd8a318626c773a6c567953e9937f9ef7c146af941646a7f426fea08b2072c88d2385dd1a13ed7b217e38dd7400a4cbb7
7
+ data.tar.gz: 2321788937a965131c417acdb731d7d5a1278790cd2e2933b5e163296272acb2a526d0add3fc080041836b2ba1224f11429fd2c65055b30c072fcc58cb8c35b6
data/.rubocop.yml CHANGED
@@ -1,31 +1,189 @@
1
1
  AllCops:
2
2
  Exclude:
3
- - 'exp/**/*'
3
+ - 'exp/**/*'
4
+
5
+ Layout/CaseIndentation:
6
+ Enabled: false
7
+
8
+ Layout/CommentIndentation:
9
+ Enabled: false
10
+
11
+ Layout/ElseAlignment:
12
+ Enabled: false
13
+
14
+ Layout/EmptyLines:
15
+ Enabled: false
16
+
17
+ Layout/EndAlignment:
18
+ Enabled: false
4
19
 
5
20
  Layout/EndOfLine:
6
21
  Enabled: true
7
22
  EnforcedStyle: lf
8
-
23
+
24
+ Layout/IndentationWidth:
25
+ Enabled: false
26
+
27
+ Layout/IndentationConsistency:
28
+ Enabled: false
29
+
30
+ Layout/MultilineHashBraceLayout:
31
+ Enabled: false
32
+
33
+ Layout/SpaceAroundOperators:
34
+ Enabled: false
35
+
36
+ Layout/SpaceInsideParens:
37
+ Enabled: false
38
+
39
+ Layout/Tab:
40
+ Enabled: true
41
+
42
+ Layout/TrailingBlankLines:
43
+ Enabled: false
44
+
45
+ Layout/TrailingWhitespace:
46
+ Enabled: false
47
+
48
+ Lint/Loop:
49
+ Enabled: false
50
+
51
+ Lint/RescueException:
52
+ Enabled: false
53
+
54
+ Lint/UnusedMethodArgument:
55
+ Enabled: false
56
+
57
+ Lint/UselessAccessModifier:
58
+ Enabled: false
59
+
60
+ Lint/Void:
61
+ Enabled: false
62
+
63
+ Lint/UselessAssignment:
64
+ Enabled: false
65
+
66
+ Metrics/AbcSize:
67
+ Enabled: false
68
+
9
69
  Metrics/BlockLength:
10
70
  Enabled: true
11
71
  Max: 300
12
-
72
+
73
+ Metrics/ClassLength:
74
+ Enabled: true
75
+ Max: 300
76
+
77
+ Metrics/CyclomaticComplexity:
78
+ Enabled: false
79
+
80
+ Metrics/LineLength:
81
+ Enabled: false
82
+ Max: 90
83
+
13
84
  Metrics/MethodLength:
14
85
  Enabled: true
15
- Max: 30
16
-
86
+ Max: 40
87
+
17
88
  Metrics/ModuleLength:
18
89
  Enabled: true
19
90
  Max: 500
20
-
91
+
92
+ Metrics/PerceivedComplexity:
93
+ Enabled: false
94
+
21
95
  Naming/ConstantName:
22
96
  Enabled: false
97
+
98
+ Naming/ClassAndModuleCamelCase:
99
+ Enabled: false
23
100
 
24
- Naming/VariableName:
101
+ Naming/UncommunicativeBlockParamName:
25
102
  Enabled: false
26
103
 
104
+ Naming/UncommunicativeMethodParamName:
105
+ Enabled: false
106
+
107
+ Naming/VariableName:
108
+ Enabled: false
109
+
110
+ Style/Alias:
111
+ Enabled: false
112
+
113
+ Layout/AlignHash:
114
+ Enabled: false
115
+
116
+ Style/AsciiComments:
117
+ Enabled: false
118
+
119
+ Style/BarePercentLiterals:
120
+ Enabled: false
121
+
122
+ Style/BlockComments:
123
+ Enabled: false
124
+
125
+ Style/CharacterLiteral:
126
+ Enabled: false
127
+
128
+ Style/ClassCheck:
129
+ Enabled: false
130
+
131
+ Style/ClassVars:
132
+ Enabled: false
133
+
134
+ Style/ColonMethodCall:
135
+ Enabled: false
136
+
137
+ Style/CommentAnnotation:
138
+ Enabled: false
139
+
27
140
  Style/CommentedKeyword:
28
141
  Enabled: false
29
-
142
+
143
+ Style/ConditionalAssignment:
144
+ Enabled: false
145
+
146
+ Style/DefWithParentheses:
147
+ Enabled: false
148
+
149
+ Style/Documentation:
150
+ Enabled: false
151
+
152
+ Style/ExpandPathArguments:
153
+ Enabled: false
154
+
155
+ Style/GuardClause:
156
+ Enabled: false
157
+
158
+ Style/IfUnlessModifier:
159
+ Enabled: false
160
+
161
+ Style/InverseMethods:
162
+ Enabled: false
163
+
164
+ Style/Next:
165
+ Enabled: false
166
+
167
+ Style/RaiseArgs:
168
+ Enabled: true
169
+
30
170
  Style/RedundantReturn:
31
- Enabled: false
171
+ Enabled: false
172
+
173
+ Style/RedundantSelf:
174
+ Enabled: true
175
+
176
+ Style/RegexpLiteral:
177
+ Enabled: false
178
+
179
+ Style/PercentLiteralDelimiters:
180
+ Enabled: false
181
+
182
+ Style/StringLiterals:
183
+ Enabled: false
184
+
185
+ Style/TernaryParentheses:
186
+ Enabled: false
187
+
188
+ Style/UnlessElse:
189
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## [0.3.4] - 2018-04-20
2
+
3
+ ### Fixed
4
+ - Method `Tokenizer#_next_token` failed to recognize digit or integer value immediately followed by a comma
5
+
1
6
  ## [0.3.3] - 2018-04-19
2
7
  ### Changed
3
8
  - Binary `srl_ruby` now accepts a SRL filename as command-line argument. Command-line documentation updated.
@@ -125,10 +125,10 @@ module Regex # This module is used as a namespace
125
125
  def ==(other)
126
126
  result = case other
127
127
  when Character
128
- self.to_str == other.to_str
128
+ to_str == other.to_str
129
129
 
130
130
  when Integer
131
- self.codepoint == other
131
+ codepoint == other
132
132
 
133
133
  when String
134
134
  other.size > 1 ? false : to_str == other
@@ -4,7 +4,7 @@ module Regex # This module is used as a namespace
4
4
  # A raw expression is a string that will be copied verbatim (as is)
5
5
  # in the generated regular expression.
6
6
  class RawExpression < AtomicExpression
7
- attr_reader :raw
7
+ attr_reader :raw
8
8
 
9
9
  # Constructor
10
10
  def initialize(rawLiteral)
@@ -16,7 +16,7 @@ module Regex # This module is used as a namespace
16
16
 
17
17
  # Conversion method re-definition.
18
18
  # Purpose: Return the String representation of the expression.
19
- alias_method :text_repr, :raw
19
+ alias_method :text_repr, :raw
20
20
  end # class
21
21
  end # module
22
22
 
@@ -5,6 +5,8 @@ require_relative 'srl_token'
5
5
 
6
6
 
7
7
  module SrlRuby
8
+ # A tokenizer for the Simple Regex Language.
9
+ # Responsibility: break input SRL into a sequence of token objects.
8
10
  # The tokenizer should recognize:
9
11
  # Keywords: as, capture, letter
10
12
  # Integer literals including single digit
@@ -86,6 +88,8 @@ module SrlRuby
86
88
 
87
89
  class ScanError < StandardError; end
88
90
 
91
+ # Constructor. Initialize a tokenizer for SRL.
92
+ # @param srl_source [String] SRL text to tokenize.
89
93
  def initialize(source)
90
94
  @scanner = StringScanner.new(source)
91
95
  @lineno = 1
@@ -114,10 +118,10 @@ module SrlRuby
114
118
  if '(),'.include? curr_ch
115
119
  # Delimiters, separators => single character token
116
120
  token = build_token(@@lexeme2name[curr_ch], scanner.getch)
117
- elsif (lexeme = scanner.scan(/[0-9]{2,}((?=\s)|$)/))
121
+ elsif (lexeme = scanner.scan(/[0-9]{2,}((?=\s|,)|$)/))
118
122
  token = build_token('INTEGER', lexeme) # An integer has 2..* digits
119
- elsif (lexeme = scanner.scan(/[0-9]((?=\s)|$)/))
120
- token = build_token('DIGIT_LIT', lexeme)
123
+ elsif (lexeme = scanner.scan(/[0-9]((?=\s|,)|$)/))
124
+ token = build_token('DIGIT_LIT', lexeme)
121
125
  elsif (lexeme = scanner.scan(/"(?:\\"|[^"])*"/)) # Double quotes literal?
122
126
  unquoted = lexeme.gsub(/(^")|("$)/, '')
123
127
  token = build_token('STRING_LIT', unquoted)
@@ -136,7 +140,7 @@ module SrlRuby
136
140
  erroneous = curr_ch.nil? ? '' : scanner.scan(/./)
137
141
  sequel = scanner.scan(/.{1,20}/)
138
142
  erroneous += sequel unless sequel.nil?
139
- raise ScanError.new("Unknown token #{erroneous} on line #{lineno}")
143
+ raise ScanError, "Unknown token #{erroneous} on line #{lineno}"
140
144
  end
141
145
 
142
146
  return token
@@ -1,3 +1,3 @@
1
1
  module SrlRuby
2
- VERSION = '0.3.3'.freeze
2
+ VERSION = '0.3.4'.freeze
3
3
  end
@@ -94,7 +94,7 @@ module Acceptance
94
94
  erroneous = curr_ch.nil? ? '' : curr_ch
95
95
  sequel = scanner.scan(/.{1,20}/)
96
96
  erroneous += sequel unless sequel.nil?
97
- raise ScanError.new("Unknown token #{erroneous}")
97
+ raise ScanError, "Unknown token #{erroneous}"
98
98
  end
99
99
 
100
100
  return token
@@ -1,166 +1,170 @@
1
- # File: character_spec.rb
2
- require_relative '../spec_helper' # Use the RSpec test framework
3
- require_relative '../../lib/regex/character'
4
-
5
- module Regex # Open this namespace, to get rid of scope qualifiers
6
- describe Character do
7
- # This constant holds an arbitrary selection of characters
8
- SampleChars = [?a, ?\0, ?\u0107].freeze
9
-
10
- # This constant holds the codepoints of the character selection
11
- SampleInts = [0x61, 0, 0x0107].freeze
12
-
13
- # This constant holds an arbitrary selection of two characters (digrams)
14
- # escape sequences
15
- SampleDigrams = %w[\n \e \0 \6 \k].freeze
16
-
17
- # This constant holds an arbitrary selection of escaped octal
18
- # or hexadecimal literals
19
- SampleNumEscs = %w[\0 \07 \x07 \xa \x0F \u03a3 \u{a}].freeze
20
-
21
- before(:all) do
22
- # Ensure that the set of codepoints is mapping the set of chars...
23
- expect(SampleChars.map(&:ord)).to eq(SampleInts)
24
- end
25
-
26
- context 'Creation & initialization' do
27
- it 'should be created with a with an integer value (codepoint) or...' do
28
- SampleInts.each do |aCodepoint|
29
- expect { Character.new(aCodepoint) }.not_to raise_error
30
- end
31
- end
32
-
33
- it '...could be created with a single character String or...' do
34
- SampleChars.each do |aChar|
35
- expect { Character.new(aChar) }.not_to raise_error
36
- end
37
- end
38
-
39
- it '...could be created with an escape sequence' do
40
- # Case 1: escape sequence is a digram
41
- SampleDigrams.each do |anEscapeSeq|
42
- expect { Character.new(anEscapeSeq) }.not_to raise_error
43
- end
44
-
45
- # Case 2: escape sequence is an escaped octal or hexadecimal literal
46
- SampleNumEscs.each do |anEscapeSeq|
47
- expect { Character.new(anEscapeSeq) }.not_to raise_error
48
- end
49
- end
50
- end # context
51
-
52
- context 'Provided services' do
53
- it 'Should know its lexeme if created from a string' do
54
- # Lexeme is defined when the character was initialised from a text
55
- SampleChars.each do |aChar|
56
- ch = Character.new(aChar)
57
- expect(ch.lexeme).to eq(aChar)
58
- end
59
- end
60
-
61
- it 'Should not know its lexeme representation from a codepoint' do
62
- SampleInts.each do |aChar|
63
- ch = Character.new(aChar)
64
- expect(ch.lexeme).to be_nil
65
- end
66
- end
67
-
68
- it 'should know its String representation' do
69
- # Try for one character
70
- newOne = Character.new(?\u03a3)
71
- expect(newOne.char).to eq('Σ')
72
- expect(newOne.to_str).to eq("\u03A3")
73
-
74
- # Try with our chars sample
75
- SampleChars.each { |aChar| Character.new(aChar).to_str == aChar }
76
-
77
- # Try with our codepoint sample
78
- mapped_chars = SampleInts.map do |aCodepoint|
79
- Character.new(aCodepoint).char
80
- end
81
- expect(mapped_chars).to eq(SampleChars)
82
-
83
- # Try with our escape sequence samples
84
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
85
- expectation = String.class_eval(%Q|"#{anEscSeq}"|, __FILE__, __LINE__)
86
- Character.new(anEscSeq).to_str == expectation
87
- end
88
- end
89
-
90
- it 'should know its codepoint' do
91
- # Try for one character
92
- newOne = Character.new(?\u03a3)
93
- expect(newOne.codepoint).to eq(0x03a3)
94
-
95
- # Try with our chars sample
96
- allCodepoints = SampleChars.map do |aChar|
97
- Character.new(aChar).codepoint
98
- end
99
- expect(allCodepoints).to eq(SampleInts)
100
-
101
- # Try with our codepoint sample
102
- mapped_chars = SampleInts.each do |aCodepoint|
103
- expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint)
104
- end
105
-
106
- # Try with our escape sequence samples
107
- (SampleDigrams + SampleNumEscs).each do |anEscSeq|
108
- expectation = String.class_eval(%Q|"#{anEscSeq}".ord()|, __FILE__, __LINE__)
109
- expect(Character.new(anEscSeq).codepoint).to eq(expectation)
110
- end
111
- end
112
-
113
- it 'should known whether it is equal to another Object' do
114
- newOne = Character.new(?\u03a3)
115
-
116
- # Case 1: test equality with itself
117
- expect(newOne).to eq(newOne)
118
-
119
- # Case 2: test equality with another Character
120
- expect(newOne).to eq(Character.new(?\u03a3))
121
- expect(newOne).not_to eq(Character.new(?\u0333))
122
-
123
- # Case 3: test equality with an integer value
124
- # (equality based on codepoint value)
125
- expect(newOne).to eq(0x03a3)
126
- expect(newOne).not_to eq(0x0333)
127
-
128
- # Case 4: test equality with a single-character String
129
- expect(newOne).to eq(?\u03a3)
130
- expect(newOne).not_to eq(?\u0333)
131
-
132
- # Case 5: test fails with multiple character strings
133
- expect(newOne).not_to eq('03a3')
134
-
135
- # Case 6: equality testing with arbitray object
136
- expect(newOne).not_to eq(nil)
137
- expect(newOne).not_to eq(Object.new)
138
-
139
- # In case 6, equality is based on to_s method.
140
- simulator = double('fake')
141
- expect(simulator).to receive(:to_s).and_return(?\u03a3)
142
- expect(newOne).to eq(simulator)
143
-
144
- # Create a module that re-defines the existing to_s method
145
- module Tweak_to_s
146
- def to_s() # Overwrite the existing to_s method
147
- return ?\u03a3
148
- end
149
- end # module
150
- weird = Object.new
151
- weird.extend(Tweak_to_s)
152
- expect(newOne).to eq(weird)
153
- end
154
-
155
- it 'should know its readable description' do
156
- ch1 = Character.new('a')
157
- expect(ch1.explain).to eq("the character 'a'")
158
-
159
- ch2 = Character.new(?\u03a3)
160
- expect(ch2.explain).to eq("the character '\u03a3'")
161
- end
162
- end # context
163
- end # describe
164
- end # module
165
-
166
- # End of file
1
+ # File: character_spec.rb
2
+ require_relative '../spec_helper' # Use the RSpec test framework
3
+ require_relative '../../lib/regex/character'
4
+
5
+ module Regex # Open this namespace, to get rid of scope qualifiers
6
+ describe Character do
7
+ # This constant holds an arbitrary selection of characters
8
+ SampleChars = [?a, ?\0, ?\u0107].freeze
9
+
10
+ # This constant holds the codepoints of the character selection
11
+ SampleInts = [0x61, 0, 0x0107].freeze
12
+
13
+ # This constant holds an arbitrary selection of two characters (digrams)
14
+ # escape sequences
15
+ SampleDigrams = %w[\n \e \0 \6 \k].freeze
16
+
17
+ # This constant holds an arbitrary selection of escaped octal
18
+ # or hexadecimal literals
19
+ SampleNumEscs = %w[\0 \07 \x07 \xa \x0F \u03a3 \u{a}].freeze
20
+
21
+ before(:all) do
22
+ # Ensure that the set of codepoints is mapping the set of chars...
23
+ expect(SampleChars.map(&:ord)).to eq(SampleInts)
24
+ end
25
+
26
+ context 'Creation & initialization' do
27
+ it 'should be created with a with an integer value (codepoint) or...' do
28
+ SampleInts.each do |aCodepoint|
29
+ expect { Character.new(aCodepoint) }.not_to raise_error
30
+ end
31
+ end
32
+
33
+ it '...could be created with a single character String or...' do
34
+ SampleChars.each do |aChar|
35
+ expect { Character.new(aChar) }.not_to raise_error
36
+ end
37
+ end
38
+
39
+ it '...could be created with an escape sequence' do
40
+ # Case 1: escape sequence is a digram
41
+ SampleDigrams.each do |anEscapeSeq|
42
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
43
+ end
44
+
45
+ # Case 2: escape sequence is an escaped octal or hexadecimal literal
46
+ SampleNumEscs.each do |anEscapeSeq|
47
+ expect { Character.new(anEscapeSeq) }.not_to raise_error
48
+ end
49
+ end
50
+ end # context
51
+
52
+ context 'Provided services' do
53
+ it 'Should know its lexeme if created from a string' do
54
+ # Lexeme is defined when the character was initialised from a text
55
+ SampleChars.each do |aChar|
56
+ ch = Character.new(aChar)
57
+ expect(ch.lexeme).to eq(aChar)
58
+ end
59
+ end
60
+
61
+ it 'Should not know its lexeme representation from a codepoint' do
62
+ SampleInts.each do |aChar|
63
+ ch = Character.new(aChar)
64
+ expect(ch.lexeme).to be_nil
65
+ end
66
+ end
67
+
68
+ it 'should know its String representation' do
69
+ # Try for one character
70
+ newOne = Character.new(?\u03a3)
71
+ expect(newOne.char).to eq('Σ')
72
+ expect(newOne.to_str).to eq("\u03A3")
73
+
74
+ # Try with our chars sample
75
+ SampleChars.each do |aChar|
76
+ new_ch = Character.new(aChar).to_str
77
+ new_ch == aChar
78
+ end
79
+
80
+ # Try with our codepoint sample
81
+ mapped_chars = SampleInts.map do |aCodepoint|
82
+ Character.new(aCodepoint).char
83
+ end
84
+ expect(mapped_chars).to eq(SampleChars)
85
+
86
+ # Try with our escape sequence samples
87
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
88
+ expectation = String.class_eval(%Q|"#{anEscSeq}"|, __FILE__, __LINE__)
89
+ new_ch = Character.new(anEscSeq).to_str
90
+ new_ch == expectation
91
+ end
92
+ end
93
+
94
+ it 'should know its codepoint' do
95
+ # Try for one character
96
+ newOne = Character.new(?\u03a3)
97
+ expect(newOne.codepoint).to eq(0x03a3)
98
+
99
+ # Try with our chars sample
100
+ allCodepoints = SampleChars.map do |aChar|
101
+ Character.new(aChar).codepoint
102
+ end
103
+ expect(allCodepoints).to eq(SampleInts)
104
+
105
+ # Try with our codepoint sample
106
+ mapped_chars = SampleInts.each do |aCodepoint|
107
+ expect(Character.new(aCodepoint).codepoint).to eq(aCodepoint)
108
+ end
109
+
110
+ # Try with our escape sequence samples
111
+ (SampleDigrams + SampleNumEscs).each do |anEscSeq|
112
+ expectation = String.class_eval(%Q|"#{anEscSeq}".ord()|, __FILE__, __LINE__)
113
+ expect(Character.new(anEscSeq).codepoint).to eq(expectation)
114
+ end
115
+ end
116
+
117
+ it 'should known whether it is equal to another Object' do
118
+ newOne = Character.new(?\u03a3)
119
+
120
+ # Case 1: test equality with itself
121
+ expect(newOne).to eq(newOne)
122
+
123
+ # Case 2: test equality with another Character
124
+ expect(newOne).to eq(Character.new(?\u03a3))
125
+ expect(newOne).not_to eq(Character.new(?\u0333))
126
+
127
+ # Case 3: test equality with an integer value
128
+ # (equality based on codepoint value)
129
+ expect(newOne).to eq(0x03a3)
130
+ expect(newOne).not_to eq(0x0333)
131
+
132
+ # Case 4: test equality with a single-character String
133
+ expect(newOne).to eq(?\u03a3)
134
+ expect(newOne).not_to eq(?\u0333)
135
+
136
+ # Case 5: test fails with multiple character strings
137
+ expect(newOne).not_to eq('03a3')
138
+
139
+ # Case 6: equality testing with arbitray object
140
+ expect(newOne).not_to eq(nil)
141
+ expect(newOne).not_to eq(Object.new)
142
+
143
+ # In case 6, equality is based on to_s method.
144
+ simulator = double('fake')
145
+ expect(simulator).to receive(:to_s).and_return(?\u03a3)
146
+ expect(newOne).to eq(simulator)
147
+
148
+ # Create a module that re-defines the existing to_s method
149
+ module Tweak_to_s
150
+ def to_s() # Overwrite the existing to_s method
151
+ return ?\u03a3
152
+ end
153
+ end # module
154
+ weird = Object.new
155
+ weird.extend(Tweak_to_s)
156
+ expect(newOne).to eq(weird)
157
+ end
158
+
159
+ it 'should know its readable description' do
160
+ ch1 = Character.new('a')
161
+ expect(ch1.explain).to eq("the character 'a'")
162
+
163
+ ch2 = Character.new(?\u03a3)
164
+ expect(ch2.explain).to eq("the character '\u03a3'")
165
+ end
166
+ end # context
167
+ end # describe
168
+ end # module
169
+
170
+ # End of file
@@ -82,6 +82,19 @@ module SrlRuby
82
82
  ]
83
83
  match_expectations(subject, expectations)
84
84
  end
85
+
86
+ it "should recognize 'letter from ... to ... followed by comma'" do
87
+ input = 'letter a to f,'
88
+ subject.scanner.string = input
89
+ expectations = [
90
+ %w[LETTER letter],
91
+ %w[LETTER_LIT a],
92
+ %w[TO to],
93
+ %w[LETTER_LIT f],
94
+ %w[COMMA ,]
95
+ ]
96
+ match_expectations(subject, expectations)
97
+ end
85
98
  end # context
86
99
 
87
100
  context 'Quantifier tokenization:' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: srl_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dimitri Geshef
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-19 00:00:00.000000000 Z
11
+ date: 2018-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rley