prelude 0.0.2 → 0.0.3

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.
@@ -23,29 +23,106 @@
23
23
 
24
24
  module Prelude
25
25
 
26
- # $Id: monad.rb 7 2006-09-06 17:03:26Z prelude $
26
+ # $Id: monad.rb 13 2006-09-11 05:19:16Z prelude $
27
27
  #
28
- # The Monad is an Array only in an implementation sence of the word
29
- class Monad < Array
28
+ module Monad
29
+ State = {}
30
30
 
31
- def wrap(v)
32
- [v]
31
+ def wrap
32
+ State[object_id] = self
33
+ self
34
+ end
35
+
36
+ def unwrap
37
+ State[object_id]
33
38
  end
34
39
 
35
40
  def empty
36
- []
41
+ State[object_id] = nil
42
+ self
37
43
  end
38
44
 
39
- def join
45
+ def Monad.join(arr)
40
46
  r = []
41
- each {|a| r.push *a}
47
+ arr.each {|a| r.push *a}
42
48
  r
43
49
  end
44
50
 
45
- def bind(&block)
46
- map(&block).join
47
- end
51
+ def bind(f=nil)
52
+ case
53
+ when f.kind_of?(Symbol) || f.kind_of?(Method) || f.kind_of?(Proc) :
54
+ State[object_id] = f.to_proc.call(State[object_id])
55
+ self
56
+
57
+ # when f.kind_of?(Proc) :
58
+ # State[object_id] = f.call(State[object_id])
59
+ # self
60
+
61
+ else
62
+ f
63
+ end # case
64
+ end # bind
65
+
66
+ alias << bind
48
67
 
49
68
  end # Monad
50
69
 
70
+ # class Maybe < Monad
71
+
72
+ # # maybe -- :: b -> (a -> b) -> Maybe a -> b
73
+ # def maybe
74
+ # warn "Method 'maybe' is not implemented yet." if $VERBOSE
75
+ # return []
76
+ # end
77
+
78
+ # # isJust -- :: Maybe a -> Bool
79
+ # def isJust
80
+ # warn "Method 'isJust' is not implemented yet." if $VERBOSE
81
+ # return []
82
+ # end
83
+
84
+ # # isNothing -- :: Maybe a -> Bool
85
+ # def isNothing
86
+ # warn "Method 'isNothing' is not implemented yet." if $VERBOSE
87
+ # return []
88
+ # end
89
+
90
+ # # fromJust -- :: Maybe a -> a
91
+ # def fromJust
92
+ # warn "Method 'fromJust' is not implemented yet." if $VERBOSE
93
+ # return []
94
+ # end
95
+
96
+ # # fromMaybe -- :: a -> Maybe a -> a
97
+ # def fromMaybe
98
+ # warn "Method 'fromMaybe' is not implemented yet." if $VERBOSE
99
+ # return []
100
+ # end
101
+
102
+ # # listToMaybe -- :: [a] -> Maybe a
103
+ # def listToMaybe
104
+ # warn "Method 'listToMaybe' is not implemented yet." if $VERBOSE
105
+ # return []
106
+ # end
107
+
108
+ # # maybeToList -- :: Maybe a -> [a]
109
+ # def maybeToList
110
+ # warn "Method 'maybeToList' is not implemented yet." if $VERBOSE
111
+ # return []
112
+ # end
113
+
114
+ # # catMaybes -- :: [Maybe a] -> [a]
115
+ # def catMaybes
116
+ # warn "Method 'catMaybes' is not implemented yet." if $VERBOSE
117
+ # return []
118
+ # end
119
+
120
+ # # mapMaybe -- :: (a -> Maybe b) -> [a] -> [b]
121
+ # def mapMaybe
122
+ # warn "Method 'mapMaybe' is not implemented yet." if $VERBOSE
123
+ # return []
124
+ # end
125
+
126
+ # end # Maybe
127
+
51
128
  end # Prelude
@@ -1,5 +1,5 @@
1
1
  #--
2
- # $Id: tc_higher.rb 7 2006-09-06 17:03:26Z prelude $
2
+ # $Id: tc_higher.rb 17 2006-09-17 18:03:15Z prelude $
3
3
  #
4
4
  #
5
5
  # This file is part of the Prelude library that provides tools to
@@ -65,22 +65,22 @@ class TestHigher < Test::Unit::TestCase
65
65
  assert_equal(expect, result)
66
66
  end
67
67
 
68
- def test_stream
68
+ def test_composition
69
69
  add5 = proc {|x| x+5}
70
70
  add6 = proc {|x,y| x+y+6}
71
- add11 = add5 << add6
71
+ add11 = add5 ** add6
72
72
 
73
73
  result = add11[1, 2]
74
74
  expect = 14
75
75
 
76
76
  assert_equal(expect, result)
77
77
 
78
- result = add5 << 1
78
+ result = add5 ** 1
79
79
  expect = 6
80
80
 
81
81
  assert_equal(expect, result)
82
82
 
83
- result = add5 << add6 << [1, 2]
83
+ result = add5 ** add6 ** [1, 2]
84
84
  expect = 14
85
85
 
86
86
  assert_equal(expect, result)
@@ -1,5 +1,5 @@
1
1
  #--
2
- # $Id: tc_list.rb 7 2006-09-06 17:03:26Z prelude $
2
+ # $Id: tc_list.rb 17 2006-09-17 18:03:15Z prelude $
3
3
  #
4
4
  #
5
5
  # This file is part of the Prelude library that provides tools to
@@ -26,12 +26,16 @@
26
26
 
