hamster 0.1.19 → 0.1.20
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/History.rdoc +10 -0
- data/README.rdoc +1 -1
- data/lib/hamster/list.rb +19 -1
- data/lib/hamster/stack.rb +4 -0
- data/lib/hamster/version.rb +1 -1
- data/spec/hamster/hash/all_spec.rb +5 -5
- data/spec/hamster/hash/any_spec.rb +5 -5
- data/spec/hamster/hash/eql_spec.rb +2 -2
- data/spec/hamster/hash/has_key_spec.rb +2 -2
- data/spec/hamster/hash/none_spec.rb +5 -5
- data/spec/hamster/list/all_spec.rb +44 -12
- data/spec/hamster/list/any_spec.rb +8 -8
- data/spec/hamster/list/append_spec.rb +2 -2
- data/spec/hamster/list/break_spec.rb +183 -0
- data/spec/hamster/list/cadr_spec.rb +7 -2
- data/spec/hamster/list/clear_spec.rb +36 -0
- data/spec/hamster/list/copying_spec.rb +3 -2
- data/spec/hamster/list/cycle_spec.rb +20 -7
- data/spec/hamster/list/drop_spec.rb +10 -5
- data/spec/hamster/list/drop_while_spec.rb +17 -5
- data/spec/hamster/list/each_spec.rb +15 -8
- data/spec/hamster/list/empty_spec.rb +2 -2
- data/spec/hamster/list/eql_spec.rb +6 -6
- data/spec/hamster/list/filter_spec.rb +14 -6
- data/spec/hamster/list/find_spec.rb +2 -2
- data/spec/hamster/list/grep_spec.rb +10 -5
- data/spec/hamster/list/head_spec.rb +16 -12
- data/spec/hamster/list/include_spec.rb +2 -2
- data/spec/hamster/list/inspect_spec.rb +2 -2
- data/spec/hamster/list/map_spec.rb +18 -6
- data/spec/hamster/list/maximum_spec.rb +2 -2
- data/spec/hamster/list/minimum_spec.rb +2 -2
- data/spec/hamster/list/none_spec.rb +8 -8
- data/spec/hamster/list/one_spec.rb +9 -9
- data/spec/hamster/list/partition_spec.rb +87 -39
- data/spec/hamster/list/reduce_spec.rb +2 -2
- data/spec/hamster/list/reject_spec.rb +14 -6
- data/spec/hamster/list/reverse_spec.rb +9 -4
- data/spec/hamster/list/size_spec.rb +2 -2
- data/spec/hamster/list/span_spec.rb +183 -0
- data/spec/hamster/list/split_at_spec.rb +68 -17
- data/spec/hamster/list/tail_spec.rb +2 -2
- data/spec/hamster/list/take_spec.rb +10 -5
- data/spec/hamster/list/take_while_spec.rb +15 -6
- data/spec/hamster/list/to_a_spec.rb +2 -2
- data/spec/hamster/list/to_ary_spec.rb +3 -3
- data/spec/hamster/list/to_list_spec.rb +3 -2
- data/spec/hamster/list/zip_spec.rb +16 -7
- data/spec/hamster/set/all_spec.rb +6 -6
- data/spec/hamster/set/any_spec.rb +6 -6
- data/spec/hamster/set/eql_spec.rb +2 -2
- data/spec/hamster/set/include_spec.rb +2 -2
- data/spec/hamster/set/none_spec.rb +6 -6
- data/spec/hamster/set/to_list.rb +1 -1
- data/spec/hamster/stack/clear_spec.rb +36 -0
- data/spec/hamster/stack/eql_spec.rb +2 -2
- data/spec/hamster/stack/pop_spec.rb +2 -2
- data/spec/hamster/trie/remove_spec.rb +3 -3
- data/spec/spec_helper.rb +2 -0
- metadata +9 -89
- data/lib/hamster/core_ext/enumerable.rbc +0 -481
- data/lib/hamster/core_ext/io.rbc +0 -604
- data/lib/hamster/hash.rbc +0 -3117
- data/lib/hamster/list.rbc +0 -7274
- data/lib/hamster/set.rbc +0 -3152
- data/lib/hamster/stack.rbc +0 -1358
- data/lib/hamster/trie.rbc +0 -3416
- data/spec/hamster/core_ext/enumerable_spec.rbc +0 -747
- data/spec/hamster/core_ext/io_spec.rbc +0 -409
- data/spec/hamster/hash/all_spec.rbc +0 -1214
- data/spec/hamster/hash/any_spec.rbc +0 -1495
- data/spec/hamster/hash/construction_spec.rbc +0 -742
- data/spec/hamster/hash/copying_spec.rbc +0 -519
- data/spec/hamster/hash/each_spec.rbc +0 -908
- data/spec/hamster/hash/empty_spec.rbc +0 -517
- data/spec/hamster/hash/eql_spec.rbc +0 -1702
- data/spec/hamster/hash/filter_spec.rbc +0 -1433
- data/spec/hamster/hash/get_spec.rbc +0 -791
- data/spec/hamster/hash/has_key_spec.rbc +0 -719
- data/spec/hamster/hash/map_spec.rbc +0 -1454
- data/spec/hamster/hash/none_spec.rbc +0 -1399
- data/spec/hamster/hash/put_spec.rbc +0 -1334
- data/spec/hamster/hash/reduce_spec.rbc +0 -1234
- data/spec/hamster/hash/reject_spec.rbc +0 -1445
- data/spec/hamster/hash/remove_spec.rbc +0 -1135
- data/spec/hamster/hash/size_spec.rbc +0 -596
- data/spec/hamster/list/all_spec.rbc +0 -1760
- data/spec/hamster/list/any_spec.rbc +0 -1888
- data/spec/hamster/list/append_spec.rbc +0 -1555
- data/spec/hamster/list/cadr_spec.rbc +0 -855
- data/spec/hamster/list/cons_spec.rbc +0 -848
- data/spec/hamster/list/construction_spec.rbc +0 -1732
- data/spec/hamster/list/copying_spec.rbc +0 -555
- data/spec/hamster/list/drop_spec.rbc +0 -1081
- data/spec/hamster/list/drop_while_spec.rbc +0 -1286
- data/spec/hamster/list/each_spec.rbc +0 -1365
- data/spec/hamster/list/empty_spec.rbc +0 -571
- data/spec/hamster/list/eql_spec.rbc +0 -1819
- data/spec/hamster/list/filter_spec.rbc +0 -1595
- data/spec/hamster/list/find_spec.rbc +0 -1456
- data/spec/hamster/list/head_spec.rbc +0 -575
- data/spec/hamster/list/include_spec.rbc +0 -1173
- data/spec/hamster/list/inspect_spec.rbc +0 -995
- data/spec/hamster/list/map_spec.rbc +0 -1545
- data/spec/hamster/list/none_spec.rbc +0 -1788
- data/spec/hamster/list/partition_spec.rbc +0 -2715
- data/spec/hamster/list/reduce_spec.rbc +0 -2081
- data/spec/hamster/list/reject_spec.rbc +0 -1590
- data/spec/hamster/list/reverse_spec.rbc +0 -1061
- data/spec/hamster/list/size_spec.rbc +0 -1063
- data/spec/hamster/list/tail_spec.rbc +0 -595
- data/spec/hamster/list/take_spec.rbc +0 -1075
- data/spec/hamster/list/take_while_spec.rbc +0 -1446
- data/spec/hamster/list/to_a_spec.rbc +0 -961
- data/spec/hamster/list/to_ary_spec.rbc +0 -1080
- data/spec/hamster/set/add_spec.rbc +0 -1039
- data/spec/hamster/set/all_spec.rbc +0 -1316
- data/spec/hamster/set/any_spec.rbc +0 -1444
- data/spec/hamster/set/construction_spec.rbc +0 -422
- data/spec/hamster/set/copying_spec.rbc +0 -469
- data/spec/hamster/set/each_spec.rbc +0 -820
- data/spec/hamster/set/empty_spec.rbc +0 -452
- data/spec/hamster/set/eql_spec.rbc +0 -1309
- data/spec/hamster/set/filter_spec.rbc +0 -1272
- data/spec/hamster/set/include_spec.rbc +0 -657
- data/spec/hamster/set/map_spec.rbc +0 -1285
- data/spec/hamster/set/none_spec.rbc +0 -1344
- data/spec/hamster/set/reduce_spec.rbc +0 -1177
- data/spec/hamster/set/reject_spec.rbc +0 -1273
- data/spec/hamster/set/remove_spec.rbc +0 -947
- data/spec/hamster/set/size_spec.rbc +0 -531
- data/spec/hamster/set/to_a_spec.rbc +0 -559
- data/spec/hamster/stack/construction_spec.rbc +0 -862
- data/spec/hamster/stack/copying_spec.rbc +0 -555
- data/spec/hamster/stack/empty_spec.rbc +0 -571
- data/spec/hamster/stack/eql_spec.rbc +0 -1281
- data/spec/hamster/stack/inspect_spec.rbc +0 -586
- data/spec/hamster/stack/pop_spec.rbc +0 -1099
- data/spec/hamster/stack/push_spec.rbc +0 -848
- data/spec/hamster/stack/size_spec.rbc +0 -650
- data/spec/hamster/stack/top_spec.rbc +0 -676
- data/spec/hamster/trie/remove_spec.rbc +0 -40
- data/spec/spec_helper.rbc +0 -163
- data/tasks/spec.rbc +0 -201
@@ -9,11 +9,11 @@ describe Hamster::List do
|
|
9
9
|
describe "doesn't run out of stack space on a really big" do
|
10
10
|
|
11
11
|
it "stream" do
|
12
|
-
@list = Hamster.interval(0,
|
12
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "list" do
|
16
|
-
@list = (0
|
16
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
17
17
|
end
|
18
18
|
|
19
19
|
after do
|
@@ -31,11 +31,16 @@ describe Hamster::List do
|
|
31
31
|
describe "on #{values.inspect}" do
|
32
32
|
|
33
33
|
before do
|
34
|
-
@
|
34
|
+
@original = Hamster.list(*values)
|
35
|
+
@result = @original.reverse { |item| item.downcase }
|
36
|
+
end
|
37
|
+
|
38
|
+
it "preserves the original" do
|
39
|
+
@original.should == Hamster.list(*values)
|
35
40
|
end
|
36
41
|
|
37
42
|
it "returns #{expected.inspect}" do
|
38
|
-
@
|
43
|
+
@result.should == Hamster.list(*expected)
|
39
44
|
end
|
40
45
|
|
41
46
|
end
|
@@ -11,11 +11,11 @@ describe Hamster::List do
|
|
11
11
|
describe "doesn't run out of stack space on a really big" do
|
12
12
|
|
13
13
|
it "stream" do
|
14
|
-
@list = Hamster.interval(0,
|
14
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
15
15
|
end
|
16
16
|
|
17
17
|
it "list" do
|
18
|
-
@list = (0
|
18
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
19
19
|
end
|
20
20
|
|
21
21
|
after do
|
@@ -0,0 +1,183 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
require 'hamster/list'
|
4
|
+
|
5
|
+
describe Hamster::List do
|
6
|
+
|
7
|
+
shared_examples_for "#span without a block" do
|
8
|
+
|
9
|
+
describe "without a block" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
@result = @original.span
|
13
|
+
@prefix = @result.car
|
14
|
+
@remainder = @result.cadr
|
15
|
+
end
|
16
|
+
|
17
|
+
it "returns a list with two items" do
|
18
|
+
@result.size.should == 2
|
19
|
+
end
|
20
|
+
|
21
|
+
it "returns self as the prefix" do
|
22
|
+
@prefix.should equal(@original)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "leaves the remainder empty" do
|
26
|
+
@remainder.should be_empty
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
shared_examples_for "#span is lazy" do
|
34
|
+
|
35
|
+
it "is lazy" do
|
36
|
+
count = 0
|
37
|
+
@original.span { |item| count += 1; true }
|
38
|
+
count.should <= 1
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#span" do
|
44
|
+
|
45
|
+
describe "doesn't run out of stack space on a really big" do
|
46
|
+
|
47
|
+
it "stream" do
|
48
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "list" do
|
52
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
53
|
+
end
|
54
|
+
|
55
|
+
after do
|
56
|
+
@list.span { |item| item < 5000 }
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "on a stream" do
|
62
|
+
|
63
|
+
before do
|
64
|
+
count = 0
|
65
|
+
@original = Hamster.stream { count += 1 }
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "with a block" do
|
69
|
+
|
70
|
+
before do
|
71
|
+
@result = @original.span { |item| item <= 5 }
|
72
|
+
@prefix = @result.car
|
73
|
+
@remainder = @result.cadr
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns a list with two items" do
|
77
|
+
@result.size.should == 2
|
78
|
+
end
|
79
|
+
|
80
|
+
it "correctly identifies the prefix" do
|
81
|
+
@prefix.should == Hamster.list(1, 2, 3, 4, 5)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "correctly identifies the remainder" do
|
85
|
+
@remainder.take(5).should == Hamster.list(6, 7, 8, 9, 10)
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
it_should_behave_like "#span without a block"
|
91
|
+
|
92
|
+
it_should_behave_like "#span is lazy"
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
describe "on an interval" do
|
97
|
+
|
98
|
+
before do
|
99
|
+
@original = Hamster.interval(1, 10)
|
100
|
+
end
|
101
|
+
|
102
|
+
describe "with a block" do
|
103
|
+
|
104
|
+
before do
|
105
|
+
@result = @original.span { |item| item <= 5 }
|
106
|
+
@prefix = @result.car
|
107
|
+
@remainder = @result.cadr
|
108
|
+
end
|
109
|
+
|
110
|
+
it "returns a list with two items" do
|
111
|
+
@result.size.should == 2
|
112
|
+
end
|
113
|
+
|
114
|
+
it "correctly identifies the prefix" do
|
115
|
+
@prefix.should == Hamster.list(1, 2, 3, 4, 5)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "correctly identifies the remainder" do
|
119
|
+
@remainder.should == Hamster.list(6, 7, 8, 9, 10)
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
it_should_behave_like "#span without a block"
|
125
|
+
|
126
|
+
it_should_behave_like "#span is lazy"
|
127
|
+
|
128
|
+
end
|
129
|
+
|
130
|
+
[
|
131
|
+
[[], [], []],
|
132
|
+
[[1], [1], []],
|
133
|
+
[[1, 2], [1, 2], []],
|
134
|
+
[[1, 2, 3], [1, 2], [3]],
|
135
|
+
[[1, 2, 3, 4], [1, 2], [3, 4]],
|
136
|
+
[[2, 3, 4], [2], [3, 4]],
|
137
|
+
[[3, 4], [], [3, 4]],
|
138
|
+
[[4], [], [4]],
|
139
|
+
].each do |values, expected_prefix, expected_remainder|
|
140
|
+
|
141
|
+
describe "on #{values.inspect}" do
|
142
|
+
|
143
|
+
before do
|
144
|
+
@original = Hamster.list(*values)
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "with a block" do
|
148
|
+
|
149
|
+
before do
|
150
|
+
@result = @original.span { |item| item <= 2 }
|
151
|
+
@prefix = @result.car
|
152
|
+
@remainder = @result.cadr
|
153
|
+
end
|
154
|
+
|
155
|
+
it "preserves the original" do
|
156
|
+
@original.should == Hamster.list(*values)
|
157
|
+
end
|
158
|
+
|
159
|
+
it "returns a list with two items" do
|
160
|
+
@result.size.should == 2
|
161
|
+
end
|
162
|
+
|
163
|
+
it "correctly identifies the prefix" do
|
164
|
+
@prefix.should == Hamster.list(*expected_prefix)
|
165
|
+
end
|
166
|
+
|
167
|
+
it "correctly identifies the remainder" do
|
168
|
+
@remainder.should == Hamster.list(*expected_remainder)
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
|
173
|
+
it_should_behave_like "#span without a block"
|
174
|
+
|
175
|
+
it_should_behave_like "#span is lazy"
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
end
|
@@ -9,44 +9,58 @@ describe Hamster::List do
|
|
9
9
|
describe "doesn't run out of stack space on a really big" do
|
10
10
|
|
11
11
|
it "stream" do
|
12
|
-
@list = Hamster.interval(0,
|
12
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "list" do
|
16
|
-
@list = (0
|
16
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
17
17
|
end
|
18
18
|
|
19
19
|
after do
|
20
|
-
@list.split_at(
|
20
|
+
@list.split_at(STACK_OVERFLOW_DEPTH)
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
24
24
|
|
25
|
-
describe "on
|
25
|
+
describe "on a stream" do
|
26
26
|
|
27
27
|
before do
|
28
|
-
|
29
|
-
|
30
|
-
@
|
28
|
+
count = 0
|
29
|
+
counter = Hamster.stream { count += 1 }
|
30
|
+
@result = counter.split_at(5)
|
31
|
+
@prefix = @result.car
|
32
|
+
@remainder = @result.cadr
|
31
33
|
end
|
32
34
|
|
33
|
-
it "returns
|
34
|
-
@
|
35
|
+
it "returns a list with two items" do
|
36
|
+
@result.size.should == 2
|
35
37
|
end
|
36
38
|
|
37
|
-
it "
|
38
|
-
@
|
39
|
+
it "correctly identifies the prefix" do
|
40
|
+
@prefix.should == Hamster.list(1, 2, 3, 4, 5)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "correctly identifies the remainder" do
|
44
|
+
@remainder.take(5).should == Hamster.list(6, 7, 8, 9, 10)
|
39
45
|
end
|
40
46
|
|
41
47
|
end
|
42
48
|
|
43
|
-
describe "on
|
49
|
+
describe "on an interval" do
|
44
50
|
|
45
51
|
before do
|
46
|
-
|
47
|
-
|
48
|
-
@prefix =
|
49
|
-
@remainder =
|
52
|
+
@original = Hamster.interval(1, 10)
|
53
|
+
@result = @original.split_at(5)
|
54
|
+
@prefix = @result.car
|
55
|
+
@remainder = @result.cadr
|
56
|
+
end
|
57
|
+
|
58
|
+
it "preserves the original" do
|
59
|
+
@original.should == Hamster.interval(1, 10)
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns a list with two items" do
|
63
|
+
@result.size.should == 2
|
50
64
|
end
|
51
65
|
|
52
66
|
it "correctly identifies the prefix" do
|
@@ -54,7 +68,44 @@ describe Hamster::List do
|
|
54
68
|
end
|
55
69
|
|
56
70
|
it "correctly identifies the remainder" do
|
57
|
-
@remainder.should == Hamster.list(6, 7, 8, 9, 10
|
71
|
+
@remainder.should == Hamster.list(6, 7, 8, 9, 10)
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
[
|
77
|
+
[[], [], []],
|
78
|
+
[[1], [1], []],
|
79
|
+
[[1, 2], [1, 2], []],
|
80
|
+
[[1, 2, 3], [1, 2], [3]],
|
81
|
+
[[1, 2, 3, 4], [1, 2], [3, 4]],
|
82
|
+
].each do |values, expected_prefix, expected_remainder|
|
83
|
+
|
84
|
+
describe "on #{values.inspect}" do
|
85
|
+
|
86
|
+
before do
|
87
|
+
@original = Hamster.list(*values)
|
88
|
+
@result = @original.split_at(2)
|
89
|
+
@prefix = @result.car
|
90
|
+
@remainder = @result.cadr
|
91
|
+
end
|
92
|
+
|
93
|
+
it "preserves the original" do
|
94
|
+
@original.should == Hamster.list(*values)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "returns a list with two items" do
|
98
|
+
@result.size.should == 2
|
99
|
+
end
|
100
|
+
|
101
|
+
it "correctly identifies the matches" do
|
102
|
+
@prefix.should == Hamster.list(*expected_prefix)
|
103
|
+
end
|
104
|
+
|
105
|
+
it "correctly identifies the remainder" do
|
106
|
+
@remainder.should == Hamster.list(*expected_remainder)
|
107
|
+
end
|
108
|
+
|
58
109
|
end
|
59
110
|
|
60
111
|
end
|
@@ -15,11 +15,11 @@ describe Hamster::List do
|
|
15
15
|
describe "on #{values.inspect}" do
|
16
16
|
|
17
17
|
before do
|
18
|
-
@
|
18
|
+
@result = Hamster.list(*values).tail
|
19
19
|
end
|
20
20
|
|
21
21
|
it "returns #{expected.inspect}" do
|
22
|
-
@
|
22
|
+
@result.should == Hamster.list(*expected)
|
23
23
|
end
|
24
24
|
|
25
25
|
end
|
@@ -9,15 +9,15 @@ describe Hamster::List do
|
|
9
9
|
describe "doesn't run out of stack space on a really big" do
|
10
10
|
|
11
11
|
it "stream" do
|
12
|
-
@list = Hamster.interval(0,
|
12
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "list" do
|
16
|
-
@list = (0
|
16
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
17
17
|
end
|
18
18
|
|
19
19
|
after do
|
20
|
-
@list.take(
|
20
|
+
@list.take(STACK_OVERFLOW_DEPTH)
|
21
21
|
end
|
22
22
|
|
23
23
|
end
|
@@ -33,11 +33,16 @@ describe Hamster::List do
|
|
33
33
|
describe "#{number} from #{values.inspect}" do
|
34
34
|
|
35
35
|
before do
|
36
|
-
@
|
36
|
+
@original = Hamster.list(*values)
|
37
|
+
@result = @original.take(number)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "preserves the original" do
|
41
|
+
@original.should == Hamster.list(*values)
|
37
42
|
end
|
38
43
|
|
39
44
|
it "returns #{expected.inspect}" do
|
40
|
-
@
|
45
|
+
@result.should == Hamster.list(*expected)
|
41
46
|
end
|
42
47
|
|
43
48
|
end
|
@@ -9,11 +9,11 @@ describe Hamster::List do
|
|
9
9
|
describe "doesn't run out of stack space on a really big" do
|
10
10
|
|
11
11
|
it "stream" do
|
12
|
-
@list = Hamster.interval(0,
|
12
|
+
@list = Hamster.interval(0, STACK_OVERFLOW_DEPTH)
|
13
13
|
end
|
14
14
|
|
15
15
|
it "list" do
|
16
|
-
@list = (0
|
16
|
+
@list = (0...STACK_OVERFLOW_DEPTH).reduce(Hamster.list) { |list, i| list.cons(i) }
|
17
17
|
end
|
18
18
|
|
19
19
|
after do
|
@@ -31,18 +31,23 @@ describe Hamster::List do
|
|
31
31
|
describe "on #{values.inspect}" do
|
32
32
|
|
33
33
|
before do
|
34
|
-
@
|
34
|
+
@original = Hamster.list(*values)
|
35
|
+
@result = @original.take_while { |item| item < "C" }
|
35
36
|
end
|
36
37
|
|
37
38
|
describe "with a block" do
|
38
39
|
|
39
40
|
it "returns #{expected.inspect}" do
|
40
|
-
@
|
41
|
+
@result.should == Hamster.list(*expected)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "preserves the original" do
|
45
|
+
@original.should == Hamster.list(*values)
|
41
46
|
end
|
42
47
|
|
43
48
|
it "is lazy" do
|
44
49
|
count = 0
|
45
|
-
@
|
50
|
+
@original.take_while { |item| count += 1; true }
|
46
51
|
count.should <= 1
|
47
52
|
end
|
48
53
|
|
@@ -50,8 +55,12 @@ describe Hamster::List do
|
|
50
55
|
|
51
56
|
describe "without a block" do
|
52
57
|
|
58
|
+
before do
|
59
|
+
@result = @original.take_while
|
60
|
+
end
|
61
|
+
|
53
62
|
it "returns self" do
|
54
|
-
@
|
63
|
+
@result.should equal(@original)
|
55
64
|
end
|
56
65
|
|
57
66
|
end
|