facets 2.0.2 → 2.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.
- 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
|