facets 2.1.3 → 2.2.0
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 +14 -12
- data/CHANGES +45 -2
- data/NOTES +9 -7
- data/lib/core/facets/1stclassmethod.rb +15 -11
- data/lib/core/facets/array.rb +0 -1
- data/lib/core/facets/array/conjoin.rb +40 -8
- data/lib/core/facets/array/delete.rb +8 -2
- data/lib/core/facets/array/indexable.rb +30 -3
- data/lib/core/facets/array/merge.rb +11 -0
- data/lib/core/facets/array/only.rb +3 -3
- data/lib/core/facets/array/pad.rb +4 -46
- data/lib/core/facets/array/rotate.rb +4 -4
- data/lib/core/facets/array/select.rb +2 -0
- data/lib/core/facets/array/splice.rb +16 -2
- data/lib/core/facets/array/stackable.rb +6 -40
- data/lib/core/facets/binding.rb +3 -0
- data/lib/core/facets/binding/cflow.rb +10 -64
- data/lib/core/facets/binding/defined.rb +10 -0
- data/lib/core/facets/binding/eval.rb +10 -76
- data/lib/core/facets/binding/here.rb +9 -0
- data/lib/core/facets/binding/self.rb +10 -0
- data/lib/core/facets/binding/vars.rb +0 -45
- data/lib/core/facets/boolean.rb +31 -103
- data/lib/core/facets/class/descendents.rb +17 -44
- data/lib/core/facets/comparable/bound.rb +8 -70
- data/lib/core/facets/comparable/cmp.rb +12 -92
- data/lib/core/facets/conversion.rb +122 -321
- data/lib/core/facets/dir/multiglob.rb +0 -13
- data/lib/core/facets/dir/traverse.rb +61 -111
- data/lib/core/facets/enumerable.rb +4 -2
- data/lib/core/facets/enumerable/cartesian.rb +36 -85
- data/lib/core/facets/enumerable/collect.rb +64 -152
- data/lib/core/facets/enumerable/combination.rb +40 -42
- data/lib/core/facets/enumerable/count.rb +99 -174
- data/lib/core/facets/enumerable/each.rb +86 -0
- data/lib/core/facets/enumerable/mash.rb +58 -0
- data/lib/core/facets/enumerable/permutation.rb +39 -44
- data/lib/core/facets/enumerable/probability.rb +16 -90
- data/lib/core/facets/enumerable/split.rb +113 -0
- data/lib/core/facets/exception/detail.rb +1 -2
- data/lib/core/facets/facets.rb +3 -2
- data/lib/core/facets/file/read.rb +4 -59
- data/lib/core/facets/file/topath.rb +8 -96
- data/lib/core/facets/file/write.rb +21 -49
- data/lib/core/facets/filetest/root.rb +4 -3
- data/lib/core/facets/functor.rb +5 -43
- data/lib/core/facets/hash/at.rb +7 -37
- data/lib/core/facets/hash/delete.rb +9 -58
- data/lib/core/facets/hash/has_keys.rb +4 -43
- data/lib/core/facets/hash/insert.rb +5 -38
- data/lib/core/facets/hash/inverse.rb +2 -41
- data/lib/core/facets/hash/iterate.rb +4 -45
- data/lib/core/facets/hash/keyize.rb +24 -92
- data/lib/core/facets/hash/merge.rb +4 -38
- data/lib/core/facets/hash/new.rb +5 -38
- data/lib/core/facets/hash/op.rb +20 -66
- data/lib/core/facets/hash/rekey.rb +9 -87
- data/lib/core/facets/hash/select.rb +1 -1
- data/lib/core/facets/hash/slice.rb +42 -0
- data/lib/core/facets/hash/traverse.rb +6 -46
- data/lib/core/facets/hash/update.rb +27 -67
- data/lib/core/facets/hash/weave.rb +22 -42
- data/lib/core/facets/indexable.rb +42 -14
- data/lib/core/facets/integer/bitmask.rb +69 -106
- data/lib/core/facets/integer/factorial.rb +1 -44
- data/lib/core/facets/integer/multiples.rb +27 -22
- data/lib/core/facets/integer/of.rb +1 -33
- data/lib/core/facets/kernel.rb +4 -2
- data/lib/core/facets/kernel/ask.rb +15 -3
- data/lib/core/facets/kernel/callstack.rb +38 -69
- data/lib/core/facets/kernel/constant.rb +2 -38
- data/lib/core/facets/kernel/deepcopy.rb +3 -55
- data/lib/core/facets/kernel/dir.rb +2 -0
- data/lib/core/facets/kernel/ergo.rb +2 -2
- data/lib/core/facets/kernel/instance.rb +51 -120
- data/lib/core/facets/kernel/metaid.rb +35 -73
- data/lib/core/facets/kernel/object.rb +14 -39
- data/lib/core/facets/kernel/op_esc.rb +24 -2
- data/lib/core/facets/kernel/populate.rb +6 -69
- data/lib/core/facets/kernel/report.rb +28 -33
- data/lib/core/facets/kernel/require.rb +7 -21
- data/lib/core/facets/kernel/respond.rb +11 -1
- data/lib/core/facets/kernel/returning.rb +50 -0
- data/lib/core/facets/kernel/silence.rb +12 -24
- data/lib/core/facets/kernel/super.rb +12 -76
- data/lib/core/facets/kernel/tap.rb +25 -107
- data/lib/core/facets/kernel/val.rb +7 -46
- data/lib/core/facets/kernel/withattr.rb +6 -64
- data/lib/core/facets/matchdata/matchset.rb +8 -50
- data/lib/core/facets/module.rb +3 -1
- data/lib/core/facets/module/abstract.rb +9 -47
- data/lib/core/facets/module/alias.rb +11 -68
- data/lib/core/facets/module/attr.rb +36 -15
- data/lib/core/facets/module/cattr.rb +8 -76
- data/lib/core/facets/module/clone.rb +15 -66
- data/lib/core/facets/module/include.rb +54 -114
- data/lib/core/facets/module/methods.rb +15 -13
- data/lib/core/facets/module/modify.rb +20 -206
- data/lib/core/facets/module/name.rb +19 -83
- data/lib/core/facets/module/require.rb +48 -53
- data/lib/core/facets/module/traits.rb +74 -33
- data/lib/core/facets/nilclass/status.rb +25 -2
- data/lib/core/facets/numeric/round.rb +24 -89
- data/lib/core/facets/proc/bind.rb +16 -59
- data/lib/core/facets/proc/compose.rb +6 -40
- data/lib/core/facets/proc/fn.rb +2 -0
- data/lib/core/facets/range/combine.rb +15 -51
- data/lib/core/facets/range/overlap.rb +8 -64
- data/lib/core/facets/regexp/arity.rb +6 -41
- data/lib/core/facets/stackable.rb +43 -4
- data/lib/core/facets/string.rb +2 -0
- data/lib/core/facets/string/align.rb +45 -55
- data/lib/core/facets/string/blank.rb +2 -46
- data/lib/core/facets/string/bracket.rb +14 -87
- data/lib/core/facets/string/case.rb +45 -32
- data/lib/core/facets/string/crypt.rb +3 -40
- data/lib/core/facets/string/filter.rb +7 -49
- data/lib/core/facets/string/format.rb +24 -126
- data/lib/core/facets/string/indexable.rb +50 -133
- data/lib/core/facets/string/interpolate.rb +24 -59
- data/lib/core/facets/string/natcmp.rb +5 -39
- data/lib/core/facets/string/nchar.rb +37 -45
- data/lib/core/facets/string/op.rb +13 -0
- data/lib/core/facets/string/partitions.rb +38 -99
- data/lib/core/facets/string/range.rb +8 -49
- data/lib/core/facets/string/regesc.rb +9 -42
- data/lib/core/facets/string/scan.rb +6 -52
- data/lib/core/facets/string/splice.rb +8 -13
- data/lib/core/facets/string/tabs.rb +16 -153
- data/lib/core/facets/symbol.rb +3 -1
- data/lib/core/facets/symbol/chomp.rb +11 -29
- data/lib/core/facets/symbol/generate.rb +4 -43
- data/lib/core/facets/symbol/not.rb +13 -25
- data/lib/core/facets/symbol/shadow.rb +2 -40
- data/lib/core/facets/symbol/succ.rb +14 -13
- data/lib/core/facets/symbol/to_proc.rb +33 -28
- data/lib/core/facets/time.rb +1 -0
- data/lib/core/facets/time/change.rb +5 -38
- data/lib/core/facets/time/elapse.rb +2 -41
- data/lib/core/facets/time/stamp.rb +47 -0
- data/lib/core/facets/unboundmethod.rb +3 -0
- data/lib/core/facets/unboundmethod/arguments.rb +27 -4
- data/lib/core/facets/unboundmethod/name.rb +21 -7
- data/lib/methods/facets/enumerable/cluster_by.rb +1 -1
- data/lib/methods/facets/enumerable/collate.rb +1 -0
- data/lib/methods/facets/enumerable/divide.rb +1 -1
- data/lib/methods/facets/enumerable/each_by.rb +1 -1
- data/lib/methods/facets/enumerable/each_pair.rb +1 -1
- data/lib/methods/facets/enumerable/eachn.rb +1 -1
- data/lib/methods/facets/enumerable/graph.rb +1 -1
- data/lib/methods/facets/enumerable/group_by.rb +1 -1
- data/lib/methods/facets/enumerable/inject.rb +1 -0
- data/lib/methods/facets/enumerable/map_send.rb +1 -0
- data/lib/methods/facets/enumerable/modulate.rb +1 -0
- data/lib/methods/facets/enumerable/partition_by.rb +1 -1
- data/lib/methods/facets/hash/collate.rb +1 -1
- data/lib/methods/facets/hash/except.rb +1 -0
- data/lib/methods/facets/hash/graph.rb +1 -1
- data/lib/methods/facets/hash/mash.rb +1 -0
- data/lib/methods/facets/kernel/Bit.rb +1 -0
- data/lib/methods/facets/kernel/complete.rb +1 -1
- data/lib/methods/facets/kernel/here.rb +1 -1
- data/lib/methods/facets/kernel/non_nil.rb +1 -0
- data/lib/methods/facets/kernel/respond_with_value.rb +1 -0
- data/lib/methods/facets/kernel/with.rb +1 -1
- data/lib/methods/facets/module/class_def.rb +1 -0
- data/lib/methods/facets/string/camelcase.rb +1 -0
- data/lib/methods/facets/string/op_minus.rb +1 -0
- data/lib/methods/facets/string/snakecase.rb +1 -0
- data/lib/more/facets/attributes.rb +5 -5
- data/lib/more/facets/basicobject.rb +0 -62
- data/lib/{core/facets/continuation/create.rb → more/facets/continuation.rb} +4 -21
- data/lib/more/facets/duration.rb +534 -0
- data/lib/more/facets/lazy.rb +3 -3
- data/lib/more/facets/namespace.rb +23 -71
- data/lib/more/facets/rbsystem.rb +42 -8
- data/lib/more/facets/stylize.rb +6 -3
- data/lib/more/facets/thread.rb +55 -0
- data/meta/MANIFEST +49 -18
- data/meta/ROLLRC +1 -1
- data/meta/project.yaml +2 -2
- data/task/install +1 -1
- data/task/test/general +8 -2
- data/test/unit/array/test_pad.rb +30 -45
- data/test/unit/array/test_stackable.rb +14 -28
- data/test/unit/binding/test_cflow.rb +34 -49
- data/test/unit/binding/test_defined.rb +17 -0
- data/test/unit/binding/test_eval.rb +11 -39
- data/test/unit/binding/test_here.rb +17 -0
- data/test/unit/binding/test_self.rb +17 -0
- data/test/unit/binding/test_vars.rb +22 -37
- data/test/unit/class/test_descendents.rb +15 -30
- data/test/unit/class/test_initializer.rb +1 -8
- data/test/unit/comparable/test_bound.rb +38 -53
- data/test/unit/comparable/test_cmp.rb +45 -60
- data/test/unit/dir/test_traverse.rb +56 -0
- data/test/unit/enumerable/test_cartesian.rb +34 -47
- data/test/unit/enumerable/test_collect.rb +16 -125
- data/test/unit/enumerable/test_combination.rb +1 -8
- data/test/unit/enumerable/test_count.rb +51 -66
- data/test/unit/enumerable/test_each.rb +77 -0
- data/test/unit/enumerable/test_mash.rb +51 -0
- data/test/unit/enumerable/test_permutation.rb +1 -7
- data/test/unit/enumerable/test_probability.rb +42 -55
- data/test/unit/enumerable/test_split.rb +52 -0
- data/test/unit/exception/test_detail.rb +19 -0
- data/test/unit/file/test_read.rb +34 -0
- data/test/unit/file/test_topath.rb +17 -25
- data/test/unit/file/test_write.rb +6 -12
- data/test/unit/filetest/test_root.rb +14 -0
- data/test/unit/hash/test_at.rb +9 -21
- data/test/unit/hash/test_delete.rb +22 -37
- data/test/unit/hash/test_has_keys.rb +13 -28
- data/test/unit/hash/test_insert.rb +9 -23
- data/test/unit/hash/test_inverse.rb +11 -26
- data/test/unit/hash/test_iterate.rb +16 -31
- data/test/unit/hash/test_keyize.rb +40 -55
- data/test/unit/hash/test_merge.rb +10 -25
- data/test/unit/hash/test_new.rb +9 -24
- data/test/unit/hash/test_op.rb +1 -7
- data/test/unit/hash/test_rekey.rb +47 -62
- data/test/unit/hash/test_traverse.rb +17 -32
- data/test/unit/hash/test_update.rb +30 -45
- data/test/unit/hash/test_weave.rb +10 -23
- data/test/unit/integer/test_bitmask.rb +48 -44
- data/test/unit/integer/test_factorial.rb +11 -26
- data/test/unit/integer/test_multiples.rb +1 -5
- data/test/unit/integer/test_of.rb +14 -29
- data/test/unit/kernel/test_callstack.rb +13 -28
- data/test/unit/kernel/test_constant.rb +14 -28
- data/test/unit/kernel/test_deepcopy.rb +20 -35
- data/test/unit/kernel/test_instance.rb +46 -61
- data/test/unit/kernel/test_metaid.rb +42 -57
- data/test/unit/kernel/test_object.rb +14 -29
- data/test/unit/kernel/test_populate.rb +38 -53
- data/test/unit/kernel/test_report.rb +1 -7
- data/test/unit/kernel/test_returning.rb +16 -0
- data/test/unit/kernel/test_silence.rb +8 -23
- data/test/unit/kernel/test_super.rb +41 -56
- data/test/unit/kernel/test_tap.rb +15 -39
- data/test/unit/kernel/test_val.rb +7 -20
- data/test/unit/kernel/test_withattr.rb +29 -44
- data/test/unit/matchdata/test_matchset.rb +20 -35
- data/test/unit/module/test_abstract.rb +15 -30
- data/test/unit/module/test_alias.rb +32 -45
- data/test/unit/module/test_cattr.rb +39 -54
- data/test/unit/module/test_clone.rb +31 -43
- data/test/unit/module/test_include.rb +1 -35
- data/test/unit/module/test_modify.rb +102 -114
- data/test/unit/module/test_name.rb +1 -7
- data/test/unit/numeric/test_round.rb +46 -61
- data/test/unit/proc/test_bind.rb +29 -44
- data/test/unit/proc/test_compose.rb +20 -35
- data/test/unit/range/test_combine.rb +14 -29
- data/test/unit/range/test_overlap.rb +34 -51
- data/test/unit/regexp/test_arity.rb +14 -29
- data/test/unit/string/test_align.rb +13 -27
- data/test/unit/string/test_blank.rb +12 -27
- data/test/unit/string/test_bracket.rb +52 -67
- data/test/unit/string/test_case.rb +19 -38
- data/test/unit/string/test_crypt.rb +10 -25
- data/test/unit/string/test_filter.rb +1 -7
- data/test/unit/string/test_format.rb +2 -7
- data/test/unit/string/test_indexable.rb +54 -69
- data/test/unit/string/test_interpolate.rb +8 -21
- data/test/unit/string/test_natcmp.rb +11 -26
- data/test/unit/string/test_nchar.rb +1 -14
- data/test/unit/string/test_op.rb +14 -0
- data/test/unit/string/test_partitions.rb +39 -54
- data/test/unit/string/test_range.rb +17 -32
- data/test/unit/string/test_regesc.rb +1 -7
- data/test/unit/string/test_scan.rb +23 -38
- data/test/unit/string/test_stackable.rb +79 -98
- data/test/unit/string/test_tabs.rb +1 -7
- data/test/unit/symbol/test_chomp.rb +10 -21
- data/test/unit/symbol/test_generate.rb +7 -22
- data/test/unit/symbol/test_not.rb +10 -25
- data/test/unit/symbol/test_shadow.rb +8 -23
- data/test/unit/symbol/test_succ.rb +1 -7
- data/test/unit/symbol/test_to_proc.rb +1 -7
- data/test/unit/test_attributes.rb +1 -1
- data/test/unit/test_continuation.rb +13 -0
- data/test/unit/test_conversion.rb +1 -14
- data/test/unit/test_namespace.rb +30 -3
- data/test/unit/test_thread.rb +23 -0
- data/test/unit/time/test_change.rb +11 -26
- data/test/unit/time/test_elapse.rb +10 -25
- data/test/unit/time/test_stamp.rb +28 -0
- metadata +65 -25
- data/lib/core/facets/array/unzip.rb +0 -14
- data/lib/core/facets/continuation.rb +0 -1
- data/lib/core/facets/enumerable/collate.rb +0 -104
- data/lib/core/facets/kernel/require_esc.rb +0 -44
- data/lib/more/facets/mapsend.rb +0 -98
- data/lib/more/facets/pp_s.rb +0 -30
- data/log/history.rd +0 -38
- data/log/todo.rd +0 -4
- data/task/special/quickopts +0 -15
- data/test/unit/continuation/test_create.rb +0 -28
- data/test/unit/enumerable/test_collate.rb +0 -51
- data/test/unit/kernel/test_require_esc.rb +0 -29
- data/test/unit/test_mapsend.rb +0 -18
- data/test/unit/test_pp_s.rb +0 -17
@@ -1,36 +1,20 @@
|
|
1
|
-
# = Bitmask
|
2
|
-
#
|
3
|
-
# Bitmask extends the Integer class to allow for easy manipulation
|
4
|
-
# of a number as a bit field.
|
5
|
-
#
|
6
|
-
# == Examples
|
7
|
-
#
|
8
|
-
# 0xb0100.bit(-3) #=> 0
|
9
|
-
#
|
10
|
-
# == Authors and Contributors
|
11
|
-
#
|
12
|
-
# * George Moschovitis
|
13
|
-
# * Thomas Sawyer
|
14
|
-
#
|
15
|
-
# == Copyright (c) 2005 George Moschovitis
|
16
|
-
#
|
17
|
-
# Ruby License
|
18
|
-
#
|
19
|
-
# This module is free software. You may use, modify, and/or redistribute this
|
20
|
-
# software under the same terms as Ruby.
|
21
|
-
#
|
22
|
-
# This program is distributed in the hope that it will be useful, but WITHOUT
|
23
|
-
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
24
|
-
# FOR A PARTICULAR PURPOSE.
|
25
|
-
|
26
|
-
#
|
27
1
|
class Integer
|
28
2
|
|
29
|
-
#
|
3
|
+
# Set a bit.
|
4
|
+
#
|
5
|
+
# 0.bit!(4) #=> 8
|
6
|
+
#
|
7
|
+
# Using an inverted bit will clear a bit.
|
8
|
+
#
|
9
|
+
# 10.bit!(~3) #=> 2
|
10
|
+
# 0xb0100.bit(~3) #=> 0
|
11
|
+
#
|
12
|
+
# CREDIT: Thomas Sawyer
|
13
|
+
# CREDIT: George Moschovitis
|
30
14
|
|
31
|
-
def bit
|
15
|
+
def bit(bit)
|
32
16
|
if bit < 0
|
33
|
-
mask = (1 << bit)
|
17
|
+
mask = (1 << ~bit)
|
34
18
|
self & ~mask
|
35
19
|
else
|
36
20
|
mask = (1 << bit)
|
@@ -38,104 +22,83 @@ class Integer
|
|
38
22
|
end
|
39
23
|
end
|
40
24
|
|
41
|
-
|
42
|
-
|
43
|
-
(self & mask) != 0
|
44
|
-
end
|
45
|
-
|
46
|
-
def bitmask!(mask)
|
47
|
-
if mask < 0
|
48
|
-
self & ~mask
|
49
|
-
else
|
50
|
-
self | mask
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def bitmask?(mask)
|
55
|
-
(self & mask) != 0
|
56
|
-
end
|
57
|
-
|
58
|
-
# TODO The following may be deprecated.
|
25
|
+
# Old name. Probably will be deprecated.
|
26
|
+
alias_method :bit!, :bit
|
59
27
|
|
28
|
+
# Clear bit.
|
60
29
|
#
|
61
|
-
|
62
|
-
mask = (1 << bit)
|
63
|
-
self | mask
|
64
|
-
end
|
30
|
+
# CREDIT: George Moschovitis
|
65
31
|
|
66
32
|
def clear_bit(bit)
|
67
33
|
mask = (1 << bit)
|
68
34
|
self & ~mask
|
69
35
|
end
|
70
36
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
37
|
+
# Is a bit set?
|
38
|
+
#
|
39
|
+
# 8.bit?(3) #=> true
|
40
|
+
# 8.bit?(2) #=> false
|
41
|
+
#
|
42
|
+
# CREDIT: Thomas Sawyer
|
43
|
+
# CREDIT: George Moschovitis
|
77
44
|
|
78
|
-
def
|
79
|
-
|
45
|
+
def bit?(bit)
|
46
|
+
mask = (1 << bit)
|
47
|
+
(self & mask) != 0
|
80
48
|
end
|
81
49
|
|
82
|
-
|
50
|
+
# Apply a bitmask.
|
51
|
+
#
|
52
|
+
# 1.bitmask(6) #=> 7
|
53
|
+
#
|
54
|
+
# Using a inverted bitmask clears bits.
|
55
|
+
#
|
56
|
+
# 7.bitmask(~2) #=> 5
|
57
|
+
# 5.bitmask(~2) #=> 5
|
58
|
+
#
|
59
|
+
# CREDIT: George Moschovitis
|
83
60
|
|
84
|
-
|
61
|
+
def bitmask(mask)
|
62
|
+
if mask < 0
|
63
|
+
self & mask
|
64
|
+
else
|
65
|
+
self | mask
|
66
|
+
end
|
67
|
+
end
|
85
68
|
|
69
|
+
# Old name. Probably will be deprecated.
|
70
|
+
alias_method :bitmask!, :bitmask
|
86
71
|
|
87
|
-
|
72
|
+
# Is bitmask set?
|
73
|
+
#
|
74
|
+
# 7.bitmask?(7) #=> true
|
75
|
+
# 7.bitmask?(5) #=> true
|
76
|
+
# 8.bitmask?(3) #=> false
|
77
|
+
#
|
78
|
+
# CREDIT: George Moschovitis
|
88
79
|
|
89
|
-
def bitmask(
|
90
|
-
|
80
|
+
def bitmask?(mask)
|
81
|
+
(self & mask) != 0
|
91
82
|
end
|
92
83
|
|
93
84
|
end
|
94
85
|
|
95
86
|
|
96
|
-
|
97
|
-
# |_ _|__ ___| |_
|
98
|
-
# | |/ _ \/ __| __|
|
99
|
-
# | | __/\__ \ |_
|
100
|
-
# |_|\___||___/\__|
|
101
|
-
#
|
102
|
-
|
103
|
-
=begin test
|
104
|
-
|
105
|
-
require 'test/unit'
|
106
|
-
|
107
|
-
class TestIntegerBitmask < Test::Unit::TestCase
|
108
|
-
|
109
|
-
def test_001
|
110
|
-
assert_equal( 1, 0.set_bit(0) )
|
111
|
-
assert_equal( 2, 0.set_bit(1) )
|
112
|
-
assert_equal( 4, 0.set_bit(2) )
|
113
|
-
assert_equal( 8, 0.set_bit(3) )
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_002
|
117
|
-
assert_equal( 0, 1.clear_bit(0) )
|
118
|
-
assert_equal( 0, 2.clear_bit(1) )
|
119
|
-
assert_equal( 0, 4.clear_bit(2) )
|
120
|
-
assert_equal( 0, 8.clear_bit(3) )
|
121
|
-
end
|
87
|
+
module Kernel
|
122
88
|
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
89
|
+
# Create a single bit bitmask.
|
90
|
+
#
|
91
|
+
# Bit(0) #=> 1
|
92
|
+
# Bit(1) #=> 2
|
93
|
+
# Bit(2) #=> 4
|
94
|
+
#
|
95
|
+
# This is equivalent to n-shift: "1 << n".
|
96
|
+
#
|
97
|
+
# CREDIT: Thomas Sawyer
|
98
|
+
# CREDIT: George Moschovitis
|
133
99
|
|
100
|
+
def Bit(n)
|
101
|
+
1 << Integer(n)
|
134
102
|
end
|
135
103
|
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
# Author:: George Moschovitis
|
140
|
-
# Copyright:: Copyright (c) 2005 George Moschovitis
|
141
|
-
# License:: Ruby License
|
104
|
+
end
|
@@ -1,17 +1,3 @@
|
|
1
|
-
# = FILE
|
2
|
-
#
|
3
|
-
# interger/factorial.rb
|
4
|
-
#
|
5
|
-
# = DESCRIPTION
|
6
|
-
#
|
7
|
-
# Factorial extension for Integer class.
|
8
|
-
#
|
9
|
-
# = AUTHORS
|
10
|
-
#
|
11
|
-
# CREDIT Malte Milatz
|
12
|
-
|
13
|
-
#
|
14
|
-
|
15
1
|
class Integer
|
16
2
|
|
17
3
|
# Calculate the factorial of an integer.
|
@@ -20,6 +6,7 @@ class Integer
|
|
20
6
|
# 3.factorial #=> 6
|
21
7
|
# 3.factorial #=> 24
|
22
8
|
#
|
9
|
+
# CREDIT: Malte Milatz
|
23
10
|
|
24
11
|
def factorial
|
25
12
|
return 1 if zero?
|
@@ -28,11 +15,7 @@ class Integer
|
|
28
15
|
f
|
29
16
|
end
|
30
17
|
|
31
|
-
#--
|
32
|
-
# TODO Pick one of these and deprecate the other. But which?
|
33
|
-
#++
|
34
18
|
alias_method( :fac, :factorial )
|
35
|
-
alias_method( :fact, :factorial )
|
36
19
|
|
37
20
|
#-- OLD CODE
|
38
21
|
#def factorial
|
@@ -44,29 +27,3 @@ class Integer
|
|
44
27
|
#++
|
45
28
|
|
46
29
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
# _____ _
|
51
|
-
# |_ _|__ ___| |_
|
52
|
-
# | |/ _ \/ __| __|
|
53
|
-
# | | __/\__ \ |_
|
54
|
-
# |_|\___||___/\__|
|
55
|
-
#
|
56
|
-
=begin test
|
57
|
-
|
58
|
-
require 'test/unit'
|
59
|
-
|
60
|
-
class TCInteger < Test::Unit::TestCase
|
61
|
-
|
62
|
-
def test_factorial
|
63
|
-
assert_equal( 1, 0.factorial )
|
64
|
-
assert_equal( 1, 1.factorial )
|
65
|
-
assert_equal( 2, 2.factorial )
|
66
|
-
assert_equal( 6, 3.factorial )
|
67
|
-
assert_equal( 24, 4.factorial )
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|
71
|
-
|
72
|
-
=end
|
@@ -1,28 +1,32 @@
|
|
1
1
|
class Integer
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
3
|
+
unless (RUBY_VERSION[0,3] == '1.9')
|
4
|
+
|
5
|
+
# Returns true if this integer is odd, false otherwise.
|
6
|
+
#
|
7
|
+
# 2.odd? #=> false
|
8
|
+
# 3.odd? #=> true
|
9
|
+
#
|
10
|
+
# -99.odd? # -> true
|
11
|
+
# -98.odd? # -> false
|
12
|
+
#
|
13
|
+
# CREDIT: Gavin Sinclair
|
14
|
+
|
15
|
+
def odd?
|
16
|
+
self % 2 == 1
|
17
|
+
end
|
18
|
+
|
19
|
+
# Returns true if this integer is even, false otherwise.
|
20
|
+
#
|
21
|
+
# 2.even? #=> true
|
22
|
+
# 3.even? #=> false
|
23
|
+
#
|
24
|
+
# CREDIT: Gavin Sinclair
|
25
|
+
|
26
|
+
def even?
|
27
|
+
self % 2 == 0
|
28
|
+
end
|
23
29
|
|
24
|
-
def even?
|
25
|
-
self % 2 == 0
|
26
30
|
end
|
27
31
|
|
28
32
|
# Is is a multiple of a given number?
|
@@ -30,6 +34,7 @@ class Integer
|
|
30
34
|
# 7.multiple?(2) #=> false
|
31
35
|
# 8.multiple?(2) #=> true
|
32
36
|
#
|
37
|
+
# CREDIT: Trans
|
33
38
|
|
34
39
|
def multiple?(number)
|
35
40
|
self % number == 0
|
@@ -1,5 +1,3 @@
|
|
1
|
-
|
2
|
-
#
|
3
1
|
class Integer
|
4
2
|
|
5
3
|
# Like #times but returns a collection of the yield results.
|
@@ -7,6 +5,7 @@ class Integer
|
|
7
5
|
# a = 3.of { |i| "#{i+1}" }
|
8
6
|
# a => [ "1", "2", "3" ]
|
9
7
|
#
|
8
|
+
|
10
9
|
def of(&block)
|
11
10
|
Array.new(self, &block)
|
12
11
|
end
|
@@ -21,34 +20,3 @@ class Integer
|
|
21
20
|
alias_method :times_map, :of
|
22
21
|
|
23
22
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
# _____ _
|
29
|
-
# |_ _|__ ___| |_
|
30
|
-
# | |/ _ \/ __| __|
|
31
|
-
# | | __/\__ \ |_
|
32
|
-
# |_|\___||___/\__|
|
33
|
-
#
|
34
|
-
=begin test
|
35
|
-
|
36
|
-
require 'test/unit'
|
37
|
-
|
38
|
-
class TestIntegerEnumerate < Test::Unit::TestCase
|
39
|
-
|
40
|
-
def test_of
|
41
|
-
a = 4
|
42
|
-
b = a.of{ |i| i*2 }
|
43
|
-
assert_equal( [0,2,4,6], b )
|
44
|
-
end
|
45
|
-
|
46
|
-
def test_times_collect
|
47
|
-
a = 4
|
48
|
-
b = a.times_collect{ |i| i*2 }
|
49
|
-
assert_equal( [0,2,4,6], b )
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
=end
|
data/lib/core/facets/kernel.rb
CHANGED
@@ -1,10 +1,8 @@
|
|
1
|
-
require 'facets/kernel/require_esc.rb'
|
2
1
|
require 'facets/kernel/callstack.rb'
|
3
2
|
require 'facets/kernel/super.rb'
|
4
3
|
require 'facets/kernel/val.rb'
|
5
4
|
require 'facets/kernel/metaid.rb'
|
6
5
|
require 'facets/kernel/instance.rb'
|
7
|
-
require 'facets/kernel/tap.rb'
|
8
6
|
require 'facets/kernel/ergo.rb'
|
9
7
|
require 'facets/kernel/object.rb'
|
10
8
|
require 'facets/kernel/withattr.rb'
|
@@ -18,4 +16,8 @@ require 'facets/kernel/ask.rb'
|
|
18
16
|
require 'facets/kernel/respond.rb'
|
19
17
|
require 'facets/kernel/silence.rb'
|
20
18
|
require 'facets/kernel/report.rb'
|
19
|
+
require 'facets/kernel/returning.rb'
|
20
|
+
|
21
|
+
# remove for 1.9
|
22
|
+
require 'facets/kernel/tap.rb'
|
21
23
|
|
@@ -1,10 +1,22 @@
|
|
1
1
|
module Kernel
|
2
2
|
|
3
|
-
|
3
|
+
module_function
|
4
4
|
|
5
|
-
#
|
5
|
+
# Very simple convenience method to get a console reply.
|
6
|
+
#
|
7
|
+
# ask "Are you happy?", "Yn"
|
8
|
+
#
|
9
|
+
# On the command line one would see.
|
10
|
+
#
|
11
|
+
# $ Are you happy? [Yn]
|
12
|
+
#
|
13
|
+
# Responding:
|
14
|
+
#
|
15
|
+
# $ Are you happy? [Yn] Y <ENTER>
|
16
|
+
#
|
17
|
+
# The ask method would return "Y".
|
6
18
|
|
7
|
-
def ask(
|
19
|
+
def ask(question, answers=nil)
|
8
20
|
print "#{question}"
|
9
21
|
print " [#{answers}] " if answers
|
10
22
|
until inp = $stdin.gets ; sleep 1 ; end ; puts
|
@@ -1,22 +1,10 @@
|
|
1
|
-
# TITLE:
|
2
|
-
#
|
3
|
-
# Callstack Methods
|
4
|
-
#
|
5
|
-
# FILE:
|
6
|
-
#
|
7
|
-
# kernel/callstack.rb
|
8
|
-
#
|
9
|
-
# DESCRIPTION:
|
10
|
-
#
|
11
|
-
# Kernel extensions related to cflow.
|
12
|
-
#
|
13
|
-
# AUTHORS:
|
14
|
-
#
|
15
|
-
# CREDIT Thomas Sawyer
|
16
|
-
|
17
|
-
#
|
18
1
|
module Kernel
|
19
2
|
|
3
|
+
unless (RUBY_VERSION[0,3] == '1.9')
|
4
|
+
|
5
|
+
|
6
|
+
end
|
7
|
+
|
20
8
|
alias_method :pp_call_stack, :caller
|
21
9
|
|
22
10
|
# Parse a caller string and break it into its components,
|
@@ -39,6 +27,8 @@ module Kernel
|
|
39
27
|
# in a different format, _prior_ to requiring this, then the
|
40
28
|
# results will be indeterminate.
|
41
29
|
#
|
30
|
+
# CREDIT: Trans
|
31
|
+
|
42
32
|
def call_stack( level = 1 )
|
43
33
|
call_str_array = pp_call_stack(level)
|
44
34
|
stack = []
|
@@ -54,66 +44,45 @@ module Kernel
|
|
54
44
|
|
55
45
|
private
|
56
46
|
|
57
|
-
# Retreive the current running method name.
|
58
|
-
# There is a lot of debate on what to call this.
|
59
|
-
# #called differs from #method_name only by the fact
|
60
|
-
# that it returns a symbol, rather then a string.
|
61
|
-
#
|
62
|
-
# def tester; called; end
|
63
|
-
# tester #=> :tester
|
64
|
-
#
|
65
|
-
def called
|
66
|
-
/\`([^\']+)\'/.match(caller(1).first)[1].to_sym
|
67
|
-
end
|
68
47
|
|
69
|
-
|
70
|
-
#
|
71
|
-
# There is a lot of debate on what to call this.
|
72
|
-
# #me returns a symbol, not a string.
|
73
|
-
#
|
74
|
-
# def tester; __method__; end
|
75
|
-
# tester #=> :tester
|
76
|
-
#
|
77
|
-
def callee
|
78
|
-
/\`([^\']+)\'/.match(caller(1).first)[1].to_sym
|
79
|
-
end
|
48
|
+
if (RUBY_VERSION[0,3] == '1.9')
|
80
49
|
|
81
|
-
|
82
|
-
|
83
|
-
# leave that distinction to Ruby 1.9+.
|
50
|
+
alias_method :callee, :__callee__
|
51
|
+
alias_method :called, :__callee__
|
84
52
|
|
85
|
-
|
86
|
-
alias_method :__method__, :callee
|
53
|
+
else
|
87
54
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
#
|
93
|
-
#
|
94
|
-
#
|
95
|
-
#
|
96
|
-
|
97
|
-
|
98
|
-
=begin test
|
99
|
-
|
100
|
-
require 'test/unit'
|
101
|
-
|
102
|
-
class TCKernel < Test::Unit::TestCase
|
103
|
-
|
104
|
-
def test_call_stack
|
105
|
-
assert_nothing_raised{ call_stack }
|
55
|
+
# Retreive the current running method name.
|
56
|
+
# There is a lot of debate on what to call this.
|
57
|
+
# #called differs from #method_name only by the fact
|
58
|
+
# that it returns a symbol, rather then a string.
|
59
|
+
#
|
60
|
+
# def tester; called; end
|
61
|
+
# tester #=> :tester
|
62
|
+
#
|
63
|
+
def called
|
64
|
+
/\`([^\']+)\'/.match(caller(1).first)[1].to_sym
|
106
65
|
end
|
107
66
|
|
108
|
-
|
109
|
-
|
67
|
+
# Retreive the current running method name.
|
68
|
+
#
|
69
|
+
# There is a lot of debate on what to call this.
|
70
|
+
# #me returns a symbol, not a string.
|
71
|
+
#
|
72
|
+
# def tester; __method__; end
|
73
|
+
# tester #=> :tester
|
74
|
+
#
|
75
|
+
def callee
|
76
|
+
/\`([^\']+)\'/.match(caller(1).first)[1].to_sym
|
110
77
|
end
|
111
78
|
|
112
|
-
|
113
|
-
|
114
|
-
|
79
|
+
# Technically __callee__ should provided alias names,
|
80
|
+
# where __method__ should not. But we'll have to
|
81
|
+
# leave that distinction to Ruby 1.9+.
|
115
82
|
|
116
|
-
|
83
|
+
alias_method :__callee__, :called
|
84
|
+
alias_method :__method__, :called
|
117
85
|
|
118
|
-
|
86
|
+
end
|
119
87
|
|
88
|
+
end
|