lazylist 0.2.1 → 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.
Files changed (6) hide show
  1. data/CHANGES +2 -0
  2. data/TODO +0 -34
  3. data/VERSION +1 -1
  4. data/lib/lazylist.rb +18 -0
  5. data/tests/test.rb +41 -16
  6. metadata +36 -39
data/CHANGES CHANGED
@@ -1,3 +1,5 @@
1
+ 2005-12-23 * 0.2.2 * Added append and + (the binary append case) to append lazy
2
+ lists to each other.
1
3
  2005-12-05 * 0.2.1 * Fixed a documentation bug, reported by Gary Wright
2
4
  <at2002@mac.com>.
3
5
  * enable/disable index reference cache added.
data/TODO CHANGED
@@ -1,36 +1,2 @@
1
1
  * adding better support for finite lazy lists
2
2
  * make lists even
3
- * this stuff
4
- # XXX
5
- def append(*elements)
6
- return rest if empty?
7
- s = self
8
- loop do
9
- if s.tail.empty?
10
- break s
11
- else
12
- s = s.tail
13
- end
14
- end
15
- s.tail = rest
16
- self
17
- end
18
- alias << append
19
-
20
- # XXX self should be finite
21
- def +(other)
22
- other.is_a? self.class or
23
- raise TypeError, "other has to be a #{self.class}"
24
- copy = LazyList[to_a]
25
- s = copy
26
- loop do
27
- if s.tail.empty?
28
- break s
29
- else
30
- s = s.tail
31
- end
32
- end
33
- s.tail = LazyList[other.to_a]
34
- copy
35
- end
36
-
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.1
1
+ 0.2.2
data/lib/lazylist.rb CHANGED
@@ -501,6 +501,24 @@ class LazyList
501
501
  end
502
502
  end
503
503
 
504
+ # Append this lazy list to the _*other_ lists, creating a new lists that
505
+ # consists of the elements of this list and the elements of the lists other1,
506
+ # other2, ... If any of the lists is infinite, the elements of the following
507
+ # lists will never occur in the result list.
508
+ def append(*other)
509
+ if empty?
510
+ if other.empty?
511
+ Empty
512
+ else
513
+ other.first.append(*other[1..-1])
514
+ end
515
+ else
516
+ list(head) { tail.append(*other) }
517
+ end
518
+ end
519
+
520
+ alias + append
521
+
504
522
  # Takes the next n elements and returns them as an array.
505
523
  def take(n = 1)
506
524
  result = []
data/tests/test.rb CHANGED
@@ -17,6 +17,8 @@ class MyEnum
17
17
  end
18
18
 
19
19
  class TC_LazyList < Test::Unit::TestCase
20
+ Empty = LazyList::Empty
21
+
20
22
  def setup
21
23
  @strings = LazyList.tabulate("a")
22
24
  @natural = LazyList.tabulate(1)
@@ -37,7 +39,7 @@ class TC_LazyList < Test::Unit::TestCase
37
39
  end
38
40
 
39
41
  def test_constructor
40
- ll1 = LazyList.new(:foo, LazyList::Empty)
42
+ ll1 = LazyList.new(:foo, Empty)
41
43
  assert(!ll1.empty?)
42
44
  ll2 = LazyList.new(:foo) { Empty }
43
45
  assert(!ll2.empty?)
@@ -114,9 +116,9 @@ class TC_LazyList < Test::Unit::TestCase
114
116
  end
115
117
 
116
118
  def test_index
117
- assert_equal nil, LazyList::Empty[-1]
118
- assert_equal nil, LazyList::Empty[0]
119
- assert_equal nil, LazyList::Empty[1]
119
+ assert_equal nil, Empty[-1]
120
+ assert_equal nil, Empty[0]
121
+ assert_equal nil, Empty[1]
120
122
  assert @natural.cached?
121
123
  assert_equal nil, @natural[-1]
122
124
  assert_equal nil, @natural[-1]
