@@ -65,43 +65,18 @@ fn flat_map<A,B,IA:iterable<A>,IB:iterable<B>>(
65
65
}
66
66
}
67
67
68
- fn foldl < A , B , IA : iterable < A > > ( self : IA , + b0 : B , blk : fn ( - B , A ) -> B ) -> B {
69
- let b <- b0;
68
+ fn foldl < A , B : copy , IA : iterable < A > > ( self : IA , b0 : B , blk : fn ( B , A ) -> B ) -> B {
69
+ let b = b0;
70
70
self . iter { |a|
71
71
b = blk ( b, a) ;
72
72
}
73
73
ret b;
74
74
}
75
75
76
- fn foldr < A : copy , B , IA : iterable < A > > (
77
- self : IA , +b0 : B , blk : fn ( A , -B ) -> B ) -> B {
78
-
79
- let b < - b0;
80
- reverse ( self ) { |a|
81
- b = blk ( a, b) ;
82
- }
83
- ret b;
84
- }
85
-
86
76
fn to_list < A : copy , IA : iterable < A > > ( self : IA ) -> [ A ] {
87
77
foldl :: < A , [ A ] , IA > ( self , [ ] , { |r, a| r + [ a] } )
88
78
}
89
79
90
- // FIXME: This could be made more efficient with an riterable interface
91
- fn reverse < A : copy , IA : iterable < A > > ( self : IA , blk : fn ( A ) ) {
92
- vec:: riter ( to_list ( self ) , blk)
93
- }
94
-
95
- fn count < A , IA : iterable < A > > ( self : IA , x : A ) -> uint {
96
- foldl ( self , 0 u) { |count, value|
97
- if value == x {
98
- count + 1 u
99
- } else {
100
- count
101
- }
102
- }
103
- }
104
-
105
80
fn repeat ( times : uint , blk : fn ( ) ) {
106
81
let i = 0 u;
107
82
while i < times {
@@ -110,35 +85,6 @@ fn repeat(times: uint, blk: fn()) {
110
85
}
111
86
}
112
87
113
- fn min < A : copy , IA : iterable < A > > ( self : IA ) -> A {
114
- alt foldl :: < A , option < A > , IA > ( self , none) { |a, b|
115
- alt a {
116
- some( a_) if a_ < b {
117
- // FIXME: Not sure if this is successfully optimized to a move
118
- a
119
- }
120
- _ { some ( b) }
121
- }
122
- } {
123
- some ( val) { val }
124
- none { fail "min called on empty iterator" }
125
- }
126
- }
127
-
128
- fn max<A : copy , IA : iterable < A > > ( self : IA ) -> A {
129
- alt foldl:: <A , option< A > , IA >( self , none) { |a, b|
130
- alt a {
131
- some( a_) if a_ > b {
132
- // FIXME: Not sure if this is successfully optimized to a move
133
- a
134
- }
135
- _ { some( b) }
136
- }
137
- } {
138
- some( val) { val }
139
- none { fail "max called on empty iterator" }
140
- }
141
- }
142
88
143
89
#[ test]
144
90
fn test_enumerate ( ) {
@@ -222,45 +168,4 @@ fn test_repeat() {
222
168
assert c == [ 0 u, 1 u, 4 u, 9 u, 16 u] ;
223
169
}
224
170
225
- #[ test]
226
- fn test_min ( ) {
227
- assert min( [ 5 , 4 , 1 , 2 , 3 ] ) == 1 ;
228
- }
229
-
230
- #[ test]
231
- #[ should_fail]
232
- #[ ignore( cfg( target_os = "win32" ) ) ]
233
- fn test_min_empty ( ) {
234
- min :: < int , [ int ] > ( [ ] ) ;
235
- }
236
-
237
- #[ test]
238
- fn test_max ( ) {
239
- assert max( [ 1 , 2 , 4 , 2 , 3 ] ) == 4 ;
240
- }
241
-
242
- #[ test]
243
- #[ should_fail]
244
- #[ ignore( cfg( target_os = "win32" ) ) ]
245
- fn test_max_empty ( ) {
246
- max :: < int , [ int ] > ( [ ] ) ;
247
- }
248
171
249
- #[ test]
250
- fn test_reverse ( ) {
251
- assert to_list ( bind reverse ( [ 1 , 2 , 3 ] , _) ) == [ 3 , 2 , 1 ] ;
252
- }
253
-
254
- #[ test]
255
- fn test_count ( ) {
256
- assert count( [ 1 , 2 , 1 , 2 , 1 ] , 1 ) == 3 u;
257
- }
258
-
259
- #[ test]
260
- fn test_foldr ( ) {
261
- fn sub ( & & a: int , -b : int ) -> int {
262
- a - b
263
- }
264
- let sum = foldr ( [ 1 , 2 , 3 , 4 ] , 0 , sub) ;
265
- assert sum == -2 ;
266
- }
0 commit comments