27
27
  class TestList < Test::Unit::TestCase
28
28
 
29
+ include List
30
+
31
+ NOT_IMPLEMENTED_YET = []
32
+
29
33
  def setup
30
34
 
31
- @a = List.new([1, 2, 3, 4, 5])
32
- @true_list = List.new([true, true, true])
33
- @false_list = List.new([false, false, false])
34
- @mixed_list = List.new([false, true, false])
35
+ @a = [1, 2, 3, 4, 5]
36
+ @true_list = [true, true, true]
37
+ @false_list = [false, false, false]
38
+ @mixed_list = [false, true, false]
35
39
 
36
40
  end # setup
37
41
 
@@ -39,114 +43,90 @@ class TestList < Test::Unit::TestCase
39
43
  # Nothing
40
44
  end # teardown
41
45
 
46
+ # head -- :: [a] -> a
42
47
  def test_head
43
- result = @a.head
48
+ result = ~head(@a)
44
49
  expect = 1
45
-
46
- assert_equal(expect, result)
47
- end
48
-
49
- # Compatibility with the Array class
50
- def test_array_plus
51
- b = [6, 7]
52
-
53
- result = @a+b
54
- expect = [1, 2, 3, 4, 5, 6, 7]
55
-
56
- assert_instance_of(List, result)
57
- assert_equal(expect, result)
58
- end
59
-
60
- def test_array_assignment
61
- @a[1] = 10
62
- result = @a
63
- expect = [1, 10, 3, 4, 5]
64
50
 
65
- assert_instance_of(List, result)
66
51
  assert_equal(expect, result)
67
- end
68
-
69
- def test_array_shift
70
- result = @a << 100 << 101
71
- expect = [1, 2, 3, 4, 5, 100, 101]
72
52
 
73
- assert_instance_of(List, result)
74
- assert_equal(expect, result)
53
+ assert_raise(EmptyListError) { ~head([]) }
75
54
  end
76
-
77
- # , last -- :: [a] -> a
55
+
56
+ # last -- :: [a] -> a
78
57
  def test_last
79
- result = @a.last
58
+ result = ~last(@a)
80
59
  expect = 5
81
60
 
82
61
  assert_equal(expect, result)
62
+
63
+ assert_raise(EmptyListError) { last [] }
83
64
  end
84
65
 
85
- # , tail -- :: [a] -> [a]
66
+ # tail -- :: [a] -> [a]
86
67
  def test_tail
87
- result = @a.tail
68
+ result = ~tail(@a)
88
69
  expect = [2, 3, 4, 5]
89
70
 
90
71
  assert_equal(expect, result)
72
+
73
+ assert_raise(EmptyListError) { ~tail([]) }
91
74
  end
92
75
 
93
- # , init -- :: [a] -> [a]
76
+ # init -- :: [a] -> [a]
94
77
  def test_init
95
- result = @a.init
78
+ result = ~init(@a)
96
79
  expect = [1, 2, 3, 4]
97
80
 
98
81
  assert_equal(expect, result)
82
+
83
+ assert_equal( ~init([1]), [])
84
+ assert_raise(EmptyListError) { ~init([]) }
99
85
  end
100
86
 
101
- # , null -- :: [a] -> Bool
87
+ # null -- :: [a] -> Bool
102
88
  def test_null
103
- result = @a.null
89
+ result = ~null(@a)
104
90
  expect = false
105
91
 
106
92
  assert_equal(expect, result)
107
93
  end
108
94
 
109
- # , length -- :: [a] -> Int
95
+ # length -- :: [a] -> Int
110
96
  def test_length
111
- result = @a.length
97
+ result = ~length(@a)
112
98
  expect = 5
113
99
 
114
100
  assert_equal(expect, result)
115
101
  end
116
102
 
117
- # , map -- :: (a -> b) -> [a] -> [b]
103
+ # map -- :: (a -> b) -> [a] -> [b]
118
104
  def test_map
119
- result = @a.map{|x| x+1}
120
- expect = [2, 3, 4, 5, 6]
121
-
122
- assert_equal(expect, result)
123
-
124
- p = proc {|x| x+1}
125
- result = @a.map(&p)
126
105
  expect = [2, 3, 4, 5, 6]
127
106
 
107
+ result = ~map(proc {|x| x+1}, @a)
128
108
  assert_equal(expect, result)
129
109
  end
130
110
 
131
- # , reverse -- :: [a] -> [a]
111
+ # reverse -- :: [a] -> [a]
132
112
  def test_reverse
133
- result = @a.reverse
113
+ result = ~reverse(@a)
134
114
  expect = [5, 4, 3, 2, 1]
135
115
 
136
116
  assert_equal(expect, result)
137
117
  end
138
118
 
139
- # , intersperse -- :: a -> [a] -> [a]
119
+ # intersperse -- :: a -> [a] -> [a]
140
120
  def test_intersperse
141
- result = @a.intersperse
142
- expect = []
121
+ result = ~intersperse(@a)
122
+ expect = NOT_IMPLEMENTED_YET
143
123
 
144
124
  assert_equal(expect, result)
145
125
  end
146
126
 
147
- # , transpose -- :: [[a]] -> [[a]]
127
+ # transpose -- :: [[a]] -> [[a]]
148
128
  def test_transpose
149
- result = List.new([@a, @a, @a]).transpose
129
+ result = ~transpose([@a, @a, @a])
150
130
  expect = [[1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 5] ]
151
131
 
152
132
  assert_equal(expect, result)
@@ -154,173 +134,178 @@ class TestList < Test::Unit::TestCase
154
134
 
