facets 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/AUTHORS +3 -3
- data/README +6 -7
- data/lib/core/facets.rb +1 -46
- data/lib/core/facets/array.rb +3 -0
- data/lib/core/facets/array/indexable.rb +6 -1
- data/lib/core/facets/array/only.rb +20 -0
- data/lib/core/facets/dir/multiglob.rb +12 -1
- data/lib/core/facets/enumerable.rb +0 -1
- data/lib/core/facets/enumerable/collect.rb +1 -0
- data/lib/core/facets/enumerable/combination.rb +44 -90
- data/lib/core/facets/facets.rb +46 -0
- data/lib/core/facets/file/write.rb +46 -58
- data/lib/core/facets/hash.rb +2 -0
- data/lib/core/facets/hash/select.rb +14 -0
- data/lib/core/facets/integer/multiples.rb +12 -55
- data/lib/core/facets/kernel/val.rb +14 -0
- data/lib/core/facets/module/alias.rb +28 -9
- data/lib/core/facets/module/methods.rb +18 -0
- data/lib/core/facets/module/traits.rb +65 -70
- data/lib/core/facets/proc/compose.rb +15 -12
- data/lib/core/facets/stackable.rb +3 -2
- data/lib/core/facets/string/format.rb +4 -6
- data/lib/core/facets/string/tabs.rb +34 -0
- data/lib/core/facets/symbol.rb +1 -0
- data/lib/core/facets/symbol/succ.rb +1 -42
- data/lib/core/facets/symbol/to_proc.rb +34 -0
- data/lib/methods/facets/array/contains.rb +1 -0
- data/lib/methods/facets/facets/require_core.rb +1 -0
- data/lib/methods/facets/file/writelines.rb +1 -0
- data/lib/methods/facets/io/writelines.rb +1 -0
- data/lib/methods/facets/kernel/not_nil.rb +1 -0
- data/lib/methods/facets/module/conflict.rb +1 -0
- data/lib/methods/facets/module/instance_method_defined.rb +1 -0
- data/lib/methods/facets/module/module_method_defined.rb +1 -0
- data/lib/methods/facets/module/private_conflict.rb +1 -0
- data/lib/methods/facets/module/protected_conflict.rb +1 -0
- data/lib/methods/facets/module/public_conflict.rb +1 -0
- data/lib/methods/facets/string/expand_tabs.rb +1 -0
- data/lib/methods/facets/string/outdent.rb +1 -0
- data/lib/methods/facets/string/taballto.rb +1 -0
- data/lib/more/facets/arguments.rb +1 -1
- data/lib/more/facets/association.rb +0 -46
- data/lib/more/facets/autoarray.rb +0 -28
- data/lib/more/facets/command.rb +341 -8
- data/lib/more/facets/dictionary.rb +25 -131
- data/lib/more/facets/downloader.rb +1 -1
- data/lib/more/facets/infinity.rb +3 -3
- data/lib/more/facets/interval.rb +0 -161
- data/lib/more/facets/multiton.rb +16 -12
- data/lib/more/facets/namespace.rb +1 -1
- data/lib/more/facets/ostruct.rb +46 -10
- data/lib/more/facets/overload.rb +0 -51
- data/lib/more/facets/paramix.rb +0 -97
- data/lib/more/facets/pp_s.rb +30 -0
- data/lib/more/facets/progressbar.rb +18 -10
- data/lib/more/facets/prototype.rb +1 -40
- data/lib/more/facets/random.rb +1 -0
- data/lib/more/facets/rbsystem.rb +4 -1
- data/lib/more/facets/snapshot.rb +8 -1
- data/lib/more/facets/stylize.rb +2 -0
- data/meta/{project.yaml → facets-2.0.3.roll} +22 -14
- data/meta/manifest.txt +38 -8
- data/task/{config.yaml → config/general.yaml} +7 -2
- data/task/{rdoc.yaml → config/rdoc.yaml} +1 -1
- data/task/crosstest +309 -0
- data/task/isotest +293 -0
- data/task/loadtest +28 -0
- data/task/methods +4 -4
- data/task/prepare +5 -0
- data/task/publish +2 -2
- data/task/rdoc +1 -0
- data/task/syntax +29 -0
- data/task/test +0 -1
- data/task/testeach +42 -0
- data/task/testpairs +50 -0
- data/test/lib/rq.rb +15 -0
- data/test/unit/array/test_merge.rb +21 -43
- data/test/unit/array/test_only.rb +21 -0
- data/test/unit/enumerable/test_collect.rb +1 -21
- data/test/unit/enumerable/test_combination.rb +50 -44
- data/test/unit/file/test_topath.rb +48 -57
- data/test/unit/file/test_write.rb +82 -0
- data/test/unit/hash/test_select.rb +43 -0
- data/test/unit/integer/test_multiples.rb +28 -32
- data/test/unit/kernel/test_report.rb +9 -12
- data/test/unit/kernel/test_val.rb +50 -45
- data/test/unit/module/test_include.rb +56 -57
- data/test/unit/module/test_name.rb +42 -55
- data/test/unit/module/test_traits.rb +46 -47
- data/test/unit/string/test_filter.rb +19 -34
- data/test/unit/string/test_format.rb +87 -96
- data/test/unit/string/test_regesc.rb +18 -26
- data/test/unit/string/test_tabs.rb +226 -119
- data/test/unit/symbol/test_succ.rb +14 -23
- data/test/unit/symbol/test_to_proc.rb +41 -0
- data/test/unit/test_association.rb +38 -47
- data/test/unit/test_attributes.rb +24 -33
- data/test/unit/test_autoarray.rb +23 -32
- data/test/unit/test_command.rb +26 -0
- data/test/unit/test_dictionary.rb +123 -117
- data/test/unit/test_infinity.rb +41 -47
- data/test/unit/test_inheritor.rb +133 -142
- data/test/unit/test_interval.rb +129 -93
- data/test/unit/test_ostruct.rb +148 -101
- data/test/unit/test_overload.rb +8 -15
- data/test/unit/test_paramix.rb +67 -73
- data/test/unit/test_pp_s.rb +23 -0
- data/test/unit/test_prototype.rb +28 -38
- metadata +47 -11
- data/lib/core/facets/enumerable/instance_map.rb +0 -0
- data/lib/more/facets/command_options.rb +0 -328
- data/meta/version.txt +0 -1
- data/task/load +0 -39
- data/test/unit/test_command_options.rb +0 -29
@@ -27,7 +27,12 @@
|
|
27
27
|
# FOR A PARTICULAR PURPOSE.
|
28
28
|
#
|
29
29
|
# Originally ported from OrderHash 2.0, Copyright (c) 2005 jan molic
|
30
|
-
|
30
|
+
#
|
31
|
+
# LOG:
|
32
|
+
#
|
33
|
+
# - 2007.10.31 trans
|
34
|
+
# Fixed initialize so the constructor blocks correctly effected dictionary
|
35
|
+
# rather then just the internal hash.
|
31
36
|
|
32
37
|
# = Dictionary
|
33
38
|
#
|
@@ -81,7 +86,7 @@ class Dictionary
|
|
81
86
|
# TODO is this needed? Doesn't the super class do this?
|
82
87
|
#++
|
83
88
|
|
84
|
-
def [](
|
89
|
+
def [](*args)
|
85
90
|
hsh = new
|
86
91
|
if Hash === args[0]
|
87
92
|
hsh.replace(args[0])
|
@@ -97,7 +102,7 @@ class Dictionary
|
|
97
102
|
|
98
103
|
# Like #new but the block sets the order.
|
99
104
|
#
|
100
|
-
def new_by(
|
105
|
+
def new_by(*args, &blk)
|
101
106
|
new(*args).order_by(&blk)
|
102
107
|
end
|
103
108
|
|
@@ -113,8 +118,8 @@ class Dictionary
|
|
113
118
|
#
|
114
119
|
# Dictionary.new.order_by { |key,value| key }
|
115
120
|
|
116
|
-
def alpha(
|
117
|
-
new(
|
121
|
+
def alpha(*args, &block)
|
122
|
+
new(*args, &block).order_by_key
|
118
123
|
end
|
119
124
|
|
120
125
|
# Alternate to #new which auto-creates sub-dictionaries as needed.
|
@@ -122,17 +127,21 @@ class Dictionary
|
|
122
127
|
# d = Dictionary.auto
|
123
128
|
# d["a"]["b"]["c"] = "abc" #=> { "a"=>{"b"=>{"c"=>"abc"}}}
|
124
129
|
#
|
125
|
-
def auto(
|
130
|
+
def auto(*args)
|
126
131
|
#AutoDictionary.new(*args)
|
127
|
-
leet = lambda { |hsh, key| hsh[key] = new(
|
132
|
+
leet = lambda { |hsh, key| hsh[key] = new(&leet) }
|
128
133
|
new(*args, &leet)
|
129
134
|
end
|
130
135
|
end
|
131
136
|
|
132
|
-
|
137
|
+
# New Dictiionary.
|
138
|
+
|
139
|
+
def initialize(*args, &blk)
|
133
140
|
@order = []
|
134
141
|
@order_by = nil
|
135
|
-
|
142
|
+
dict = self # This ensure autmatic key entry effect the
|
143
|
+
oblk = lambda{ |hsh, key| blk[dict,key] } # dictionary rather then just the interal hash.
|
144
|
+
@hash = Hash.new(*args, &oblk)
|
136
145
|
end
|
137
146
|
|
138
147
|
def order
|
@@ -190,7 +199,7 @@ class Dictionary
|
|
190
199
|
|
191
200
|
def reorder
|
192
201
|
if @order_by
|
193
|
-
assoc = @order.collect{ |k| [k,@hash[k]] }.sort_by(
|
202
|
+
assoc = @order.collect{ |k| [k,@hash[k]] }.sort_by(&@order_by)
|
194
203
|
@order = assoc.collect{ |k,v| k }
|
195
204
|
end
|
196
205
|
@order
|
@@ -201,7 +210,7 @@ class Dictionary
|
|
201
210
|
# super hsh2
|
202
211
|
#end
|
203
212
|
|
204
|
-
def ==(
|
213
|
+
def ==(hsh2)
|
205
214
|
if hsh2.is_a?( Dictionary )
|
206
215
|
@order == hsh2.order &&
|
207
216
|
@hash == hsh2.instance_variable_get("@hash")
|
@@ -214,8 +223,8 @@ class Dictionary
|
|
214
223
|
@hash[ k ]
|
215
224
|
end
|
216
225
|
|
217
|
-
def fetch(
|
218
|
-
@hash.fetch(
|
226
|
+
def fetch(k, *a, &b)
|
227
|
+
@hash.fetch(k, *a, &b)
|
219
228
|
end
|
220
229
|
|
221
230
|
# Store operator.
|
@@ -346,7 +355,9 @@ class Dictionary
|
|
346
355
|
end
|
347
356
|
|
348
357
|
def dup
|
349
|
-
|
358
|
+
a = []
|
359
|
+
each{ |k,v| a << k; a << v }
|
360
|
+
self.class[*a]
|
350
361
|
end
|
351
362
|
|
352
363
|
def update( hsh2 )
|
@@ -418,120 +429,3 @@ class Dictionary
|
|
418
429
|
@hash.dup
|
419
430
|
end
|
420
431
|
end
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
# _____ _
|
425
|
-
# |_ _|__ ___| |_
|
426
|
-
# | |/ _ \/ __| __|
|
427
|
-
# | | __/\__ \ |_
|
428
|
-
# |_|\___||___/\__|
|
429
|
-
#
|
430
|
-
|
431
|
-
=begin testing
|
432
|
-
|
433
|
-
require 'test/unit'
|
434
|
-
|
435
|
-
class TC_Dictionary < Test::Unit::TestCase
|
436
|
-
|
437
|
-
def test_create
|
438
|
-
hsh = Dictionary['z', 1, 'a', 2, 'c', 3]
|
439
|
-
assert_equal( ['z','a','c'], hsh.keys )
|
440
|
-
end
|
441
|
-
|
442
|
-
def test_op_store
|
443
|
-
hsh = Dictionary.new
|
444
|
-
hsh['z'] = 1
|
445
|
-
hsh['a'] = 2
|
446
|
-
hsh['c'] = 3
|
447
|
-
assert_equal( ['z','a','c'], hsh.keys )
|
448
|
-
end
|
449
|
-
|
450
|
-
def test_push
|
451
|
-
hsh = Dictionary['a', 1, 'c', 2, 'z', 3]
|
452
|
-
assert( hsh.push('end', 15) )
|
453
|
-
assert_equal( 15, hsh['end'] )
|
454
|
-
assert( ! hsh.push('end', 30) )
|
455
|
-
assert( hsh.unshift('begin', 50) )
|
456
|
-
assert_equal( 50, hsh['begin'] )
|
457
|
-
assert( ! hsh.unshift('begin', 60) )
|
458
|
-
assert_equal( ["begin", "a", "c", "z", "end"], hsh.keys )
|
459
|
-
assert_equal( ["end", 15], hsh.pop )
|
460
|
-
assert_equal( ["begin", "a", "c", "z"], hsh.keys )
|
461
|
-
assert_equal( ["begin", 50], hsh.shift )
|
462
|
-
end
|
463
|
-
|
464
|
-
def test_insert
|
465
|
-
# front
|
466
|
-
h = Dictionary['a', 1, 'b', 2, 'c', 3]
|
467
|
-
r = Dictionary['d', 4, 'a', 1, 'b', 2, 'c', 3]
|
468
|
-
assert_equal( 4, h.insert(0,'d',4) )
|
469
|
-
assert_equal( r, h )
|
470
|
-
# back
|
471
|
-
h = Dictionary['a', 1, 'b', 2, 'c', 3]
|
472
|
-
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
473
|
-
assert_equal( 4, h.insert(-1,'d',4) )
|
474
|
-
assert_equal( r, h )
|
475
|
-
end
|
476
|
-
|
477
|
-
def test_update
|
478
|
-
# with other orderred hash
|
479
|
-
h1 = Dictionary['a', 1, 'b', 2, 'c', 3]
|
480
|
-
h2 = Dictionary['d', 4]
|
481
|
-
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
482
|
-
assert_equal( r, h1.update(h2) )
|
483
|
-
assert_equal( r, h1 )
|
484
|
-
# with other hash
|
485
|
-
h1 = Dictionary['a', 1, 'b', 2, 'c', 3]
|
486
|
-
h2 = { 'd' => 4 }
|
487
|
-
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
488
|
-
assert_equal( r, h1.update(h2) )
|
489
|
-
assert_equal( r, h1 )
|
490
|
-
end
|
491
|
-
|
492
|
-
def test_merge
|
493
|
-
# with other orderred hash
|
494
|
-
h1 = Dictionary['a', 1, 'b', 2, 'c', 3]
|
495
|
-
h2 = Dictionary['d', 4]
|
496
|
-
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
497
|
-
assert_equal( r, h1.merge(h2) )
|
498
|
-
# with other hash
|
499
|
-
h1 = Dictionary['a', 1, 'b', 2, 'c', 3]
|
500
|
-
h2 = { 'd' => 4 }
|
501
|
-
r = Dictionary['a', 1, 'b', 2, 'c', 3, 'd', 4]
|
502
|
-
assert_equal( r, h1.merge(h2) )
|
503
|
-
end
|
504
|
-
|
505
|
-
def test_order_by
|
506
|
-
h1 = Dictionary['a', 3, 'b', 2, 'c', 1]
|
507
|
-
h1.order_by{ |k,v| v }
|
508
|
-
assert_equal( [1,2,3], h1.values )
|
509
|
-
assert_equal( ['c','b','a'], h1.keys )
|
510
|
-
end
|
511
|
-
|
512
|
-
def test_op_store
|
513
|
-
h1 = Dictionary[]
|
514
|
-
h1[:a] = 1
|
515
|
-
h1[:c] = 3
|
516
|
-
assert_equal( [1,3], h1.values )
|
517
|
-
h1[:b,1] = 2
|
518
|
-
assert_equal( [1,2,3], h1.values )
|
519
|
-
assert_equal( [:a,:b,:c], h1.keys )
|
520
|
-
end
|
521
|
-
|
522
|
-
def test_reverse!
|
523
|
-
hsh = Dictionary['z', 1, 'a', 2, 'c', 3]
|
524
|
-
hsh.reverse!
|
525
|
-
assert_equal( ['c','a','z'], hsh.keys )
|
526
|
-
end
|
527
|
-
|
528
|
-
def test_enumerable
|
529
|
-
h1 = Dictionary[]
|
530
|
-
h1[:a] = "a"
|
531
|
-
h1[:c] = "b"
|
532
|
-
assert_equal( ["A","B"], h1.collect{|k,v| v.capitalize} )
|
533
|
-
end
|
534
|
-
|
535
|
-
end
|
536
|
-
|
537
|
-
=end
|
data/lib/more/facets/infinity.rb
CHANGED
@@ -62,6 +62,7 @@ class InfinityClass < Numeric
|
|
62
62
|
|
63
63
|
def initialize(direction=1)
|
64
64
|
@direction = (direction <=> 0)
|
65
|
+
super()
|
65
66
|
end
|
66
67
|
|
67
68
|
# Change direction of infinity.
|
@@ -172,9 +173,8 @@ class Numeric
|
|
172
173
|
end
|
173
174
|
|
174
175
|
# Set constant to positive infinity.
|
175
|
-
|
176
|
-
|
177
|
-
INFINITY = InfinityClass.instance(1)
|
176
|
+
UNDEFINED = InfinityClass.new(0)
|
177
|
+
INFINITY = InfinityClass.new(1)
|
178
178
|
|
179
179
|
NaN = UNDEFINED
|
180
180
|
Inf = INFINITY
|
data/lib/more/facets/interval.rb
CHANGED
@@ -64,7 +64,6 @@ require 'facets/enumerablepass'
|
|
64
64
|
#
|
65
65
|
# i = Interval[1,3]
|
66
66
|
# i.to_a(1,2) #=> [1.0,1.5,2.0,2.5,3.0]
|
67
|
-
#
|
68
67
|
|
69
68
|
class Interval
|
70
69
|
|
@@ -265,163 +264,3 @@ class Interval
|
|
265
264
|
end
|
266
265
|
|
267
266
|
end
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
# _____ _
|
272
|
-
# |_ _|__ ___| |_
|
273
|
-
# | |/ _ \/ __| __|
|
274
|
-
# | | __/\__ \ |_
|
275
|
-
# |_|\___||___/\__|
|
276
|
-
#
|
277
|
-
|
278
|
-
=begin testing
|
279
|
-
|
280
|
-
require 'test/unit'
|
281
|
-
|
282
|
-
class InclusiveTest < Test::Unit::TestCase
|
283
|
-
|
284
|
-
def setup
|
285
|
-
@a = Interval.new( 1, 10 )
|
286
|
-
@b = Interval.new( 1, 10, true, false )
|
287
|
-
@c = Interval.new( 1, 10, false, true )
|
288
|
-
@d = Interval.new( 1, 10, true, true )
|
289
|
-
end
|
290
|
-
|
291
|
-
def test_001A ; assert_equal( false, @a.include?(0) ) ; end
|
292
|
-
def test_002A ; assert_equal( true, @a.include?(1) ) ; end
|
293
|
-
def test_003A ; assert_equal( true, @a.include?(2) ) ; end
|
294
|
-
def test_004A ; assert_equal( true, @a.include?(9) ) ; end
|
295
|
-
def test_005A ; assert_equal( true, @a.include?(10) ) ; end
|
296
|
-
def test_006A ; assert_equal( false, @a.include?(11) ) ; end
|
297
|
-
|
298
|
-
def test_001B ; assert_equal( false, @b.include?(0) ) ; end
|
299
|
-
def test_002B ; assert_equal( false, @b.include?(1) ) ; end
|
300
|
-
def test_003B ; assert_equal( true, @b.include?(2) ) ; end
|
301
|
-
def test_004B ; assert_equal( true, @b.include?(9) ) ; end
|
302
|
-
def test_005B ; assert_equal( true, @b.include?(10) ) ; end
|
303
|
-
def test_006B ; assert_equal( false, @b.include?(11) ) ; end
|
304
|
-
|
305
|
-
def test_001C ; assert_equal( false, @c.include?(0) ) ; end
|
306
|
-
def test_002C ; assert_equal( true, @c.include?(1) ) ; end
|
307
|
-
def test_003C ; assert_equal( true, @c.include?(2) ) ; end
|
308
|
-
def test_004C ; assert_equal( true, @c.include?(9) ) ; end
|
309
|
-
def test_005C ; assert_equal( false, @c.include?(10) ) ; end
|
310
|
-
def test_006C ; assert_equal( false, @c.include?(11) ) ; end
|
311
|
-
|
312
|
-
def test_001D ; assert_equal( false, @d.include?(0) ) ; end
|
313
|
-
def test_002D ; assert_equal( false, @d.include?(1) ) ; end
|
314
|
-
def test_003D ; assert_equal( true, @d.include?(2) ) ; end
|
315
|
-
def test_004D ; assert_equal( true, @d.include?(9) ) ; end
|
316
|
-
def test_005D ; assert_equal( false, @d.include?(10) ) ; end
|
317
|
-
def test_006D ; assert_equal( false, @d.include?(11) ) ; end
|
318
|
-
|
319
|
-
end
|
320
|
-
|
321
|
-
class LrgNumericTest < Test::Unit::TestCase
|
322
|
-
|
323
|
-
def setup
|
324
|
-
@a = Interval.new(0,100000000)
|
325
|
-
@b = Interval.new(0,100000000)
|
326
|
-
end
|
327
|
-
|
328
|
-
def test_001A ; assert_equal( true, @a.include?(0) ) ; end
|
329
|
-
def test_002A ; assert_equal( true, @a.include?(1000) ) ; end
|
330
|
-
def test_003A ; assert_equal( true, @a.include?(1000000) ) ; end
|
331
|
-
def test_004A ; assert_equal( true, @a.include?(100000000) ) ; end
|
332
|
-
#def test_005A ; assert_equal( false, @a.include?(INFINITY) ) ; end
|
333
|
-
|
334
|
-
def test_001B ; assert_equal( true, @b.include?(0) ) ; end
|
335
|
-
def test_002B ; assert_equal( true, @b.include?(5) ) ; end
|
336
|
-
def test_002B ; assert_equal( true, @b.include?(70007) ) ; end
|
337
|
-
def test_002B ; assert_equal( true, @b.include?(5000005) ) ; end
|
338
|
-
#def test_002B ; assert_equal( false, @b.include?(INFINITY) ) ; end
|
339
|
-
|
340
|
-
end
|
341
|
-
|
342
|
-
class SelectTest < Test::Unit::TestCase
|
343
|
-
|
344
|
-
def setup
|
345
|
-
@a = Interval.new( 0,10 )
|
346
|
-
end
|
347
|
-
|
348
|
-
def test_001
|
349
|
-
b = @a.collect( 2 ){ |n| n }
|
350
|
-
assert_equal( [0,2,4,6,8,10], b )
|
351
|
-
end
|
352
|
-
|
353
|
-
def test_002
|
354
|
-
b = @a.select{ |n| n % 2 == 0 }
|
355
|
-
assert_equal( [0,2,4,6,8,10], b )
|
356
|
-
end
|
357
|
-
|
358
|
-
def test_003
|
359
|
-
b = @a.collect( 1,2 ){ |n| n }
|
360
|
-
assert_equal( [0,5,10], b )
|
361
|
-
end
|
362
|
-
|
363
|
-
def test_004
|
364
|
-
b = @a.select( 1,2 ){ |n| n % 2 == 0 }
|
365
|
-
assert_equal( [0,10], b )
|
366
|
-
end
|
367
|
-
|
368
|
-
end
|
369
|
-
|
370
|
-
class ArrayTest < Test::Unit::TestCase
|
371
|
-
|
372
|
-
def setup
|
373
|
-
@a = Interval.new( 0,10 )
|
374
|
-
@b = Interval.new( 0,1 )
|
375
|
-
end
|
376
|
-
|
377
|
-
def test_001A ; assert_equal( [0,5,10], @a.to_a(1,2) ) ; end
|
378
|
-
|
379
|
-
def test_001B ; assert_equal( [0, 0.25, 0.5, 0.75, 1.0], @b.to_a(1,4) ) ; end
|
380
|
-
|
381
|
-
end
|
382
|
-
|
383
|
-
=end
|
384
|
-
|
385
|
-
=begin
|
386
|
-
class InfTest < Test::Unit::TestCase
|
387
|
-
|
388
|
-
def setup
|
389
|
-
@a = Interval.new( -INFINITY, -3 )
|
390
|
-
@b = Interval.new( -INFINITY, -3, true, false )
|
391
|
-
@c = Interval.new( -3, INFINITY )
|
392
|
-
@d = Interval.new( -INFINITY, INFINITY )
|
393
|
-
@e = Interval.new( -3, -2 )
|
394
|
-
end
|
395
|
-
|
396
|
-
def test_001A ; assert_equal( true, @a.include?(-INFINITY) ) ; end
|
397
|
-
def test_002A ; assert_equal( true, @a.include?(-4) ) ; end
|
398
|
-
def test_003A ; assert_equal( true, @a.include?(-3) ) ; end
|
399
|
-
def test_004A ; assert_equal( false, @a.include?(-2) ) ; end
|
400
|
-
def test_005A ; assert_equal( false, @a.include?(INFINITY) ) ; end
|
401
|
-
|
402
|
-
def test_001B ; assert_equal( true, @b.include?(-INFINITY) ) ; end
|
403
|
-
def test_002B ; assert_equal( true, @b.include?(-4) ) ; end
|
404
|
-
def test_003B ; assert_equal( false, @b.include?(-3) ) ; end
|
405
|
-
def test_004B ; assert_equal( false, @b.include?(-2) ) ; end
|
406
|
-
def test_005B ; assert_equal( false, @b.include?(INFINITY) ) ; end
|
407
|
-
|
408
|
-
def test_001C ; assert_equal( false, @c.include?(-INFINITY) ) ; end
|
409
|
-
def test_002C ; assert_equal( false, @c.include?(-4) ) ; end
|
410
|
-
def test_003C ; assert_equal( true, @c.include?(-3) ) ; end
|
411
|
-
def test_004C ; assert_equal( true, @c.include?(-2) ) ; end
|
412
|
-
def test_005C ; assert_equal( true, @c.include?(INFINITY) ) ; end
|
413
|
-
|
414
|
-
def test_001D ; assert_equal( true, @d.include?(-INFINITY) ) ; end
|
415
|
-
def test_002D ; assert_equal( true, @d.include?(-4) ) ; end
|
416
|
-
def test_003D ; assert_equal( true, @d.include?(-3) ) ; end
|
417
|
-
def test_004D ; assert_equal( true, @d.include?(-2) ) ; end
|
418
|
-
def test_005D ; assert_equal( true, @d.include?(INFINITY) ) ; end
|
419
|
-
|
420
|
-
def test_001E ; assert_equal( false, @e.include?(-INFINITY) ) ; end
|
421
|
-
def test_002E ; assert_equal( false, @e.include?(-4) ) ; end
|
422
|
-
def test_003E ; assert_equal( true, @e.include?(-3) ) ; end
|
423
|
-
def test_004E ; assert_equal( true, @e.include?(-2) ) ; end
|
424
|
-
def test_005E ; assert_equal( false, @e.include?(INFINITY) ) ; end
|
425
|
-
|
426
|
-
end
|
427
|
-
=end
|
data/lib/more/facets/multiton.rb
CHANGED
@@ -104,11 +104,13 @@ module Multiton
|
|
104
104
|
# disable build-in copying methods
|
105
105
|
|
106
106
|
def clone
|
107
|
-
|
107
|
+
raise TypeError, "can't clone Multiton #{self}"
|
108
|
+
#self
|
108
109
|
end
|
109
110
|
|
110
111
|
def dup
|
111
|
-
|
112
|
+
raise TypeError, "can't dup Multiton #{self}"
|
113
|
+
#self
|
112
114
|
end
|
113
115
|
|
114
116
|
# default marshalling strategy
|
@@ -157,11 +159,12 @@ module Multiton
|
|
157
159
|
private
|
158
160
|
def included(base)
|
159
161
|
class << base
|
162
|
+
#alias_method(:new!, :new) unless method_defined?(:new!)
|
160
163
|
# gracefully handle multiple inclusions of Multiton
|
161
|
-
unless include?(Multiton::
|
162
|
-
|
163
|
-
private :allocate
|
164
|
-
include Multiton::
|
164
|
+
unless include?(Multiton::MetaMethods)
|
165
|
+
alias_method :new!, :new
|
166
|
+
private :allocate #, :new
|
167
|
+
include Multiton::MetaMethods
|
165
168
|
|
166
169
|
if method_defined?(:marshal_dump)
|
167
170
|
undef_method :marshal_dump
|
@@ -176,7 +179,7 @@ module Multiton
|
|
176
179
|
|
177
180
|
#
|
178
181
|
|
179
|
-
module
|
182
|
+
module MetaMethods
|
180
183
|
|
181
184
|
include Inclusive
|
182
185
|
|
@@ -185,7 +188,7 @@ module Multiton
|
|
185
188
|
multiton_instance.fetch(arg) do
|
186
189
|
multiton_mutex[arg].synchronize do
|
187
190
|
multiton_instance.fetch(arg) do
|
188
|
-
val = multiton_instance[arg] = new(*e, &b) #
|
191
|
+
val = multiton_instance[arg] = new!(*e, &b) #new(*e, &b)
|
189
192
|
val.instance_variable_set(:@multiton_initializer, e, &b)
|
190
193
|
multiton_mutex.initialized(arg)
|
191
194
|
val
|
@@ -193,7 +196,7 @@ module Multiton
|
|
193
196
|
end
|
194
197
|
end
|
195
198
|
end
|
196
|
-
|
199
|
+
alias_method :new, :instance
|
197
200
|
|
198
201
|
def initialized?(*e, &b)
|
199
202
|
multiton_instance.key?(multiton_id(*e, &b))
|
@@ -242,8 +245,8 @@ end
|
|
242
245
|
|
243
246
|
|
244
247
|
|
245
|
-
|
246
|
-
|
248
|
+
=begin
|
249
|
+
# TODO Convert this into a real test and/or benchmark.
|
247
250
|
|
248
251
|
if $0 == __FILE__
|
249
252
|
|
@@ -320,7 +323,7 @@ if $0 == __FILE__
|
|
320
323
|
super
|
321
324
|
end
|
322
325
|
|
323
|
-
def new(*e)
|
326
|
+
def new!(*e) # NOTICE!!!
|
324
327
|
super
|
325
328
|
ensure
|
326
329
|
nap()
|
@@ -351,3 +354,4 @@ if $0 == __FILE__
|
|
351
354
|
end
|
352
355
|
|
353
356
|
end
|
357
|
+
=end
|