cw 0.2.0 → 0.2.2

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.
@@ -4,11 +4,13 @@
4
4
 
5
5
  class Rss
6
6
 
7
+ include TextHelpers
8
+
7
9
  def sources
8
10
  {
9
- bbc: 'http://feeds.bbci.co.uk/news/rss.xml',
10
- reuters: 'http://feeds.reuters.com/Reuters/worldNews?format=xml',
11
- guardian: 'http://www.theguardian.com/world/rss',
11
+ bbc: 'http://feeds.bbci.co.uk/news/rss.xml',
12
+ reuters: 'http://feeds.reuters.com/Reuters/worldNews?format=xml',
13
+ guardian: 'http://www.theguardian.com/world/rss',
12
14
  quotation: 'http://feeds.feedburner.com/quotationspage/qotd'
13
15
  }
14
16
  end
@@ -49,18 +51,6 @@ class Rss
49
51
  @article_index || @article_index = 0
50
52
  end
51
53
 
52
- def cw_chars chr
53
- chr.tr('^a-z0-9\.\,+', '')
54
- end
55
-
56
- def exclude_non_cw_chars word
57
- temp = ''
58
- word.split.each do |chr|
59
- temp += chr if letter(chr)
60
- end
61
- temp
62
- end
63
-
64
54
  def next_article
65
55
  temp = @rss_articles[article_index]
66
56
  return unless temp
@@ -4,19 +4,21 @@
4
4
 
5
5
  class Str
6
6
 
7
+ include TextHelpers
8
+
7
9
  def initialize
8
10
  @seperator = ', '
9
11
  end
10
12
 
11
13
  def to_s