155
135
  # -- * Reducing lists (folds)
156
136
 
157
- # , foldl -- :: (a -> b -> a) -> a -> [b] -> a
137
+ # foldl -- :: (a -> b -> a) -> a -> [b] -> a
158
138
 
159
- # Classic recursive functional definition causes stack overflow for
160
- # arrays of any usable size... So don't use it, it's here for completeness
161
- def test_f_foldl
162
- result = @a.f_foldl(0){ |x, y| x+y}
139
+ def test_foldl
163
140
  expect = 15
164
141
 
142
+ result = ~foldl(proc{ |x, y| x+y}, 0, @a )
165
143
  assert_equal(expect, result)
166
- end
167
-
168
- # This is a more pedestrian iterative version.
169
- def test_foldl
170
- result = @a.foldl(0){ |x, y| x+y}
171
- expect = 15
172
144
 
145
+ result = ~foldl(-:+, 0, @a )
173
146
  assert_equal(expect, result)
174
147
  end
175
148
 
176
- # , foldl' -- :: (a -> b -> a) -> a -> [b] -> a
149
+ # foldl' -- :: (a -> b -> a) -> a -> [b] -> a
177
150
  def test_foldl_
178
- result = @a.foldl_
179
- expect = []
151
+ result = ~foldl_(@a)
152
+ expect = NOT_IMPLEMENTED_YET
180
153
 
181
154
  assert_equal(expect, result)
182
155
  end
183
156
 
184
- # , foldl1 -- :: (a -> a -> a) -> [a] -> a
157
+ # foldl1 -- :: (a -> a -> a) -> [a] -> a
185
158
  def test_foldl1
186
- result = @a.foldl1{ |x, y| x*y}
187
- expect = 120
159
+ expect = 15
188
160
 
161
+ result = ~foldl1( proc{ |x, y| x+y}, @a )
162
+ assert_equal(expect, result)
163
+
164
+ result = ~foldl1(-:+, @a )
189
165
  assert_equal(expect, result)
190
166
  end
191
167
 
192
- # , foldl1' -- :: (a -> a -> a) -> [a] -> a
168
+ # foldl1' -- :: (a -> a -> a) -> [a] -> a
193
169
  def test_foldl1_
194
- result = @a.foldl1_
195
- expect = []
170
+ result = ~foldl1_(@a)
171
+ expect = NOT_IMPLEMENTED_YET
196
172
 
197
173
  assert_equal(expect, result)
198
174
  end
199
175
 
200
- # , foldr -- :: (a -> b -> b) -> b -> [a] -> b
176
+ # foldr -- :: (a -> b -> b) -> b -> [a] -> b
201
177
  def test_foldr
202
- result = @a.foldr(0){ |x, y| x+y}
203
178
  expect = 15
204
179
 
180
+ result = ~foldr(proc{ |x, y| x+y}, 0, @a)
181
+ assert_equal(expect, result)
182
+
183
+ result = ~foldr(-:+, 0, @a )
205
184
  assert_equal(expect, result)
206
185
  end
207
186
 
208
- # , foldr1 -- :: (a -> a -> a) -> [a] -> a
187
+ # foldr1 -- :: (a -> a -> a) -> [a] -> a
209
188
  def test_foldr1
210
- result = @a.foldr1{ |x, y| x*y}
211
- expect = 120
189
+ expect = 15
212
190
 
191
+ result = ~foldr1(proc{ |x, y| x+y}, @a)
192
+ assert_equal(expect, result)
193
+
194
+ result = ~foldr1(-:+, @a)
213
195
  assert_equal(expect, result)
214
196
  end
215
197
 
216
198
  # -- ** Special folds
217
199
 
218
- # , concat -- :: [[a]] -> [a]
200
+ # concat -- :: [[a]] -> [a]
219
201
  def test_concat
220
- result = List.new([@a, [@a]]).concat
221
- expect = @a+@a
202
+ result = ~concat( [[1, 2, [1, 2]], [1, 2]] )
203
+ expect = [1, 2, [1, 2], 1, 2]
222
204
 
223
205
  assert_equal(expect, result)
224
206
  end
225
207
 
226
- # , concatMap -- :: (a -> [b]) -> [a] -> [b]
208
+ # concatMap -- :: (a -> [b]) -> [a] -> [b]
227
209
  def test_concatMap
228
- result = @a.concatMap
229
- expect = []
210
+ result = ~concatMap(@a)
211
+ expect = NOT_IMPLEMENTED_YET
230
212
 
231
213
  assert_equal(expect, result)
232
214
  end
233
215
 
234
- # , and -- :: [Bool] -> Bool
216
+ # and -- :: [Bool] -> Bool
235
217
  def test_and
236
- result = @true_list.and
218
+ result = ~and_(@true_list)
237
219
  expect = true
238
220
 
239
221
  assert_equal(expect, result)
240
222
 
241
- result = @mixed_list.and
223
+ result = ~and_(@mixed_list)
242
224
  expect = false
243
225
 
244
226
  assert_equal(expect, result)
245
227
 
246
- result = @false_list.and
228
+ result = ~and_(@false_list)
247
229
  expect = false
248
230
 
249
231
  assert_equal(expect, result)
250
232
  end
251
233
 
252
- # , or -- :: [Bool] -> Bool
234
+ # or -- :: [Bool] -> Bool
253
235
  def test_or
254
- result = @true_list.or
236
+ result = ~or_(@true_list)
255
237
  expect = true
256
238
 
257
239
  assert_equal(expect, result)