@@ -138,10 +140,10 @@ class TC_LazyList < Test::Unit::TestCase
138
140
  end
139
141
 
140
142
  def test_index_without_cache
141
- LazyList::Empty.cached = false
142
- assert_equal nil, LazyList::Empty[-1]
143
- assert_equal nil, LazyList::Empty[0]
144
- assert_equal nil, LazyList::Empty[1]
143
+ Empty.cached = false
144
+ assert_equal nil, Empty[-1]
145
+ assert_equal nil, Empty[0]
146
+ assert_equal nil, Empty[1]
145
147
  @natural.cached = false
146
148
  assert !@natural.cached?
147
149
  assert_equal nil, @natural[-1]
@@ -222,10 +224,10 @@ class TC_LazyList < Test::Unit::TestCase
222
224
  end
223
225
 
224
226
  def test_construct_ref
225
- assert_equal LazyList::Empty, LazyList[0, -1]
227
+ assert_equal Empty, LazyList[0, -1]
226
228
  assert_equal [0], LazyList[0, 1].to_a
227
229
  assert_equal (0..9).to_a, LazyList[0, 10].to_a
228
- assert_equal LazyList::Empty, LazyList[0..-1]
230
+ assert_equal Empty, LazyList[0..-1]
229
231
  assert_equal [0], LazyList[0..0].to_a
230
232
  assert_equal (0..9).to_a, LazyList[0..9].to_a
231
233
  end
@@ -246,7 +248,7 @@ class TC_LazyList < Test::Unit::TestCase
246
248
 
247
249
  def test_inspect
248
250
  l = LazyList[1..11]
249
- assert_equal "[]", LazyList::Empty.inspect
251
+ assert_equal "[]", Empty.inspect
250
252
  assert_equal "[1,... ]", l.inspect
251
253
  l[1]
252
254
  assert_equal "[1, 2,... ]", l.inspect
@@ -273,11 +275,11 @@ class TC_LazyList < Test::Unit::TestCase
273
275
  end
274
276
 
275
277
  def test_list
276
- assert_equal LazyList::Empty, list
278
+ assert_equal Empty, list
277
279
  assert_equal [], list.to_a
278
- assert_equal LazyList.new(1) { LazyList::Empty }, list(1)
280
+ assert_equal LazyList.new(1) { Empty }, list(1)
279
281
  assert_equal [1], list(1).to_a
280
- assert_equal LazyList::Empty, list
282
+ assert_equal Empty, list
281
283
  o = odd
282
284
  assert_equal [1, 3, 5, 7, 9, 11, 13, 15, 17, 19], o.take(10)
283
285
  assert_equal @odd.take(10), o.take(10)
@@ -289,8 +291,8 @@ class TC_LazyList < Test::Unit::TestCase
289
291
  end
290
292
 
291
293
  def test_sublist
292
- assert_equal LazyList::Empty, @natural.sublist(-1)
293
- assert_equal LazyList::Empty, @natural.sublist(0)
294
+ assert_equal Empty, @natural.sublist(-1)
295
+ assert_equal Empty, @natural.sublist(0)
294
296
  assert_equal [1], @natural.sublist(1).to_a
295
297
  assert_equal (1..10).to_a, @natural.sublist(10).to_a
296
298
  assert_equal (6..15).to_a, @natural[5, 10].to_a
@@ -299,5 +301,28 @@ class TC_LazyList < Test::Unit::TestCase
299
301
  assert_equal nil, @natural.sublist(10)[10]
300
302
  assert_equal 10, @natural.sublist(10)[9]
301
303
  end