12
- delim = delim_std_str
14
+ delim = Params.delim_str
13
15
  [
14
- "#{Params.name}\n",
15
- "#{delim}",
16
- "#{wpm_str}",
17
- shuffle_str,
18
- word_count_str,
19
- word_size_str,
16
+ Params.name + "\n",
17
+ delim,
18
+ Params.wpm_str,
19
+ Params.shuffle_str,
20
+ Params.word_count_str,
21
+ Params.word_size_str,
20
22
  beginning_str,
21
23
  ending_str,
22
24
  delim
@@ -27,30 +29,6 @@ class Str
27
29
  ary.join(@seperator)
28
30
  end
29
31
 
30
- def delim_str size
31
- "#{'=' * size}\n"
32
- end
33
-
34
- def delim_std_str
35
- tempsize = Params.name.size
36
- delim_str tempsize
37
- end
38
-
39
- def shuffle_str
40
- shuffle = Params.shuffle
41
- shuffle ? "Shuffle: #{shuffle ? 'yes' : 'no'}\n" : nil
42
- end
43
-
44
- def word_count_str
45
- wc = Params.word_count
46
- wc ? "Word count: #{wc}\n" : nil
47
- end
48
-
49
- def word_size_str
50
- size = Params.size
51
- size ? "Word size: #{size}\n" : nil
52
- end
53
-
54
32
  def beginning_str
55
33
  beginning = Params.begin
56
34
  beginning ? "Beginning: #{stringify beginning}\n" : nil
@@ -61,8 +39,4 @@ class Str
61
39
  ending ? "Ending: #{stringify ending}\n" : nil
62
40
  end
63
41
 
64
- def wpm_str
65
- "WPM: #{Params.wpm}\n"
66
- end
67
-
68
42
  end
@@ -51,22 +51,47 @@ module Tester
51
51
  end
52
52
  end
53
53
 
54
- def print_words words
55
- # puts "self.class = #{self.class}"
56
- timing.init_char_timer
57
- (words.to_s + space).each_char do |letr|
58
- process_letter letr
59
- stream.add_char(letr) if(self.class == TestLetters)
60
- loop do
54
+ def do_events
55
+ sleep 0.005
56
+ end
57
+
58
+ def process_letters letr
59
+ loop do
60
+ do_events
61
+ if self.class == Book
62
+ process_space_maybe(letr) unless @book_details.args[:output] == :letter
63
+ process_word_maybe
64
+ break if change_repeat_or_quit?
65
+ break if timing.char_delay_timeout?
66
+ else
61
67
  process_space_maybe(letr) if(self.class == TestWords)
62
68
  process_word_maybe
63
69
  break if timing.char_delay_timeout?
64
70
  end
71
+ end
72
+ end
73
+
74
+ def process_words words
75
+ book_class = (self.class == Book)
76
+ (words.to_s + space).each_char do |letr|
77
+ process_letter letr
78
+ if book_class
79
+ stream.add_char(letr) if @book_details.args[:output] == :letter
80
+ else
81
+ stream.add_char(letr) if(self.class == TestLetters)
82
+ end
83
+ process_letters letr
65
84
  print.prn letr if print_letters?
66
- break if quit?
85
+ break if(book_class && change_repeat_or_quit?)
86
+ break if ((! book_class) && quit?)
67
87
  end
68
88
  end
69
89
 
90
+ def print_words words
91
+ timing.init_char_timer
92
+ process_words words
93
+ end
94
+
70
95
  def process_word_maybe
71
96
  print_marked_maybe
72
97
  process_input_word_maybe
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+
3
+ module TextHelpers
4
+
5
+ def letter_group
6
+ (97..122).to_a
7
+ end
8
+
9
+ def number_group
10
+ (48..57).to_a
11
+ end
12
+
13
+ def cw_chars chr
14
+ chr.tr('^a-z0-9\.\,+', '')
15
+ end
16
+
17
+ def exclude_non_cw_chars word
18
+ temp = ''
19
+ word.split.each do |chr|
20
+ temp += chr if letter(chr)
21
+ end
22
+ temp
23
+ end
24
+
25
+ end
@@ -4,12 +4,7 @@ require 'wavefile'
4
4
 
5
5
  class ToneGenerator
6
6
 
7
- HERE = File.dirname(__FILE__) + '/../../'
8
- DOT_FILENAME = HERE + "audio/dot.wav"
9
- DASH_FILENAME = HERE + "audio/dash.wav"
10
- SPACE_FILENAME = HERE + "audio/space.wav"
11
- E_SPACE_FILENAME = HERE + "audio/e_space.wav"
12
- TWO_PI = 2 * Math::PI
7
+ include ToneHelpers
13
8
 
14
9
  def initialize
15
10
  @max_amplitude = 0.5
@@ -24,10 +19,6 @@ class ToneGenerator
24
19
  @encoding ||= CwEncoding.new
25
20
  end
26
21
 
27
- def convert_words wrds
28
- wrds.to_array.collect{ |wrd| wrd.delete("\n")}
29
- end
30
-
31
22
  def progress
32
23
  @progress ||= Progress.new('Compiling')
33
24
  end
@@ -40,10 +31,6 @@ class ToneGenerator
40
31
  write_word_parts
41
32
  end
42
33
 
43
- def play_filename
44
- HERE + "audio/#{Params.audio_filename}"
45
- end
46
-
47
34
  def play
48
35
  cmd = play_command + ' ' + play_filename
49
36
  @pid = ! @dry_run ? Process.spawn(cmd) : cmd
@@ -63,10 +50,6 @@ class ToneGenerator
63
50
  :spb => (@sample_rate * 1.2 / @effective_wpm).to_i }}
64
51
  end
65
52
 
66
- def generate_space number_of_samples
67
- [].fill(0.0, 0, number_of_samples)
68
- end
69
-
70
53
  def filter_maybe(size, count)
71
54
  ramp = 0.05
72
55
  ramp_point = @max_amplitude / ramp
@@ -110,10 +93,6 @@ class ToneGenerator
110
93
  end
111
94
  end
112
95
 
113
- def space_sample? ele
114
- ele == :space || ele == :e_space
115
- end
116
-
117
96
  def generate_samples ele
118
97
  return generate_space(data[ele][:spb]) if space_sample? ele
119
98
  generate_tone(data[ele][:spb]) unless space_sample? ele
@@ -132,10 +111,6 @@ class ToneGenerator
132
111
  (@effective_wpm == @wpm) ? space : e_space
133
112
  end
134
113
 
135
- def last_element? idx, chr
136
- idx == chr.size - 1
137
- end
138
-
139
114
  def push_enc chr
140
115
  arry = []
141
116
  chr.each_with_index do |c,idx|