258
240
 
259
- result = @mixed_list.or
241
+ result = ~or_(@mixed_list)
260
242
  expect = true
261
243
 
262
244
  assert_equal(expect, result)
263
245
 
264
- result = @false_list.or
246
+ result = ~or_(@false_list)
265
247
  expect = false
266
248
 
267
249
  assert_equal(expect, result)
268
250
  end
269
251
 
270
- # , any -- :: (a -> Bool) -> [a] -> Bool
252
+ # any -- :: (a -> Bool) -> [a] -> Bool
271
253
  def test_any
272
- result = @a.any{|x| x>5}
254
+ f1 = proc {|x| x>5}
255
+ f2 = proc {|x| x<5}
256
+
257
+ result = ~any(f1, @a)
273
258
  expect = false
274
259
 
275
260
  assert_equal(expect, result)
276
261
 
277
- result = @a.any{|x| x<5}
262
+ result = ~any(f2, @a)
278
263
  expect = true
279
264
 
280
265
  assert_equal(expect, result)
281
266
  end
282
267
 
283
- # , all -- :: (a -> Bool) -> [a] -> Bool
268
+ # all -- :: (a -> Bool) -> [a] -> Bool
284
269
  def test_all
285
- result = @a.all{|x| x>3}
270
+ result = ~all(proc {|x| x>3}, @a)
286
271
  expect = false
287
272
 
288
273
  assert_equal(expect, result)
289
274
 
290
- result = @a.all{|x| x>0}
275
+ result = ~all(proc {|x| x>0}, @a)
291
276
  expect = true
292
277
 
293
278
  assert_equal(expect, result)
294
279
  end
295
280
 
296
- # , sum -- :: (Num a) => [a] -> a
281
+ # sum -- :: (Num a) => [a] -> a
297
282
  def test_sum
298
- result = @a.sum
299
- expect = []
283
+ result = ~sum(@a)
284
+ expect = NOT_IMPLEMENTED_YET
300
285
 
301
286
  assert_equal(expect, result)
302
287
  end
303
288
 
304
- # , product -- :: (Num a) => [a] -> a
289
+ # product -- :: (Num a) => [a] -> a
305
290
  def test_product
306
- result = @a.product
307
- expect = []
291
+ result = ~product(@a)
292
+ expect = NOT_IMPLEMENTED_YET
308
293
 
309
294
  assert_equal(expect, result)
310
295
  end
311
296
 
312
- # , maximum -- :: (Ord a) => [a] -> a
297
+ # maximum -- :: (Ord a) => [a] -> a
313
298
  def test_maximum
314
- result = @a.maximum
315
- expect = []
299
+ result = ~maximum(@a)
300
+ expect = NOT_IMPLEMENTED_YET
316
301
 
317
302
  assert_equal(expect, result)
318
303
  end
319
304
 
320
- # , minimum -- :: (Ord a) => [a] -> a
305
+ # minimum -- :: (Ord a) => [a] -> a
321
306
  def test_minimum
322
- result = @a.minimum
323
- expect = []
307
+ result = ~minimum(@a)
308
+ expect = NOT_IMPLEMENTED_YET
324
309
 
325
310
  assert_equal(expect, result)
326
311
  end
@@ -329,96 +314,96 @@ class TestList < Test::Unit::TestCase
329
314
  # -- * Building lists
330
315
 
331
316
  # -- ** Scans
332
- # , scanl -- :: (a -> b -> a) -> a -> [b] -> [a]
317
+ # scanl -- :: (a -> b -> a) -> a -> [b] -> [a]
333
318
  def test_scanl
334
- result = @a.scanl(0){ |x, y| x+y}
335
- expect = [0, 1, 3, 6, 10, 15]
319
+ result = ~scanl(lambda{ |x, y| x+y}, 0, @a)
320
+ expect = NOT_IMPLEMENTED_YET #[0, 1, 3, 6, 10, 15]
336
321
 
337
322
  assert_equal(expect, result)
338
323
  end
339
324
 
340
- # , scanl1 -- :: (a -> a -> a) -> [a] -> [a]
325
+ # scanl1 -- :: (a -> a -> a) -> [a] -> [a]
341
326
  def test_scanl1
342
- result = @a.scanl1{ |x, y| x+y}
343
- expect = [1, 3, 6, 10, 15]
327
+ result = ~scanl1( lambda { |x, y| x+y }, @a)
328
+ expect = NOT_IMPLEMENTED_YET #[1, 3, 6, 10, 15]
344
329
 
345
330
  assert_equal(expect, result)
346
331
  end
347
332
 
348
- # , scanr -- :: (a -> b -> b) -> b -> [a] -> [b]
333
+ # scanr -- :: (a -> b -> b) -> b -> [a] -> [b]
349
334
  def test_scanr
350
- result = @a.scanr(0){ |x, y| x+y}
351
- expect = [0, 1, 3, 6, 10, 15]
335
+ result = ~scanr(lambda { |x, y| x+y }, 0, @a)
336
+ expect = NOT_IMPLEMENTED_YET #[0, 1, 3, 6, 10, 15]
352
337
 
353
338
  assert_equal(expect, result)
354
339
  end
355
340
 
356
- # , scanr1 -- :: (a -> a -> a) -> [a] -> [a]
341
+ # scanr1 -- :: (a -> a -> a) -> [a] -> [a]
357
342
  def test_scanr1
358
- result = @a.scanr1{ |x, y| x+y}
359
- expect = [1, 3, 6, 10, 15]
343
+ result = ~scanr1(lambda { |x, y| x+y }, @a)
344
+ expect = NOT_IMPLEMENTED_YET #[1, 3, 6, 10, 15]
360
345
 