304
+
305
+ def test_append
306
+ l1 = LazyList[1..3]
307
+ l2 = LazyList[5..7]
308
+ l3 = @natural.drop(8)
309
+ assert_equal [], Empty.append.to_a
310
+ assert_equal [], Empty.append(Empty).to_a
311
+ assert_equal [], (Empty + Empty).to_a
312
+ assert_equal [], Empty.append(Empty, Empty).to_a
313
+ assert_equal [1, 2, 3], Empty.append(Empty, l1).to_a
314
+ assert_equal [1, 2, 3], Empty.append(l1, Empty).to_a
315
+ assert_equal [1, 2, 3], Empty.append(Empty, l1, Empty).to_a
316
+ assert_equal [5, 6, 7, 1, 2, 3], l2.append(Empty, l1, Empty).to_a
317
+ assert_equal [1, 2, 3], l1.append.to_a
318
+ assert_equal [1, 2, 3], (l1 + Empty).to_a
319
+ assert_equal [1, 2, 3], (Empty + l1).to_a
320
+ assert_equal [1, 2, 3, 5, 6, 7], l1.append(l2).to_a
321
+ assert_equal [1, 2, 3, 5, 6, 7], (l1 + l2).to_a
322
+ assert_equal [1, 2, 3], l1.append(Empty).to_a
323
+ assert_equal [1, 2, 3], Empty.append(l1).to_a
324
+ assert_equal [1, 2, 3] + [5, 6, 7] + [9, 10, 11, 12],
325
+ l1.append(l2, l3).take(10)
326
+ end
302
327
  end
303
328
  # vim: set et sw=2 ts=2:
metadata CHANGED
@@ -3,65 +3,62 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: lazylist
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.2.1
7
- date: 2005-12-22 00:00:00 +01:00
6
+ version: 0.2.2
7
+ date: 2005-12-23 00:00:00 +01:00
8
8
  summary: Implementation of lazy lists for Ruby
9
9
  require_paths:
10
- - lib
10
+ - lib
11
11
  email: flori@ping.de
12
12
  homepage: http://lazylist.rubyforge.org
13
13
  rubyforge_project: lazylist
14
- description: ""
14
+ description: ''
15
15
  autorequire: lazylist
16
16
  default_executable:
17
17
  bindir: bin
18
18
  has_rdoc: true
19
19
  required_ruby_version: !ruby/object:Gem::Version::Requirement
20
20
  requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
24
25
  version:
25
26
  platform: ruby
26
27
  signing_key:
27
28
  cert_chain:
28
29
  authors:
29
- - Florian Frank
30
+ - Florian Frank
30
31
  files:
31
- - examples
32
- - install.rb
33
- - GPL
34
- - TODO
35
- - Rakefile
36
- - VERSION
37
- - tests
38
- - CHANGES
39
- - lib
40
- - make_doc.rb
41
- - README.en
42
- - examples/hamming.rb
43
- - examples/sieve.rb
44
- - examples/pi.rb
45
- - examples/examples.rb
46
- - tests/test.rb
47
- - tests/test_enumerable.rb
48
- - tests/runner.rb
49
- - lib/lazylist.rb
32
+ - examples
33
+ - install.rb
34
+ - GPL
35
+ - TODO
36
+ - Rakefile
37
+ - VERSION
38
+ - tests
39
+ - CHANGES
40
+ - lib
41
+ - make_doc.rb
42
+ - README.en
43
+ - examples/hamming.rb
44
+ - examples/sieve.rb
45
+ - examples/pi.rb
46
+ - examples/examples.rb
47
+ - tests/test.rb
48
+ - tests/test_enumerable.rb
49
+ - tests/runner.rb
50
+ - lib/lazylist.rb
50
51
  test_files:
51
- - tests/test.rb
52
+ - tests/test.rb
52
53
  rdoc_options:
53
- - --title
54
- - LazyList -- Infinite lists in Ruby
55
- - --main
56
- - LazyList
57
- - --line-numbers
54
+ - "--title"
55
+ - "LazyList -- Infinite lists in Ruby"
56
+ - "--main"
57
+ - LazyList
58
+ - "--line-numbers"
58
59
  extra_rdoc_files:
59
- - lib/lazylist.rb
60
+ - lib/lazylist.rb
60
61
  executables: []
61
-
62
62
  extensions: []
63
-
64
63
  requirements: []
65
-
66
- dependencies: []
67
-
64
+ dependencies: []