@@ -0,0 +1,33 @@
1
+ # Module ToneHelpers provides helper methods for ToneGenerator
2
+
3
+ module ToneHelpers
4
+
5
+ TWO_PI = 2 * Math::PI
6
+ HERE = File.dirname(__FILE__) + '/../../'
7
+ DOT_FILENAME = HERE + "audio/dot.wav"
8
+ DASH_FILENAME = HERE + "audio/dash.wav"
9
+ SPACE_FILENAME = HERE + "audio/space.wav"
10
+ E_SPACE_FILENAME = HERE + "audio/e_space.wav"
11
+
12
+ # :reek: exclude from UtilityFunction
13
+ def play_filename
14
+ HERE + "audio/#{Params.audio_filename}"
15
+ end
16
+
17
+ def convert_words wrds
18
+ wrds.to_array.collect{ |wrd| wrd.delete("\n")}
19
+ end
20
+
21
+ def generate_space number_of_samples
22
+ [].fill(0.0, 0, number_of_samples)
23
+ end
24
+
25
+ def space_sample? ele
26
+ ele == :space || ele == :e_space
27
+ end
28
+
29
+ def last_element? idx, chr
30
+ idx == chr.size - 1
31
+ end
32
+
33
+ end
@@ -1,55 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
- class CurrentWord
4
-
5
- def initialize
6
- @current_word = ''
7
- end
8
-
9
- def current_word
10
- @current_word ||= String.new
11
- end
12
-
13
- def push_letter letr
14
- @current_word += letr
15
- end
16
-
17
- def to_s
18
- @current_word
19
- end
20
-
21
- def clear
22
- @current_word.clear
23
- @current_word = ''
24
- end
25
-
26
- def strip
27
- @current_word.strip!
28
- end
29
-
30
- def process_letter letr
31
- letr.downcase!
32
- push_letter letr
33
- end
34
-
35
- def cw_chars chr
36
- chr.tr('^a-z0-9\.\,+', '')
37
- end
38
-
39
- def exclude_non_cw_chars word
40
- temp = ''
41
- word.split.each do |chr|
42
- temp += chr if letter(chr)
43
- end
44
- temp
45
- end
46
-
47
- end
48
-
49
3
  #class Words deals with words
50
4
 
51
5
  class Words
52
6
 
7
+ include TextHelpers
8
+
53
9
  def load(filename)
54
10
  File.open(filename, 'r') do |file|
55
11
  @words = file.read.split
@@ -144,14 +100,6 @@ class Words
144
100
  @words.reverse!
145
101
  end
146
102
 
147
- def letter_group
148
- (97..122).to_a
149
- end
150
-
151
- def number_group
152
- (48..57).to_a
153
- end
154
-
155
103
  def letters_numbers
156
104
  letter_group.push( * number_group)
157
105
  end
@@ -1,4 +1,5 @@
1
1
  require 'simplecov'
2
+ $VERBOSE = nil #FIXME
2
3
  SimpleCov.start
3
4
 
4
5
  require 'minitest/autorun'
@@ -10,10 +11,8 @@ class TestCW < MiniTest::Test
10
11
  ROOT = File.expand_path File.dirname(__FILE__) + '/../'
11
12
 
12
13
  def setup
13
- @cw = CW.new do
14
- words = 'one two three'
15
- pause
16
- end
14
+ @cw = CW.new
15
+ @cw.pause
17
16
  end
18
17
 
19
18
  def teardown
@@ -287,7 +286,9 @@ Ending: x
287
286
 
288
287
  def test_random_letters_returns_random_letters
289
288
  @cw.random_letters
290
- @cw.words.each { |w| assert_match /^(?=.*\D)[-\w]+$/, w }
289
+ @cw.words.each { |w|
290
+ assert_match(/^(?=.*\D)[-\w]+$/, w)
291
+ }
291
292
  end
292
293
 
293
294
  def test_random_numbers_can_take_size_and_count_option
@@ -298,24 +299,30 @@ Ending: x
298
299
 
299
300
  def test_random_numbers_returns_random_numbers
300
301
  @cw.random_numbers
301
- @cw.words.each { |w| assert_match /\A[-+]?\d+\z/ , w }
302
+ @cw.words.each { |w|
303
+ assert_match(/\A[-+]?\d+\z/ , w)
304
+ }
302
305
  end
303
306
 
304
307
  def test_random_letters_numbers_can_take_size_and_count_option
305
308
  @cw.random_letters_numbers(count: 3, size: 4)
306
309
  assert_equal 3, @cw.words.size
307
- @cw.words.each { |w| assert_equal 4, w.length}
310
+ @cw.words.each { |w|
311
+ assert_equal 4, w.length
312
+ }
308
313
  end