361
346
  assert_equal(expect, result)
362
347
  end
363
348
 
364
349
 
365
350
  # -- ** Accumulating maps
366
- # , mapAccumL -- :: (a -> b -> (a,c)) -> a -> [b] -> (a,[c])
351
+ # mapAccumL -- :: (a -> b -> (a,c)) -> a -> [b] -> (a,[c])
367
352
  def test_mapAccumL
368
- result = @a.mapAccumL
369
- expect = []
353
+ result = ~mapAccumL(@a)
354
+ expect = NOT_IMPLEMENTED_YET
370
355
 
371
356
  assert_equal(expect, result)
372
357
  end
373
358
 
374
- # , mapAccumR -- :: (a -> b -> (a,c)) -> a -> [b] -> (a,[c])
359
+ # mapAccumR -- :: (a -> b -> (a,c)) -> a -> [b] -> (a,[c])
375
360
  def test_mapAccumR
376
- result = @a.mapAccumR
377
- expect = []
361
+ result = ~mapAccumR(@a)
362
+ expect = NOT_IMPLEMENTED_YET
378
363
 
379
364
  assert_equal(expect, result)
380
365
  end
381
366
 
382
367
 
383
368
  # -- ** Infinite lists
384
- # , iterate -- :: (a -> a) -> a -> [a]
369
+ # iterate -- :: (a -> a) -> a -> [a]
385
370
  def test_iterate
386
- result = @a.iterate
387
- expect = []
371
+ result = ~iterate(@a)
372
+ expect = NOT_IMPLEMENTED_YET
388
373
 
389
374
  assert_equal(expect, result)
390
375
  end
391
376
 
392
- # , repeat -- :: a -> [a]
377
+ # repeat -- :: a -> [a]
393
378
  def test_repeat
394
- result = @a.repeat
395
- expect = []
379
+ result = ~repeat(@a)
380
+ expect = NOT_IMPLEMENTED_YET
396
381
 
397
382
  assert_equal(expect, result)
398
383
  end
399
384
 
400
- # , replicate -- :: Int -> a -> [a]
385
+ # replicate -- :: Int -> a -> [a]
401
386
  def test_replicate
402
- result = @a.replicate
403
- expect = []
387
+ result = ~replicate(@a)
388
+ expect = NOT_IMPLEMENTED_YET
404
389
 
405
390
  assert_equal(expect, result)
406
391
  end
407
392
 
408
- # , cycle -- :: [a] -> [a]
393
+ # cycle -- :: [a] -> [a]
409
394
  def test_cycle
410
- result = @a.cycle
411
- expect = []
395
+ result = ~cycle(@a)
396
+ expect = NOT_IMPLEMENTED_YET
412
397
 
413
398
  assert_equal(expect, result)
414
399
  end
415
400
 
416
401
 
417
402
  # -- ** Unfolding
418
- # , unfoldr -- :: (b -> Maybe (a, b)) -> b -> [a]
403
+ # unfoldr -- :: (b -> Maybe (a, b)) -> b -> [a]
419
404
  def test_unfoldr
420
- result = @a.unfoldr
421
- expect = []
405
+ result = ~unfoldr(@a)
406
+ expect = NOT_IMPLEMENTED_YET
422
407
 
423
408
  assert_equal(expect, result)
424
409
  end
@@ -427,99 +412,99 @@ class TestList < Test::Unit::TestCase
427
412
  # -- * Sublists
428
413
 
429
414
  # -- ** Extracting sublists
430
- # , take -- :: Int -> [a] -> [a]
415
+ # take -- :: Int -> [a] -> [a]
431
416
  def test_take
432
- result = @a.take(2)
417
+ result = ~take(2, @a)
433
418
  expect = [1, 2]
434
419
 
435
420
  assert_equal(expect, result)
436
421
  end
437
422
 
438
- # , drop -- :: Int -> [a] -> [a]
423
+ # drop -- :: Int -> [a] -> [a]
439
424
  def test_drop
440
- result = @a.drop(2)
425
+ result = ~drop(2, @a)
441
426
  expect = [3, 4, 5]
442
427
 
443
428
  assert_equal(expect, result)
444
429
  end
445
430
 
446
- # , splitAt -- :: Int -> [a] -> ([a], [a])
431
+ # splitAt -- :: Int -> [a] -> ([a], [a])
447
432
  def test_split_at
448
- result = @a.split_at(2)
433
+ result = ~split_at(2, @a)
449
434
  expect = [[1, 2],[3, 4, 5]]
450
435
 
451
436
  assert_equal(expect, result)
452
437
  end
453
438
 
454
- # , takeWhile -- :: (a -> Bool) -> [a] -> [a]
439
+ # takeWhile -- :: (a -> Bool) -> [a] -> [a]
455
440
  def test_takeWhile
456
- result = @a.takeWhile{|x| x<4}
441
+ result = ~takeWhile(lambda {|x| x<4}, @a)
457
442
  expect = [1, 2, 3]
458
443
 
459
444
  assert_equal(expect, result)
460
445
  end
461
446
 
462
- # , dropWhile -- :: (a -> Bool) -> [a] -> [a]
447
+ # dropWhile -- :: (a -> Bool) -> [a] -> [a]
463
448
  def test_dropWhile
464
- result = @a.dropWhile{|x| x<4}
449
+ result = ~dropWhile(lambda {|x| x<4}, @a)
465
450
  expect = [4, 5]
