lazylist 0.2.0 → 0.2.1
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.
- data/CHANGES +5 -0
- data/README.en +1 -1
- data/Rakefile +17 -9
- data/TODO +1 -0
- data/VERSION +1 -1
- data/examples/examples.rb +13 -0
- data/lib/lazylist.rb +63 -9
- data/tests/runner.rb +1 -1
- data/tests/test.rb +138 -94
- metadata +41 -32
data/CHANGES
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
2005-12-05 * 0.2.1 * Fixed a documentation bug, reported by Gary Wright
|
2
|
+
<at2002@mac.com>.
|
3
|
+
* enable/disable index reference cache added.
|
4
|
+
* LazyList#sublist added to generate sublists that
|
5
|
+
share elements with their "super" lists.
|
1
6
|
2005-10-08 * 0.2.0 * Lots of changes (without backwards compatibility):
|
2
7
|
- Now the usual methods from the Ruby Enumerable module
|
3
8
|
should be much better supported.
|
data/README.en
CHANGED
@@ -9,7 +9,7 @@ Documentation
|
|
9
9
|
=============
|
10
10
|
|
11
11
|
The API documentatin of this library is can be produced by typing:
|
12
|
-
$ ruby
|
12
|
+
$ ruby make_doc.rb
|
13
13
|
|
14
14
|
You should also look into the files in the examples directory to get an idea
|
15
15
|
how this library is used. It is also interesting to examine test.rb for this
|
data/Rakefile
CHANGED
@@ -5,12 +5,12 @@ include Config
|
|
5
5
|
|
6
6
|
PKG_NAME = 'lazylist'
|
7
7
|
PKG_VERSION = File.read('VERSION').chomp
|
8
|
-
PKG_FILES =
|
9
|
-
|
10
|
-
|
8
|
+
PKG_FILES = FileList['**/*'].exclude(/^doc/).exclude(/^CVS/).exclude(/^pkg/)
|
9
|
+
|
10
|
+
task :default => :test
|
11
11
|
|
12
12
|
desc "Run unit tests"
|
13
|
-
task
|
13
|
+
task :test do
|
14
14
|
cd 'tests' do
|
15
15
|
ruby %{-I../ext runner.rb}
|
16
16
|
end
|
@@ -26,6 +26,12 @@ task :doc do
|
|
26
26
|
ruby 'make_doc.rb'
|
27
27
|
end
|
28
28
|
|
29
|
+
desc "Removing generated files"
|
30
|
+
task :clean do
|
31
|
+
rm_rf 'doc'
|
32
|
+
rm_rf 'tests/coverage'
|
33
|
+
end
|
34
|
+
|
29
35
|
spec = Gem::Specification.new do |s|
|
30
36
|
#### Basic information.
|
31
37
|
|
@@ -57,11 +63,11 @@ spec = Gem::Specification.new do |s|
|
|
57
63
|
#### Documentation and testing.
|
58
64
|
|
59
65
|
s.has_rdoc = true
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
66
|
+
s.extra_rdoc_files = [ 'lib/lazylist.rb' ]
|
67
|
+
s.rdoc_options <<
|
68
|
+
'--title' << 'LazyList -- Infinite lists in Ruby' <<
|
69
|
+
'--main' << 'LazyList' <<
|
70
|
+
'--line-numbers'
|
65
71
|
s.test_files << 'tests/test.rb'
|
66
72
|
|
67
73
|
#### Author and project details.
|
@@ -76,4 +82,6 @@ Rake::GemPackageTask.new(spec) do |pkg|
|
|
76
82
|
pkg.need_tar = true
|
77
83
|
pkg.package_files += PKG_FILES
|
78
84
|
end
|
85
|
+
|
86
|
+
task :release => [ :clean, :package ]
|
79
87
|
# vim: set et sw=2 ts=2:
|
data/TODO
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/examples/examples.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'lazylist'
|
2
|
+
$:.unshift 'examples'
|
3
|
+
require 'pi'
|
2
4
|
|
3
5
|
puts "Random number lazy list (infinite)"
|
4
6
|
def rand(s = 666)
|
@@ -66,4 +68,15 @@ me = LazyList[File.new($0)]
|
|
66
68
|
me.each(6) { |line| puts line }
|
67
69
|
p me[66]
|
68
70
|
puts me.length
|
71
|
+
puts
|
72
|
+
|
73
|
+
puts "Proof that PI is the number of the beast"
|
74
|
+
p PI.take(10)
|
75
|
+
|
76
|
+
def window(l, n, m = 0)
|
77
|
+
list([ l.take(n) * '', m ]) { window(l.drop, n, m + 1) }
|
78
|
+
end
|
79
|
+
w = window(PI, 3)
|
80
|
+
index = w.find { |(x, i)| x == '666' and break i }
|
81
|
+
puts "Found #{PI.take_span(index, 3)} at #{index}!"
|
69
82
|
# vim: set et sw=2 ts=2:
|
data/lib/lazylist.rb
CHANGED
@@ -104,10 +104,10 @@ class LazyList
|
|
104
104
|
# list for which the block evaluates to true, the second containing the
|
105
105
|
# rest.
|
106
106
|
def partition(&block)
|
107
|
-
|
108
|
-
return LazyList.from_enum(accepted), LazyList.from_enum(rejected)
|
107
|
+
return select(&block), reject(&block)
|
109
108
|
end
|
110
109
|
|
110
|
+
|
111
111
|
# Returns a sorted version of this lazy list. This method should only be
|
112
112
|
# called on finite lazy lists or it will never return. Also see
|
113
113
|
# Enumerable#sort.
|
@@ -263,6 +263,7 @@ class LazyList
|
|
263
263
|
# Creates a new LazyList element. The tail can be given either as
|
264
264
|
# second argument or as block.
|
265
265
|
def initialize(head, tail = nil, &promise)
|
266
|
+
@cached = true
|
266
267
|
@ref_cache = {}
|
267
268
|
if tail
|
268
269
|
promise and
|
@@ -274,6 +275,17 @@ class LazyList
|
|
274
275
|
end
|
275
276
|
end
|
276
277
|
|
278
|
+
# Set this to false, if index references into the lazy list shouldn't be
|
279
|
+
# cached for fast access (while spending some memory on this). This value
|
280
|
+
# defaults to true.
|
281
|
+
attr_writer :cached
|
282
|
+
|
283
|
+
# Returns true, if index references into the lazy list are cached for fast
|
284
|
+
# access to the referenceѕ elements.
|
285
|
+
def cached?
|
286
|
+
!!@cached
|
287
|
+
end
|
288
|
+
|
277
289
|
# Denotes the empty LazyList which is a guard at the end of finite
|
278
290
|
# lazy lists.
|
279
291
|
Empty = new(nil, nil)
|
@@ -303,8 +315,8 @@ class LazyList
|
|
303
315
|
# Identity lambda expression, mostly used as a default.
|
304
316
|
Identity = lambda { |x| x }
|
305
317
|
|
306
|
-
# Returns a lazy list which is generated
|
307
|
-
# LazyList.span.
|
318
|
+
# Returns a lazy list which is generated from the Enumerable a or
|
319
|
+
# LazyList.span(a, n), if n was given as an argument.
|
308
320
|
def self.[](a, n = nil)
|
309
321
|
case
|
310
322
|
when n
|
@@ -371,6 +383,48 @@ class LazyList
|
|
371
383
|
end
|
372
384
|
end
|
373
385
|
|
386
|
+
# Returns the sublist, constructed from the Range _range_ indexed elements,
|
387
|
+
# of this lazy list.
|
388
|
+
def sublist_range(range)
|
389
|
+
f = range.first
|
390
|
+
l = range.exclude_end? ? range.last - 1 : range.last
|
391
|
+
sublist_span(f, l - f + 1)
|
392
|
+
end
|
393
|
+
|
394
|
+
# Returns the sublist, that spans _m_ elements starting from the _n_-th
|
395
|
+
# element of this lazy list, if _m_ was given. If _m_ is nonpositive, the
|
396
|
+
# empty lazy list LazyList::Empty is returned.
|
397
|
+
#
|
398
|
+
# If _m_ wasn't given returns the _n_ long sublist starting from the first
|
399
|
+
# (index = 0) element. If _n_ is nonpositive, the empty lazy list
|
400
|
+
# LazyList::Empty is returned.
|
401
|
+
def sublist_span(n, m = nil)
|
402
|
+
if not m
|
403
|
+
sublist_span(0, n)
|
404
|
+
elsif m > 0
|
405
|
+
l = ref(n)
|
406
|
+
self.class.new(l.head) { l.tail.sublist_span(0, m - 1) }
|
407
|
+
else
|
408
|
+
Empty
|
409
|
+
end
|
410
|
+
end
|
411
|
+
|
412
|
+
# Returns the result of sublist_range(n), if _n_ is a Range. The result of
|
413
|
+
# sublist_span(n, m), if otherwise.
|
414
|
+
def sublist(n, m = nil)
|
415
|
+
if n.is_a? Range
|
416
|
+
sublist_range(n)
|
417
|
+
else
|
418
|
+
sublist_span(n, m)
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
def set_ref(n, value)
|
423
|
+
return value unless cached?
|
424
|
+
@ref_cache[n] = value
|
425
|
+
end
|
426
|
+
private :set_ref
|
427
|
+
|
374
428
|
# Returns the n-th LazyList-Object.
|
375
429
|
def ref(n)
|
376
430
|
if @ref_cache.key?(n)
|
@@ -380,12 +434,12 @@ class LazyList
|
|
380
434
|
i = n
|
381
435
|
while i > 0 do
|
382
436
|
if s.empty?
|
383
|
-
return
|
437
|
+
return set_ref(n, self)
|
384
438
|
end
|
385
439
|
s = s.tail
|
386
440
|
i -= 1
|
387
441
|
end
|
388
|
-
|
442
|
+
set_ref(n, s)
|
389
443
|
end
|
390
444
|
private :ref
|
391
445
|
|
@@ -395,13 +449,13 @@ class LazyList
|
|
395
449
|
# returned.
|
396
450
|
def [](n, m = nil)
|
397
451
|
if n.is_a? Range
|
398
|
-
|
452
|
+
sublist(n)
|
399
453
|
elsif n < 0
|
400
454
|
nil
|
401
455
|
elsif m
|
402
|
-
|
456
|
+
sublist(n, m)
|
403
457
|
else
|
404
|
-
ref(n).head
|
458
|
+
ref(n).head
|
405
459
|
end
|
406
460
|
end
|
407
461
|
|
data/tests/runner.rb
CHANGED
data/tests/test.rb
CHANGED
@@ -51,121 +51,144 @@ class TC_LazyList < Test::Unit::TestCase
|
|
51
51
|
@read_queue1 = LazyList::ReadQueue.new(1..1)
|
52
52
|
@read_queue10 = LazyList::ReadQueue.new(1..10)
|
53
53
|
assert(@read_queue0.empty?)
|
54
|
-
assert_equal
|
54
|
+
assert_equal nil, @read_queue0.pop
|
55
55
|
assert(!@read_queue1.empty?)
|
56
|
-
assert_equal
|
56
|
+
assert_equal 1, @read_queue1.pop
|
57
57
|
assert(!@read_queue10.empty?)
|
58
58
|
for i in 1..10 do
|
59
|
-
assert_equal
|
59
|
+
assert_equal i, @read_queue10.pop
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
63
|
def test_finite
|
64
|
-
assert_equal
|
65
|
-
assert_equal
|
66
|
-
assert_equal
|
67
|
-
assert_equal
|
64
|
+
assert_equal @finite_inner0.to_a, @finite0.to_a
|
65
|
+
assert_equal @finite_inner1.to_a, @finite1.to_a
|
66
|
+
assert_equal @finite_inner10.to_a, @finite10.to_a
|
67
|
+
assert_equal @finite_span_generated, @finite_span.to_a
|
68
68
|
end
|
69
69
|
|
70
70
|
def test_size
|
71
|
-
assert_equal
|
72
|
-
assert_equal
|
73
|
-
assert_equal
|
74
|
-
assert_equal
|
75
|
-
assert_equal
|
76
|
-
assert_equal
|
77
|
-
assert_equal
|
78
|
-
assert_equal
|
71
|
+
assert_equal 0, @finite0.size
|
72
|
+
assert_equal 1, @finite1.size
|
73
|
+
assert_equal 10, @finite10.size
|
74
|
+
assert_equal 10, @finite_span.size
|
75
|
+
assert_equal 0, @finite0.length
|
76
|
+
assert_equal 1, @finite1.length
|
77
|
+
assert_equal 10, @finite10.length
|
78
|
+
assert_equal 10, @finite_span.length
|
79
79
|
end
|
80
80
|
|
81
81
|
def test_select
|
82
|
-
assert_equal
|
83
|
-
assert_equal
|
84
|
-
assert_equal
|
85
|
-
assert_equal(
|
86
|
-
assert_equal(
|
87
|
-
assert_equal
|
82
|
+
assert_equal 1, @odd[0]
|
83
|
+
assert_equal 3, @odd[1]
|
84
|
+
assert_equal 5, @odd[2]
|
85
|
+
assert_equal (1..19).select(&@oddp), @odd[0, 10].to_a
|
86
|
+
assert_equal (1..10).to_a, @natural[0, 10].to_a
|
87
|
+
assert_equal [ 1 ] * 10, @ones[0, 10].to_a
|
88
88
|
ends_with_a = @strings.select { |x| x[-1] == ?a }
|
89
|
-
|
90
|
-
[ "a", ("a".."z").map { |x| x + "a" } ].flatten
|
89
|
+
assert_equal ends_with_a[0, 27].to_a,
|
90
|
+
[ "a", ("a".."z").map { |x| x + "a" } ].flatten
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_map
|
94
94
|
id = @natural.map
|
95
|
-
assert_equal
|
96
|
-
assert_equal
|
97
|
-
assert_equal
|
98
|
-
assert_equal(
|
99
|
-
assert_equal(
|
95
|
+
assert_equal 1, id[0]
|
96
|
+
assert_equal 2, id[1]
|
97
|
+
assert_equal 3, id[2]
|
98
|
+
assert_equal (1..10).to_a, id[0, 10].to_a
|
99
|
+
assert_equal (1..10).to_a, @natural[0, 10].to_a
|
100
100
|
squaredf = lambda { |x| x ** 2 }
|
101
101
|
squared = @natural.map(&squaredf)
|
102
|
-
assert_equal
|
103
|
-
assert_equal
|
104
|
-
assert_equal
|
105
|
-
assert_equal(
|
106
|
-
assert_equal(
|
102
|
+
assert_equal 1, squared[0]
|
103
|
+
assert_equal 4, squared[1]
|
104
|
+
assert_equal 9, squared[2]
|
105
|
+
assert_equal (1..10).map(&squaredf), squared[0, 10].to_a
|
106
|
+
assert_equal (1..10).to_a, @natural[0, 10].to_a
|
107
107
|
strangef = lambda { |x| x * (x[0] - ?a + 1) }
|
108
108
|
strange = @strings.map(&strangef)
|
109
|
-
assert_equal
|
110
|
-
assert_equal
|
111
|
-
assert_equal
|
112
|
-
assert_equal(
|
113
|
-
assert_equal(
|
109
|
+
assert_equal "a", strange[0]
|
110
|
+
assert_equal "bb", strange[1]
|
111
|
+
assert_equal "ccc", strange[2]
|
112
|
+
assert_equal ("a".."z").map(&strangef), strange[0, 26].to_a
|
113
|
+
assert_equal ("a".."z").to_a, @strings[0, 26].to_a
|
114
114
|
end
|
115
115
|
|
116
116
|
def test_index
|
117
|
-
assert_equal
|
118
|
-
assert_equal
|
119
|
-
assert_equal
|
120
|
-
|
121
|
-
assert_equal
|
122
|
-
|
123
|
-
assert_equal
|
124
|
-
assert_equal
|
125
|
-
assert_equal
|
126
|
-
assert_equal
|
127
|
-
assert_equal
|
128
|
-
assert_equal(
|
129
|
-
assert_equal(
|
130
|
-
assert_equal(
|
131
|
-
assert_equal(
|
132
|
-
|
117
|
+
assert_equal nil, LazyList::Empty[-1]
|
118
|
+
assert_equal nil, LazyList::Empty[0]
|
119
|
+
assert_equal nil, LazyList::Empty[1]
|
120
|
+
assert @natural.cached?
|
121
|
+
assert_equal nil, @natural[-1]
|
122
|
+
assert_equal nil, @natural[-1]
|
123
|
+
assert_equal 1, @natural[0]
|
124
|
+
assert_equal 1, @natural[0]
|
125
|
+
assert_equal 2, @natural[1]
|
126
|
+
assert_equal 2, @natural[1]
|
127
|
+
assert_equal nil, @natural[-1, 10]
|
128
|
+
assert_equal (1..10).to_a, @natural[0, 10].to_a
|
129
|
+
assert_equal (6..15).to_a, @natural[5, 10].to_a
|
130
|
+
assert_equal (1..1).to_a, @natural[0..0].to_a
|
131
|
+
assert_equal (1..0).to_a, @natural[0..-1].to_a
|
132
|
+
assert_equal (1...1).to_a, @natural[0...0].to_a
|
133
|
+
assert_equal (1...0).to_a, @natural[0...-1].to_a
|
134
|
+
assert_equal (1..10).to_a, @natural[0..9].to_a
|
135
|
+
assert_equal (6..15).to_a, @natural[5..14].to_a
|
136
|
+
assert_equal (1..10).to_a, @natural[0...10].to_a
|
137
|
+
assert_equal (6..15).to_a, @natural[5...15].to_a
|
138
|
+
end
|
139
|
+
|
140
|
+
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]
|
145
|
+
@natural.cached = false
|
146
|
+
assert !@natural.cached?
|
147
|
+
assert_equal nil, @natural[-1]
|
148
|
+
assert_equal nil, @natural[-1]
|
149
|
+
assert_equal 1, @natural[0]
|
150
|
+
assert_equal 1, @natural[0]
|
151
|
+
assert_equal 2, @natural[1]
|
152
|
+
assert_equal 2, @natural[1]
|
153
|
+
assert_equal nil, @natural[-1, 10]
|
133
154
|
end
|
134
155
|
|
135
156
|
def test_merge
|
136
157
|
natural = @even.merge(@odd)
|
137
|
-
assert_equal
|
158
|
+
assert_equal @natural[0, 10].to_a, natural[0, 10].to_a
|
138
159
|
natural = @odd.merge(@even)
|
139
|
-
assert_equal
|
160
|
+
assert_equal @natural[0, 10].to_a, natural[0, 10].to_a
|
140
161
|
double_list = @natural.merge(@natural) { |a,b| a <= b }
|
141
|
-
assert
|
162
|
+
assert double_list[0, 10].to_a, (1..5).map { |x| [x, x] }.flatten
|
142
163
|
odd2 = @natural.select(&@oddp).drop(1)
|
143
164
|
some = @even.merge(odd2)
|
144
|
-
assert_equal
|
165
|
+
assert_equal @natural[1, 9].to_a, some[0, 9].to_a
|
166
|
+
more_ones = @ones.merge(@ones)
|
167
|
+
assert_equal [1] * 10, more_ones.take(10)
|
145
168
|
end
|
146
169
|
|
147
170
|
def test_take_drop
|
148
|
-
assert_equal
|
149
|
-
assert_equal
|
150
|
-
assert_equal
|
151
|
-
assert_equal
|
152
|
-
assert_equal
|
153
|
-
assert_equal
|
154
|
-
assert_equal
|
155
|
-
assert_equal
|
156
|
-
assert_equal
|
157
|
-
assert_equal
|
158
|
-
assert_equal
|
159
|
-
assert_equal
|
160
|
-
assert_equal
|
161
|
-
assert_equal
|
162
|
-
assert_equal
|
171
|
+
assert_equal [ ], @odd.take(0)
|
172
|
+
assert_equal [ 1, 3, 5 ], @odd.take(3)
|
173
|
+
assert_equal [ 1, 3, 5 ], @odd.take(3)
|
174
|
+
assert_equal [ ], @odd.take!(0)
|
175
|
+
assert_equal [ 1 ], @odd.take(1)
|
176
|
+
assert_equal [ 1 ], @odd.take!(1)
|
177
|
+
assert_equal [ 3, 5, 7 ], @odd.take(3)
|
178
|
+
assert_equal [ 3, 5 ], @odd.take!(2)
|
179
|
+
assert_equal [ 7, 9, 11 ], @odd.take(3)
|
180
|
+
assert_equal [ 7, 9, 11 ], @odd.drop(0).take(3)
|
181
|
+
assert_equal [ 7, 9, 11 ], @odd.take(3)
|
182
|
+
assert_equal [ 9, 11, 13 ], @odd.drop(1).take(3)
|
183
|
+
assert_equal [ 7, 9, 11 ], @odd.take(3)
|
184
|
+
assert_equal [ 11, 13, 15 ], @odd.drop(2).take(3)
|
185
|
+
assert_equal [ 7, 9, 11 ], @odd.take(3)
|
163
186
|
@odd.drop!(0)
|
164
|
-
assert_equal
|
187
|
+
assert_equal [ 7, 9, 11 ], @odd.take(3)
|
165
188
|
@odd.drop!(1)
|
166
|
-
assert_equal
|
189
|
+
assert_equal [ 9, 11, 13 ], @odd.take(3)
|
167
190
|
@odd.drop!(2)
|
168
|
-
assert_equal
|
191
|
+
assert_equal [ 13, 15, 17 ], @odd.take(3)
|
169
192
|
end
|
170
193
|
|
171
194
|
def test_io
|
@@ -181,21 +204,30 @@ class TC_LazyList < Test::Unit::TestCase
|
|
181
204
|
end
|
182
205
|
@tempfile10.close
|
183
206
|
@tempfile10_list = LazyList[File.new(@tempfile10.path)]
|
184
|
-
assert_equal
|
185
|
-
assert_equal
|
186
|
-
assert_equal
|
187
|
-
assert_equal(
|
188
|
-
@tempfile10_list.to_a
|
207
|
+
assert_equal 0, @tempfile0_list.size
|
208
|
+
assert_equal [], @tempfile0_list.to_a
|
209
|
+
assert_equal 10, @tempfile10_list.size
|
210
|
+
assert_equal (1..10).map { |x| x.to_s + "\n" },
|
211
|
+
@tempfile10_list.to_a
|
189
212
|
temp = LazyList.io(File.new(@tempfile0.path)) do |io|
|
190
213
|
io.readline
|
191
214
|
end
|
192
215
|
content = temp.inject([]) { |c, line| c << line }
|
193
|
-
assert_equal
|
216
|
+
assert_equal [], content
|
194
217
|
temp = LazyList.io(File.new(@tempfile10.path)) do |io|
|
195
218
|
io.readline
|
196
219
|
end
|
197
220
|
content = temp.inject([]) { |c, line| c << line }
|
198
|
-
assert_equal(
|
221
|
+
assert_equal (1..10).map { |x| x.to_s + "\n" }, content
|
222
|
+
end
|
223
|
+
|
224
|
+
def test_construct_ref
|
225
|
+
assert_equal LazyList::Empty, LazyList[0, -1]
|
226
|
+
assert_equal [0], LazyList[0, 1].to_a
|
227
|
+
assert_equal (0..9).to_a, LazyList[0, 10].to_a
|
228
|
+
assert_equal LazyList::Empty, LazyList[0..-1]
|
229
|
+
assert_equal [0], LazyList[0..0].to_a
|
230
|
+
assert_equal (0..9).to_a, LazyList[0..9].to_a
|
199
231
|
end
|
200
232
|
|
201
233
|
def test_iterate
|
@@ -206,24 +238,24 @@ class TC_LazyList < Test::Unit::TestCase
|
|
206
238
|
5 * x + 1
|
207
239
|
end
|
208
240
|
end
|
209
|
-
assert_equal
|
210
|
-
assert_equal
|
211
|
-
assert_equal
|
212
|
-
assert_equal
|
241
|
+
assert_equal nil, f[-1]
|
242
|
+
assert_equal 5, f[0]
|
243
|
+
assert_equal 26, f[1]
|
244
|
+
assert_equal [5, 26, 13, 66, 33, 166, 83, 416], f[0, 8].to_a
|
213
245
|
end
|
214
246
|
|
215
|
-
def
|
247
|
+
def test_inspect
|
216
248
|
l = LazyList[1..11]
|
217
|
-
assert_equal
|
218
|
-
assert_equal
|
249
|
+
assert_equal "[]", LazyList::Empty.inspect
|
250
|
+
assert_equal "[1,... ]", l.inspect
|
219
251
|
l[1]
|
220
|
-
assert_equal
|
252
|
+
assert_equal "[1, 2,... ]", l.inspect
|
221
253
|
l[2]
|
222
|
-
assert_equal
|
254
|
+
assert_equal "[1, 2, 3,... ]", l.inspect
|
223
255
|
l[9]
|
224
|
-
assert_equal
|
256
|
+
assert_equal "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10,... ]", l.inspect
|
225
257
|
l.to_a
|
226
|
-
assert_equal
|
258
|
+
assert_equal "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]", l.inspect
|
227
259
|
end
|
228
260
|
|
229
261
|
def test_zip
|
@@ -255,5 +287,17 @@ class TC_LazyList < Test::Unit::TestCase
|
|
255
287
|
assert_equal [ 1 ] * 10 , ones.take(10)
|
256
288
|
assert_equal '[1,... ]', ones.inspect
|
257
289
|
end
|
290
|
+
|
291
|
+
def test_sublist
|
292
|
+
assert_equal LazyList::Empty, @natural.sublist(-1)
|
293
|
+
assert_equal LazyList::Empty, @natural.sublist(0)
|
294
|
+
assert_equal [1], @natural.sublist(1).to_a
|
295
|
+
assert_equal (1..10).to_a, @natural.sublist(10).to_a
|
296
|
+
assert_equal (6..15).to_a, @natural[5, 10].to_a
|
297
|
+
assert_equal (6..15).to_a, @natural[5..14].to_a
|
298
|
+
assert_equal (6..14).to_a, @natural[5...14].to_a
|
299
|
+
assert_equal nil, @natural.sublist(10)[10]
|
300
|
+
assert_equal 10, @natural.sublist(10)[9]
|
301
|
+
end
|
258
302
|
end
|
259
303
|
# vim: set et sw=2 ts=2:
|
metadata
CHANGED
@@ -3,56 +3,65 @@ 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.
|
7
|
-
date: 2005-
|
6
|
+
version: 0.2.1
|
7
|
+
date: 2005-12-22 00:00:00 +01:00
|
8
8
|
summary: Implementation of lazy lists for Ruby
|
9
9
|
require_paths:
|
10
|
-
|
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
|
-
|
23
|
-
|
24
|
-
version: 0.0.0
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
25
24
|
version:
|
26
25
|
platform: ruby
|
27
26
|
signing_key:
|
28
27
|
cert_chain:
|
29
28
|
authors:
|
30
|
-
|
29
|
+
- Florian Frank
|
31
30
|
files:
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
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
|
51
50
|
test_files:
|
52
|
-
|
53
|
-
rdoc_options:
|
54
|
-
|
51
|
+
- tests/test.rb
|
52
|
+
rdoc_options:
|
53
|
+
- --title
|
54
|
+
- LazyList -- Infinite lists in Ruby
|
55
|
+
- --main
|
56
|
+
- LazyList
|
57
|
+
- --line-numbers
|
58
|
+
extra_rdoc_files:
|
59
|
+
- lib/lazylist.rb
|
55
60
|
executables: []
|
61
|
+
|
56
62
|
extensions: []
|
63
|
+
|
57
64
|
requirements: []
|
58
|
-
|
65
|
+
|
66
|
+
dependencies: []
|
67
|
+
|