309
314
 
310
315
  def test_random_letters_numbers_includes_letter
311
316
  @cw.random_letters_numbers
312
- @cw.words.each { |w| assert_match /[a-zA-Z]+/, w}
317
+ @cw.words.each { |w|
318
+ assert_match( /[a-zA-Z]+/, w)
319
+ }
313
320
  end
314
321
 
315
322
  def test_random_letters_numbers_includes_number
316
323
  @cw.random_letters_numbers
317
324
  @cw.words.each do |w|
318
- assert_match /[0-9]+/, w
325
+ assert_match(/[0-9]+/, w)
319
326
  end
320
327
  end
321
328
 
@@ -341,7 +348,7 @@ Ending: x
341
348
  assert_equal 'tsal neht tsrif', @cw.words
342
349
  end
343
350
 
344
- #todo
351
+ #FIXME
345
352
  # def test_convert_generates_correct_command_for_default
346
353
  # @cw.dry_run = true
347
354
  # @cw.words = "some words"
@@ -388,7 +395,7 @@ Ending: x
388
395
  assert @cw.method(:words_no_shorter_than), @cw.method(:no_shorter_than)
389
396
  assert @cw.method(:random_alphanumeric), @cw.method(:random_letters_numbers)
390
397
  assert @cw.method(:comment), @cw.method(:name)
391
- assert @cw.method(:no_run), @cw.method(:pause)
398
+ assert @cw.method(:no_run), @cw.method(:pause)
392
399
  end
393
400
 
394
401
  def test_set_wpm_param
@@ -3,7 +3,8 @@ SimpleCov.start
3
3
 
4
4
  require 'minitest/autorun'
5
5
  require 'minitest/pride'
6
- require_relative '../lib/cw/stream'
6
+ require_relative '../lib/cw/element'
7
+ require_relative '../lib/cw/cw_stream'
7
8
 
8
9
  # class TestStreamMatching < MiniTest::Test
9
10
  # def setup
@@ -145,35 +146,39 @@ class TestCwStream < MiniTest::Test
145
146
  @stream = CwStream.new
146
147
  end
147
148
 
149
+ def teardown
150
+ @stream = nil
151
+ end
152
+
148
153
  def test_assert
149
154
  assert true
150
155
  end
151
156
 
152
- def test_add_adds_to_the_stream
153
- @stream.add 'a'
157
+ def test_add_word_adds_to_the_stream
158
+ @stream.add_word 'a'
154
159
  assert_equal({0 => 'a'}, @stream.stream)
155
- @stream.add 'tree'
160
+ @stream.add_word 'tree'
156
161
  assert_equal({0 => 'a', 1 => 'tree'}, @stream.stream)
157
162
  end
158
163
 
159
164
  def test_count
160
- @stream.add 'a'
165
+ @stream.add_word 'a'
161
166
  assert_equal 1, @stream.count
162
- @stream.add 'tree'
167
+ @stream.add_word 'tree'
163
168
  assert_equal 2, @stream.count
164
169
  assert_equal({0 => 'a', 1 => 'tree'}, @stream.stream)
165
170
  end
166
171
 
167
172
  def test_stream_element_can_be_marked_a_success
168
- @stream.add 'a'
173
+ @stream.add_word 'a'
169
174
  @stream.mark_success(0)
170
175
  assert_equal({0 => true}, @stream.instance_variable_get(:@success))
171
176
  end
172
177
 
173
178
  def test_stream_element_can_be_marked_a_fail
174
- @stream.add 'a'
179
+ @stream.add_word 'a'
175
180
  @stream.mark_success(0)
176
- @stream.add 'b'
181
+ @stream.add_word 'b'
177
182
  @stream.mark_fail(1)
178
183
  assert_equal({0 => true, 1 => false}, @stream.instance_variable_get(:@success))
179
184
  end
@@ -184,24 +189,24 @@ class TestCwStream < MiniTest::Test
184
189
  end
185
190
 
186
191
  def test_mark_inactive_region_fail_fails_unmarked_inactive_elements
187
- @stream.add 'a'
188
- @stream.add 'b'
189
- @stream.add 'c'
190
- @stream.add 'd'
192
+ @stream.add_word 'a'
193
+ @stream.add_word 'b'
194
+ @stream.add_word 'c'
195
+ @stream.add_word 'd'
191
196
  @stream.active_region = 2