466
451
 
467
452
  assert_equal(expect, result)
468
453
  end
469
454
 
470
- # , span -- :: (a -> Bool) -> [a] -> ([a], [a])
455
+ # span -- :: (a -> Bool) -> [a] -> ([a], [a])
471
456
  def test_span
472
- result = @a.span{|x| x<3}
457
+ result = ~span(lambda {|x| x<3}, @a)
473
458
  expect = [[1, 2], [3, 4, 5]]
474
459
 
475
460
  assert_equal(expect, result)
476
461
  end
477
462
 
478
- # , break -- :: (a -> Bool) -> [a] -> ([a], [a])
479
- def test_break
480
- result = @a.break
481
- expect = []
463
+ # break -- :: (a -> Bool) -> [a] -> ([a], [a])
464
+ def test_break_
465
+ result = ~break_(@a)
466
+ expect = NOT_IMPLEMENTED_YET
482
467
 
483
468
  assert_equal(expect, result)
484
469
  end
485
470
 
486
- # , group -- :: Eq a => [a] -> [[a]]
471
+ # group -- :: Eq a => [a] -> [[a]]
487
472
  def test_group
488
- result = @a.group
489
- expect = []
473
+ result = ~group(@a)
474
+ expect = NOT_IMPLEMENTED_YET
490
475
 
491
476
  assert_equal(expect, result)
492
477
  end
493
478
 
494
- # , inits -- :: [a] -> [[a]]
479
+ # inits -- :: [a] -> [[a]]
495
480
  def test_inits
496
- result = @a.inits
497
- expect = []
481
+ result = ~inits(@a)
482
+ expect = NOT_IMPLEMENTED_YET
498
483
 
499
484
  assert_equal(expect, result)
500
485
  end
501
486
 
502
- # , tails -- :: [a] -> [[a]]
487
+ # tails -- :: [a] -> [[a]]
503
488
  def test_tails
504
- result = @a.tails
505
- expect = []
489
+ result = ~tails(@a)
490
+ expect = NOT_IMPLEMENTED_YET
506
491
 
507
492
  assert_equal(expect, result)
508
493
  end
509
494
 
510
495
  # -- ** Predicates
511
- # , isPrefixOf -- :: (Eq a) => [a] -> [a] -> Bool
496
+ # isPrefixOf -- :: (Eq a) => [a] -> [a] -> Bool
512
497
  def test_isPrefixOf
513
- result = @a.isPrefixOf
514
- expect = []
498
+ result = ~isPrefixOf(@a)
499
+ expect = NOT_IMPLEMENTED_YET
515
500
 
516
501
  assert_equal(expect, result)
517
502
  end
518
503
 
519
- # , isSuffixOf -- :: (Eq a) => [a] -> [a] -> Bool
504
+ # isSuffixOf -- :: (Eq a) => [a] -> [a] -> Bool
520
505
  def test_isSuffixOf
521
- result = @a.isSuffixOf
522
- expect = []
506
+ result = ~isSuffixOf(@a)
507
+ expect = NOT_IMPLEMENTED_YET
523
508
 
524
509
  assert_equal(expect, result)
525
510
  end
@@ -528,51 +513,51 @@ class TestList < Test::Unit::TestCase
528
513
  # -- * Searching lists
529
514
 
530
515
  # -- ** Searching by equality
531
- # , elem -- :: a -> [a] -> Bool
516
+ # elem -- :: a -> [a] -> Bool
532
517
  def test_elem
533
- result = @a.elem
534
- expect = []
518
+ result = ~elem(@a)
519
+ expect = NOT_IMPLEMENTED_YET
535
520
 
536
521
  assert_equal(expect, result)
537
522
  end
538
523
 
539
- # , notElem -- :: a -> [a] -> Bool
524
+ # notElem -- :: a -> [a] -> Bool
540
525
  def test_notElem
541
- result = @a.notElem
542
- expect = []
526
+ result = ~notElem(@a)
527
+ expect = NOT_IMPLEMENTED_YET
543
528
 
544
529
  assert_equal(expect, result)
545
530
  end
546
531
 
547
- # , lookup -- :: (Eq a) => a -> [(a,b)] -> Maybe b
532
+ # lookup -- :: (Eq a) => a -> [(a,b)] -> Maybe b
548
533
  def test_lookup
549
- result = @a.lookup
550
- expect = []
534
+ result = ~lookup(@a)
535
+ expect = NOT_IMPLEMENTED_YET
551
536
 
552
537
  assert_equal(expect, result)
553
538
  end
554
539
 
555
540
  # -- ** Searching with a predicate
556
- # , find -- :: (a -> Bool) -> [a] -> Maybe a
541
+ # find -- :: (a -> Bool) -> [a] -> Maybe a
557
542
  def test_find
558
- result = @a.find{|x| x==3}
559
- expect = 3
543
+ result = ~find(lambda {|x| x==3}, @a)
544
+ expect = NOT_IMPLEMENTED_YET
560
545
 
561
546
  assert_equal(expect, result)
562
547
  end
563
548
 
564
- # , filter -- :: (a -> Bool) -> [a] -> [a]
549
+ # filter -- :: (a -> Bool) -> [a] -> [a]
565
550
  def test_filter
566
- result = @a.filter
567
- expect = []
551
+ result = ~filter(@a)
552
+ expect = NOT_IMPLEMENTED_YET
568
553
 
569
554
  assert_equal(expect, result)
570
555
  end
571
556
 