192
197
  @stream.fail_unmarked_inactive_elements
193
198
  assert_equal({0 => false, 1 => false, 2 => nil, 3 => nil}, @stream.instance_variable_get(:@success))
194
199
  end
195
200
 
196
201
  def test_mark_inactive_region_fail_doesnt_fail_successes
197
- @stream.add 'a'
198
- @stream.add 'b'
199
- @stream.add 'c'
200
- @stream.add 'd'
202
+ @stream.add_word 'a'
203
+ @stream.add_word 'b'
204
+ @stream.add_word 'c'
205
+ @stream.add_word 'd'
201
206
  @stream.instance_variable_set(:@success, {0 => true, 1 => false})
202
207
  @stream.active_region = 2
203
208
  @stream.fail_unmarked_inactive_elements
204
- assert_equal({0 => true, 1 => false}, @stream.instance_variable_get(:@success))
209
+ assert_equal({0 => true, 1 => false}, @stream.instance_variable_get(:@success))
205
210
  end
206
211
 
207
212
  def test_mark_inactive_region_fail_doesnt_fail_when_no_stream
@@ -210,147 +215,148 @@ class TestCwStream < MiniTest::Test
210
215
  end
211
216
 
212
217
  def test_first_returns_first_element_in_stream
213
- @stream.add 'a'
214
- @stream.add 'b'
215
- @stream.add 'c'
216
- @stream.add 'd'
218
+ @stream.add_word 'a'
219
+ @stream.add_word 'b'
220
+ @stream.add_word 'c'
221
+ @stream.add_word 'd'
217
222
  assert_equal 'a', @stream.first
218
223
  end
219
224
 
220
225
  def test_pop_returns_first_element_in_stream_and_removes_element
221
- @stream.add 'a'
222
- @stream.add 'b'
223
- @stream.add 'c'
224
- @stream.add 'd'
225
- assert_equal({'a' => false}, @stream.pop)
226
- assert_equal({1 => 'b', 2 => 'c', 3 => 'd'}, @stream.stream)
226
+ @stream.add_word 'a'
227
+ @stream.add_word 'b'
228
+ @stream.add_word 'c'
229
+ @stream.add_word 'd'
230
+ assert_equal({:value => 'a', :success => false}, @stream.pop)
231
+ refute(@stream.pop[:success])
232
+ assert_equal({2 => 'c', 3 => 'd'}, @stream.stream)
227
233
 
228
234
  @stream.empty
229
- @stream.add 'a'
230
- assert_equal({'a' => false}, @stream.pop)
231
- @stream.add 'b'
232
- assert_equal({'b' => false}, @stream.pop)
233
- @stream.add 'c'
234
- assert_equal({'c' => false}, @stream.pop)
235
- @stream.add 'd'
236
- assert_equal({'d' => false}, @stream.pop)
235
+ @stream.add_word 'a'
236
+ refute(@stream.pop[:success])
237
+ @stream.add_word 'b'
238
+ refute(@stream.pop[:success])
239
+ @stream.add_word 'c'
240
+ refute(@stream.pop[:success])
241
+ @stream.add_word 'd'
242
+ refute(@stream.pop[:success])
237
243
  assert_nil @stream.pop
238
244
  assert_equal({}, @stream.stream)
239
245
  end
240
246
 
241
247
  def test_match_last_active_element_marks_correct_element
242
- @stream.add 'a'
243
- @stream.add 'b'
244
- @stream.add 'c'
245
- @stream.add 'd'
248
+ @stream.add_word 'a'
249
+ @stream.add_word 'b'
250
+ @stream.add_word 'c'
251
+ @stream.add_word 'd'
246
252
  @stream.match_last_active_element('c')
247
253
  assert_equal({0 => false, 1 => false, 2 => true, 3 => nil}, @stream.instance_variable_get(:@success))
248
- end
254
+ end
249
255
 
250
256
  def test_match_last_active_element_doesnt_unmark_correct_element
251
257
  @stream.active_region = 2
252
- @stream.add 'a'
253
- @stream.add 'b'
254
- @stream.add 'c'
255
- @stream.add 'd'
258
+ @stream.add_word 'a'
259
+ @stream.add_word 'b'
260
+ @stream.add_word 'c'
261
+ @stream.add_word 'd'
256
262
  @stream.match_last_active_element('c')
257
263
  @stream.match_last_active_element('d')
258
- assert_equal({0 => nil, 1 => nil, 2 => true, 3 => true}, @stream.instance_variable_get(:@success))
259
- end
264
+ assert_equal({0 => nil, 1 => false, 2 => true, 3 => true}, @stream.instance_variable_get(:@success))
265
+ end
260
266
 
261
267
  def test_match_last_active_element_doesnt_unmark_failed_element
262
- @stream.add 'a'
263
- @stream.add 'b'
264
- @stream.add 'c'
265
- @stream.add 'd'
268
+ @stream.add_word 'a'
269
+ @stream.add_word 'b'
270
+ @stream.add_word 'c'
271
+ @stream.add_word 'd'
266
272
  @stream.match_last_active_element('d')
267
273
  @stream.match_last_active_element('c')
268
- assert_equal({0 => false, 1 => false, 2 => false, 3 => true}, @stream.instance_variable_get(:@success))
274
+ assert_equal({0 => false, 1 => false, 2 => true, 3 => true}, @stream.instance_variable_get(:@success))
269
275
  end
270
276
 
271
- # def test_pop_marked_returns_nil_for_empty_stream
272
- # assert_equal(nil, @stream.pop_marked)
273
- # assert_equal(nil, @stream.pop_marked)
274
- # end
275
- #
276
- # def test_pop_marked_returns_up_to_marked_first_element
277
- # @stream.add 'a'
278
- # @stream.add 'b'
279
- # @stream.add 'c'
280
- # @stream.add 'd'
281
- # @stream.match_last_active_element('a')
282
- # assert_equal({0 => {'a' => true}}, @stream.pop_marked)
283
- # assert_equal(nil, @stream.pop_marked)
284
- # end
285
- #
286
- # def test_pop_marked_returns_up_to_marked_second_element
287
- # @stream.add 'a'
288
- # @stream.add 'b'
289
- # @stream.add 'c'
290
- # @stream.add 'd'
291
- # @stream.match_last_active_element('b')
292
- # assert_equal({0 => {'a' => false}, 1 => {'b' => true}}, @stream.pop_marked)
293
- # assert_equal(nil, @stream.pop_marked)
294
- # end
295
- #
296
- # def test_pop_marked_returns_up_to_marked_first_and_third_element
297
- # @stream.add 'a'
298
- # @stream.add 'b'
299
- # @stream.add 'c'
300
- # @stream.add 'd'
301
- # @stream.match_last_active_element('a')
302
- # @stream.match_last_active_element('c')
303
- # assert_equal({0 => {'a' => true}, 1 => {'b' => false}, 2 => {'c' => true}}, @stream.pop_marked)
304
- # assert_equal(nil, @stream.pop_marked)
305
- # @stream.match_last_active_element('d')
306
- # assert_equal({3 => {'d' => true}}, @stream.pop_marked)
307
- # end
308
- #
309
- # def test_pop_marked_returns_inactive_unmarked_elements
310
- # @stream.add 'a'
311
- # @stream.add 'b'
312
- # @stream.add 'c'
313
- # @stream.add 'd'
314
- # @stream.active_region = 2
315
- # assert_equal({0 => {'a' => false}, 1 => {'b' => false}}, @stream.pop_marked)
316
- # assert_equal(nil, @stream.pop_marked)
317
- # @stream.match_last_active_element('d')
318
- # assert_equal({2 => {'c' => false}, 3 => {'d' => true}}, @stream.pop_marked)
319
- # end
320
- #
321
- # def test_pop_marked_returns_mix_of_active_and_inactive
322
- # @stream.active_region = 2
323
- # @stream.add 'a'
324
- # @stream.add 'b'
325
- # @stream.add 'c'
326
- # @stream.add 'd'
327
- # @stream.match_last_active_element('d')
328
- # assert_equal({0 => {'a' => false}, 1 => {'b' => false}, 2 => {'c' => false}, 3 => {'d' => true}}, @stream.pop_marked)
329
- # assert_equal(nil, @stream.pop_marked)
330
- # end
277
+ # def test_pop_marked_returns_nil_for_empty_stream
278
+ # assert_equal(nil, @stream.pop_marked)
279
+ # assert_equal(nil, @stream.pop_marked)
280
+ # end
281
+ #
282
+ # def test_pop_marked_returns_up_to_marked_first_element
283
+ # @stream.add_word 'a'
284
+ # @stream.add_word 'b'
285
+ # @stream.add_word 'c'
286
+ # @stream.add_word 'd'
287
+ # @stream.match_last_active_element('a')
288
+ # assert_equal({0 => {'a' => true}}, @stream.pop_marked)
289
+ # assert_equal(nil, @stream.pop_marked)
290
+ # end
291
+ #
292
+ # def test_pop_marked_returns_up_to_marked_second_element
293
+ # @stream.add_word 'a'
294
+ # @stream.add_word 'b'
295
+ # @stream.add_word 'c'
296
+ # @stream.add_word 'd'
297
+ # @stream.match_last_active_element('b')
298
+ # assert_equal({0 => {'a' => false}, 1 => {'b' => true}}, @stream.pop_marked)
299
+ # assert_equal(nil, @stream.pop_marked)
300
+ # end
301
+ #
302
+ # def test_pop_marked_returns_up_to_marked_first_and_third_element
303
+ # @stream.add_word 'a'
304
+ # @stream.add_word 'b'
305
+ # @stream.add_word 'c'
306
+ # @stream.add_word 'd'
307
+ # @stream.match_last_active_element('a')
308
+ # @stream.match_last_active_element('c')
309
+ # assert_equal({0 => {'a' => true}, 1 => {'b' => false}, 2 => {'c' => true}}, @stream.pop_marked)
310
+ # assert_equal(nil, @stream.pop_marked)
311
+ # @stream.match_last_active_element('d')
312
+ # assert_equal({3 => {'d' => true}}, @stream.pop_marked)
313
+ # end
314
+ #
315
+ # def test_pop_marked_returns_inactive_unmarked_elements
316
+ # @stream.add_word 'a'
317
+ # @stream.add_word 'b'
318
+ # @stream.add_word 'c'
319
+ # @stream.add_word 'd'
320
+ # @stream.active_region = 2
321
+ # assert_equal({0 => {'a' => false}, 1 => {'b' => false}}, @stream.pop_marked)
322
+ # assert_equal(nil, @stream.pop_marked)
323
+ # @stream.match_last_active_element('d')
324
+ # assert_equal({2 => {'c' => false}, 3 => {'d' => true}}, @stream.pop_marked)
325
+ # end
326
+ #
327
+ # def test_pop_marked_returns_mix_of_active_and_inactive
328
+ # @stream.active_region = 2
329
+ # @stream.add_word 'a'
330
+ # @stream.add_word 'b'
331
+ # @stream.add_word 'c'
332
+ # @stream.add_word 'd'
333
+ # @stream.match_last_active_element('d')
334
+ # assert_equal({0 => {'a' => false}, 1 => {'b' => false}, 2 => {'c' => false}, 3 => {'d' => true}}, @stream.pop_marked)
335
+ # assert_equal(nil, @stream.pop_marked)
336
+ # end
331
337
 