572
- # , partition -- :: (a -> Bool) -> [a] -> ([a], [a])
557
+ # partition -- :: (a -> Bool) -> [a] -> ([a], [a])
573
558
  def test_partition
574
- result = @a.partition{|x| x>3}
575
- expect = [[4, 5], [1, 2, 3]]
559
+ result = ~partition(lambda {|x| x>3}, @a)
560
+ expect = NOT_IMPLEMENTED_YET
576
561
 
577
562
  assert_equal(expect, result)
578
563
  end
@@ -582,39 +567,39 @@ class TestList < Test::Unit::TestCase
582
567
  # -- | These functions treat a list @xs@ as a indexed collection,
583
568
  # -- with indices ranging from 0 to @'length' xs - 1@.
584
569
 
585
- # , (!!) -- :: [a] -> Int -> a
570
+ # (!!) -- :: [a] -> Int -> a
586
571
  # Don't know how to implement it in Ruby
587
572
 
588
573
 
589
- # , elemIndex -- :: (Eq a) => a -> [a] -> Maybe Int
574
+ # elemIndex -- :: (Eq a) => a -> [a] -> Maybe Int
590
575
  def test_elemIndex
591
- result = @a.elemIndex
592
- expect = []
576
+ result = ~elemIndex(@a)
577
+ expect = NOT_IMPLEMENTED_YET
593
578
 
594
579
  assert_equal(expect, result)
595
580
  end
596
581
 
597
- # , elemIndices -- :: (Eq a) => a -> [a] -> [Int]
582
+ # elemIndices -- :: (Eq a) => a -> [a] -> [Int]
598
583
  def test_elemIndices
599
- result = @a.elemIndices
600
- expect = []
584
+ result = ~elemIndices(@a)
585
+ expect = NOT_IMPLEMENTED_YET
601
586
 
602
587
  assert_equal(expect, result)
603
588
  end
604
589
 
605
590
 
606
- # , findIndex -- :: (a -> Bool) -> [a] -> Maybe Int
591
+ # findIndex -- :: (a -> Bool) -> [a] -> Maybe Int
607
592
  def test_findIndex
608
- result = @a.findIndex
609
- expect = []
593
+ result = ~findIndex(@a)
594
+ expect = NOT_IMPLEMENTED_YET
610
595
 
611
596
  assert_equal(expect, result)
612
597
  end
613
598
 
614
- # , findIndices -- :: (a -> Bool) -> [a] -> [Int]
599
+ # findIndices -- :: (a -> Bool) -> [a] -> [Int]
615
600
  def test_findIndices
616
- result = @a.findIndices
617
- expect = []
601
+ result = ~findIndices(@a)
602
+ expect = NOT_IMPLEMENTED_YET
618
603
 
619
604
  assert_equal(expect, result)
620
605
  end
@@ -622,76 +607,76 @@ class TestList < Test::Unit::TestCase
622
607
 
623
608
  # -- * Zipping and unzipping lists
624
609
 
625
- # , zip -- :: [a] -> [b] -> [(a,b)]
610
+ # zip -- :: [a] -> [b] -> [(a,b)]
626
611
  def test_zip
627
- result = @a.zip(@a)
628
- expect = [[1, 1], [2, 2], [3, 3], [4, 4], [5, 5] ]
612
+ result = ~zip(@a, @a)
613
+ expect = NOT_IMPLEMENTED_YET #[[1, 1], [2, 2], [3, 3], [4, 4], [5, 5] ]
629
614
 
630
615
  assert_equal(expect, result)
631
616
  end
632
617
 
633
- # , zip3
618
+ # zip3
634
619
  def test_zip3
635
- result = @a.zip3
636
- expect = []
620
+ result = ~zip3(@a)
621
+ expect = NOT_IMPLEMENTED_YET
637
622
 
638
623
  assert_equal(expect, result)
639
624
  end
640
625
 
641
- # , zip4, zip5, zip6, zip7
626
+ # zip4, zip5, zip6, zip7
642
627
  def test_zip4
643
- result = @a.zip4
644
- expect = []
628
+ result = ~zip4(@a)
629
+ expect = NOT_IMPLEMENTED_YET
645
630
 
646
631
  assert_equal(expect, result)
647
632
  end
648
633
 
649
634
 
650
- # , zipWith -- :: (a -> b -> c) -> [a] -> [b] -> [c]
635
+ # zipWith -- :: (a -> b -> c) -> [a] -> [b] -> [c]
651
636
  def test_zipWith
652
- result = @a.zipWith
653
- expect = []
637
+ result = ~zipWith(@a)
638
+ expect = NOT_IMPLEMENTED_YET
654
639
 
655
640
  assert_equal(expect, result)
656
641
  end
657
642
 
658
- # , zipWith3
643
+ # zipWith3
659
644
  def test_zipWith3
660
- result = @a.zipWith3
661
- expect = []
645
+ result = ~zipWith3(@a)
646
+ expect = NOT_IMPLEMENTED_YET
662
647
 
663
648
  assert_equal(expect, result)
664
649
  end
665
650
 
666
- # , zipWith4, zipWith5, zipWith6, zipWith7
651
+ # zipWith4, zipWith5, zipWith6, zipWith7
667
652
  def test_zipWith4
668
- result = @a.zipWith4
669
- expect = []
653
+ result = ~zipWith4(@a)
654
+ expect = NOT_IMPLEMENTED_YET
670
655
 
671
656
  assert_equal(expect, result)
672
657
  end
673
658
 
674
659
 
675
- # , unzip -- :: [(a,b)] -> ([a],[b])
660
+ # unzip -- :: [(a,b)] -> ([a],[b])
676
661
  def test_unzip