332
338
  def test_pop_next_marked_returns_correct_elements_where_last_only_matched
333
- @stream.add 'a'
334
- @stream.add 'b'
335
- @stream.add 'c'
336
- @stream.add 'd'
339
+ @stream.add_word 'a'
340
+ @stream.add_word 'b'
341
+ @stream.add_word 'c'
342
+ @stream.add_word 'd'
337
343
  @stream.match_last_active_element('d')
338
- assert_equal({'a' => false}, @stream.pop_next_marked)
339
- assert_equal({'b' => false}, @stream.pop_next_marked)
340
- assert_equal({'c' => false}, @stream.pop_next_marked)
341
- assert_equal({'d' => true}, @stream.pop_next_marked)
344
+ refute(@stream.pop_next_marked[:success])
345
+ refute(@stream.pop_next_marked[:success])
346
+ refute(@stream.pop_next_marked[:success])
347
+ assert(@stream.pop_next_marked[:success])
342
348
  assert_equal(nil, @stream.pop_next_marked)
343
349
  end
344
350
 
345
351
  def test_pop_next_marked_returns_correct_elements_where_penultimate_element_matched
346
- @stream.add 'a'
347
- @stream.add 'b'
348
- @stream.add 'c'
349
- @stream.add 'd'
352
+ @stream.add_word 'a'
353
+ @stream.add_word 'b'
354
+ @stream.add_word 'c'
355
+ @stream.add_word 'd'
350
356
  @stream.match_last_active_element('c')
351
- assert_equal({'a' => false}, @stream.pop_next_marked)
352
- assert_equal({'b' => false}, @stream.pop_next_marked)
353
- assert_equal({'c' => true}, @stream.pop_next_marked)
357
+ assert_equal({:value => 'a', :success => false}, @stream.pop_next_marked)
358
+ assert_equal({:value => 'b', :success => false}, @stream.pop_next_marked)
359
+ assert_equal({:value => 'c', :success => true}, @stream.pop_next_marked)
354
360
  assert_equal(nil, @stream.pop_next_marked)
355
361
  assert_equal(nil, @stream.pop_next_marked)
356
362
  end
@@ -358,43 +364,43 @@ class TestCwStream < MiniTest::Test
358
364
  def test_pop_next_marked_considers_active_region
359
365
 
360
366
  @stream.active_region = 2
361
- @stream.add 'a'
362
- @stream.add 'b'
363
- @stream.add 'c'
364
- @stream.add 'd'
365
- assert_equal({'a' => false}, @stream.pop_next_marked)
366
- assert_equal({'b' => false}, @stream.pop_next_marked)
367
+ @stream.add_word 'a'
368
+ @stream.add_word 'b'
369
+ @stream.add_word 'c'
370
+ @stream.add_word 'd'
371
+ assert_equal({:value => 'a', :success => false}, @stream.pop_next_marked)
372
+ assert_equal({:value => 'b', :success => false}, @stream.pop_next_marked)
367
373
  assert_equal(nil, @stream.pop_next_marked)
368
374
  assert_equal(nil, @stream.pop_next_marked)
369
375
 
370
376
  @stream.empty
371
377
  @stream.active_region = 1
372
- @stream.add 'a'
373
- @stream.add 'b'
374
- @stream.add 'c'
375
- @stream.add 'd'
376
- assert_equal({'a' => false}, @stream.pop_next_marked)
377
- assert_equal({'b' => false}, @stream.pop_next_marked)
378
- assert_equal({'c' => false}, @stream.pop_next_marked)
378
+ @stream.add_word 'a'
379
+ @stream.add_word 'b'
380
+ @stream.add_word 'c'
381
+ @stream.add_word 'd'
382
+ assert_equal({:value => 'a', :success => false}, @stream.pop_next_marked)
383
+ assert_equal({:value => 'b', :success => false}, @stream.pop_next_marked)
384
+ assert_equal({:value => 'c', :success => false}, @stream.pop_next_marked)
379
385
  assert_equal(nil, @stream.pop_next_marked)
380
386
 
381
387
 
382
388
  @stream.empty
383
389
  @stream.active_region = 2
384
- @stream.add 'a'
385
- @stream.add 'b'
386
- @stream.add 'c'
387
- @stream.add 'd'
390
+ @stream.add_word 'a'
391
+ @stream.add_word 'b'
392
+ @stream.add_word 'c'
393
+ @stream.add_word 'd'
388
394
  @stream.match_last_active_element('c')
389
- assert_equal({'a' => false}, @stream.pop_next_marked)
390
- assert_equal({'b' => false}, @stream.pop_next_marked)
391
- assert_equal({'c' => true}, @stream.pop_next_marked)
395
+ assert_equal({:value => 'a', :success => false}, @stream.pop_next_marked)
396
+ assert_equal({:value => 'b', :success => false}, @stream.pop_next_marked)
397
+ assert_equal({:value => 'c', :success => true}, @stream.pop_next_marked)
392
398
  assert_equal(nil, @stream.pop_next_marked)
393
- @stream.add 'e'
394
- @stream.add 'f'
399
+ @stream.add_word 'e'
400
+ @stream.add_word 'f'
395
401
  @stream.match_last_active_element('e')
396
- assert_equal({'d' => false}, @stream.pop_next_marked)
397
- assert_equal({'e' => true}, @stream.pop_next_marked)
402
+ assert_equal({:value => 'd', :success => false}, @stream.pop_next_marked)
403
+ assert_equal({:value => 'e', :success => true}, @stream.pop_next_marked)
398
404
  assert_equal(nil, @stream.pop_next_marked)
399
405
  assert_equal({5 => 'f'}, @stream.stream)
400
406
  end