677
- result = @a.unzip
678
- expect = []
662
+ result = ~unzip(@a)
663
+ expect = NOT_IMPLEMENTED_YET
679
664
 
680
665
  assert_equal(expect, result)
681
666
  end
682
667
 
683
- # , unzip3
668
+ # unzip3
684
669
  def test_unzip3
685
- result = @a.unzip3
686
- expect = []
670
+ result = ~unzip3(@a)
671
+ expect = NOT_IMPLEMENTED_YET
687
672
 
688
673
  assert_equal(expect, result)
689
674
  end
690
675
 
691
- # , unzip4, unzip5, unzip6, unzip7
676
+ # unzip4, unzip5, unzip6, unzip7
692
677
  def test_unzip4
693
- result = @a.unzip4
694
- expect = []
678
+ result = ~unzip4(@a)
679
+ expect = NOT_IMPLEMENTED_YET
695
680
 
696
681
  assert_equal(expect, result)
697
682
  end
@@ -700,34 +685,34 @@ class TestList < Test::Unit::TestCase
700
685
  # -- * Special lists
701
686
 
702
687
  # -- ** Functions on strings
703
- # , lines -- :: String -> [String]
688
+ # lines -- :: String -> [String]
704
689
  def test_lines
705
- result = @a.lines
706
- expect = []
690
+ result = ~lines(@a)
691
+ expect = NOT_IMPLEMENTED_YET
707
692
 
708
693
  assert_equal(expect, result)
709
694
  end
710
695
 
711
- # , words -- :: String -> [String]
696
+ # words -- :: String -> [String]
712
697
  def test_words
713
- result = @a.words
714
- expect = []
698
+ result = ~words(@a)
699
+ expect = NOT_IMPLEMENTED_YET
715
700
 
716
701
  assert_equal(expect, result)
717
702
  end
718
703
 
719
- # , unlines -- :: [String] -> String
704
+ # unlines -- :: [String] -> String
720
705
  def test_unlines
721
- result = @a.unlines
722
- expect = []
706
+ result = ~unlines(@a)
707
+ expect = NOT_IMPLEMENTED_YET
723
708
 
724
709
  assert_equal(expect, result)
725
710
  end
726
711
 
727
- # , unwords -- :: [String] -> String
712
+ # unwords -- :: [String] -> String
728
713
  def test_unwords
729
- result = @a.unwords
730
- expect = []
714
+ result = ~unwords(@a)
715
+ expect = NOT_IMPLEMENTED_YET
731
716
 
732
717
  assert_equal(expect, result)
733
718
  end
@@ -735,52 +720,58 @@ class TestList < Test::Unit::TestCase
735
720
 
736
721
  # -- ** \"Set\" operations
737
722
 
738
- # , nub -- :: (Eq a) => [a] -> [a]
723
+ # nub -- :: (Eq a) => [a] -> [a]
739
724
  def test_nub
740
- result = @a.nub
741
- expect = []
725
+ result = ~nub(@a)
726
+ expect = NOT_IMPLEMENTED_YET
742
727
 
743
728
  assert_equal(expect, result)
744
729
  end
745
730
 
746
731
 
747
- # , delete -- :: (Eq a) => a -> [a] -> [a]
732
+ # delete -- :: (Eq a) => a -> [a] -> [a]
748
733
  def test_delete
749
- result = @a.delete(3)
750
- expect = []
734
+ result = ~delete(3, @a)
735
+ expect = NOT_IMPLEMENTED_YET
751
736
 
752
737
  assert_equal(expect, result)
753
738
  end
754
739
 
755
- # , (\\) -- :: (Eq a) => [a] -> [a] -> [a]
740
+ # (\\) -- :: (Eq a) => [a] -> [a] -> [a]
756
741
  # Don't know how to implement it in Ruby
757
742
 
758
- # , union -- :: (Eq a) => [a] -> [a] -> [a]
743
+ # union -- :: (Eq a) => [a] -> [a] -> [a]
759
744
  def test_union
760
- result = @a.union
761
- expect = []
745
+ result = ~union(@a)
746
+ expect = NOT_IMPLEMENTED_YET
762
747
 
763
748
  assert_equal(expect, result)
764
749
  end
765
750
 
766
- # , intersect -- :: (Eq a) => [a] -> [a] -> [a]
751
+ # intersect -- :: (Eq a) => [a] -> [a] -> [a]
767
752
  def test_intersect
768
- result = @a.intersect
769
- expect = []
753
+ result = ~intersect(@a)
754
+ expect = NOT_IMPLEMENTED_YET
770
755
 
771
756
  assert_equal(expect, result)
772
757
  end
773
758
 
774
759
 
775
760
  # -- ** Ordered lists
776
- # , sort -- :: (Ord a) => [a] -> [a]
777
761
 
778
- # , insert -- :: (Ord a) => a -> [a] -> [a]
779
- def test_insert
780
- result = @a.insert(3.5)
781
- expect = []
762
+ # sort -- :: (Ord a) => [a] -> [a]
763
+ def test_sort
764
+ result = ~sort(@a)
765
+ expect = NOT_IMPLEMENTED_YET
782
766
 
783
767
  assert_equal(expect, result)
784
768
  end
785
769
 
770
+ # insert -- :: (Ord a) => a -> [a] -> [a]
771
+ def test_insert
772
+ result = ~insert(3.5, @a)
773
+ expect = NOT_IMPLEMENTED_YET
774
+ assert_equal(expect, result)
775
+ end
776
+
786
777
  end # TestList