mug 0.5.3 → 0.5.4
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.
- checksums.yaml +4 -4
- data/lib/mug/and-or.rb +26 -26
- data/lib/mug/any-and-all.rb +16 -16
- data/lib/mug/apply.rb +37 -37
- data/lib/mug/array/extend.rb +43 -43
- data/lib/mug/array/minus.rb +32 -32
- data/lib/mug/bool.rb +71 -71
- data/lib/mug/clamp.rb +35 -35
- data/lib/mug/counts.rb +27 -27
- data/lib/mug/fragile-method-chain.rb +42 -42
- data/lib/mug/hash/map.rb +75 -75
- data/lib/mug/hash/operations.rb +47 -47
- data/lib/mug/iterator/for.rb +7 -7
- data/lib/mug/iterator/method.rb +7 -7
- data/lib/mug/iterator_c.rb +14 -14
- data/lib/mug/loop-with.rb +30 -29
- data/lib/mug/matchdata/each.rb +40 -40
- data/lib/mug/matchdata/hash.rb +29 -29
- data/lib/mug/maybe.rb +33 -33
- data/lib/mug/negativity.rb +20 -20
- data/lib/mug/not.rb +6 -6
- data/lib/mug/rexproc.rb +6 -6
- data/lib/mug/self.rb +31 -31
- data/lib/mug/to_h.rb +2 -2
- data/lib/mug/top.rb +100 -100
- data/test/test-and-or.rb +32 -32
- data/test/test-any-and-all.rb +19 -19
- data/test/test-apply.rb +47 -47
- data/test/test-array-extend.rb +54 -54
- data/test/test-array-minus.rb +11 -11
- data/test/test-bool.rb +48 -48
- data/test/test-clamp.rb +42 -42
- data/test/test-counts.rb +21 -21
- data/test/test-fragile-method-chain.rb +56 -56
- data/test/test-hashmap.rb +14 -14
- data/test/test-hashop.rb +47 -47
- data/test/test-iterator-for.rb +12 -12
- data/test/test-loop-with.rb +117 -66
- data/test/test-matchdata_each.rb +50 -50
- data/test/test-matchdata_hash.rb +40 -40
- data/test/test-maybe.rb +76 -76
- data/test/test-negativity.rb +40 -40
- data/test/test-not.rb +53 -53
- data/test/test-rexproc.rb +6 -6
- data/test/test-self.rb +21 -21
- data/test/test-tau.rb +12 -12
- data/test/test-top.rb +100 -100
- metadata +4 -4
data/test/test-hashmap.rb
CHANGED
@@ -2,23 +2,23 @@ require 'test/unit'
|
|
2
2
|
$VERBOSE = true
|
3
3
|
|
4
4
|
if RUBY_VERSION.to_f < 1.9
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
class Symbol
|
6
|
+
def next
|
7
|
+
to_s.next.to_sym
|
8
|
+
end
|
9
|
+
end
|
10
10
|
end
|
11
11
|
|
12
12
|
require_relative '../lib/mug/hash/map'
|
13
13
|
class Test_hashmap < Test::Unit::TestCase
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
14
|
+
def test_hashmap
|
15
|
+
h = {'s'=>1, :x=>2, 3=>'a'}
|
16
|
+
h_k_next = {'t'=>1, :y=>2, 4=>'a'}
|
17
|
+
h_v_next = {'s'=>2, :x=>3, 3=>'b'}
|
18
|
+
h_p_next = {'t'=>2, :y=>3, 4=>'b'}
|
19
|
+
assert_equal( h_k_next, h.map_keys {|k| k.next } )
|
20
|
+
assert_equal( h_v_next, h.map_values{|v| v.next } )
|
21
|
+
assert_equal( h_p_next, h.map_pairs {|k,v| [k.next,v.next] } )
|
22
|
+
end
|
23
23
|
end
|
24
24
|
|
data/test/test-hashop.rb
CHANGED
@@ -3,60 +3,60 @@ $VERBOSE = true
|
|
3
3
|
|
4
4
|
$coercable = Object.new
|
5
5
|
def $coercable.to_h
|
6
|
-
|
6
|
+
{:a=>0, :z=>99}
|
7
7
|
end
|
8
8
|
|
9
9
|
require_relative '../lib/mug/hash/operations'
|
10
10
|
class Test_hashop < Test::Unit::TestCase
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
11
|
+
def test_hash_or
|
12
|
+
h = { :a => 1, :b => 2 }
|
13
|
+
[
|
14
|
+
[{}, h, h],
|
15
|
+
[{:c=>3}, h, {:a=>1, :b=>2, :c=>3}],
|
16
|
+
[{:a=>0, :b=>0}, h, {:a=>0, :b=>0}],
|
17
|
+
[{:a=>0, :c=>3}, h, {:a=>0, :b=>2, :c=>3}],
|
18
|
+
[h, {}, h],
|
19
|
+
].each do |a, b, x|
|
20
|
+
assert_equal( a|b, x )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def test_hash_plus
|
24
|
+
h = { :a => 1, :b => 2 }
|
25
|
+
[
|
26
|
+
[{}, h, h],
|
27
|
+
[{:c=>3}, h, {:a=>1, :b=>2, :c=>3}],
|
28
|
+
[{:a=>0, :b=>0}, h, h],
|
29
|
+
[{:a=>0, :c=>3}, h, {:a=>1, :b=>2, :c=>3}],
|
30
|
+
[h, {}, h],
|
31
|
+
].each do |a, b, x|
|
32
|
+
assert_equal( a+b, x )
|
33
|
+
end
|
34
|
+
end
|
35
|
+
def test_hash_poke
|
36
|
+
h = {}
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
38
|
+
# Regular Hash poking
|
39
|
+
assert_nothing_raised { h << {:a=>1} }
|
40
|
+
assert_equal h, {:a=>1}
|
41
|
+
assert_nothing_raised { h << {:b=>2} }
|
42
|
+
assert_equal h, {:a=>1,:b=>2}
|
43
|
+
assert_nothing_raised { h << {:a=>3} }
|
44
|
+
assert_equal h, {:a=>3,:b=>2}
|
45
|
+
assert_nothing_raised { h << {:a=>1,:c=>3} }
|
46
|
+
assert_equal h, {:a=>1,:b=>2,:c=>3}
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
48
|
+
# Two-element Array poking
|
49
|
+
assert_nothing_raised { h << [:d,1] }
|
50
|
+
assert_equal h, {:a=>1,:b=>2,:c=>3,:d=>1}
|
51
|
+
assert_nothing_raised { h << [:d,4] }
|
52
|
+
assert_equal h, {:a=>1,:b=>2,:c=>3,:d=>4}
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
# Objects with .to_h
|
55
|
+
assert_nothing_raised { h << $coercable }
|
56
|
+
assert_equal h, {:a=>0,:b=>2,:c=>3,:d=>4,:z=>99}
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
# Failure
|
59
|
+
assert_raise(ArgumentError) { h << Object.new }
|
60
|
+
end
|
61
61
|
end
|
62
62
|
|
data/test/test-iterator-for.rb
CHANGED
@@ -3,16 +3,16 @@ $VERBOSE = true
|
|
3
3
|
|
4
4
|
require_relative '../lib/mug/iterator/for'
|
5
5
|
class IterForTest < Test::Unit::TestCase
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
6
|
+
def test_iter_for
|
7
|
+
# Test on Integer#next => Integer
|
8
|
+
assert_equal([0, 1, 2, 3, 4], 0.iter_for(:next).take(5))
|
9
|
+
# Test on String#succ => String
|
10
|
+
assert_equal(%w[a b c d e f g h i j], 'a'.iter_for(:succ).take(10))
|
11
|
+
# Test on Integer#inspect => String#inspect => String
|
12
|
+
assert_equal([1, "1", "\"1\""], 1.iter_for(:inspect).take(3))
|
13
|
+
end
|
14
|
+
def test_iter_for_args
|
15
|
+
# Test with a parameter
|
16
|
+
assert_equal([0, 2, 4, 6, 8], 0.iter_for(:+, 2).take(5))
|
17
|
+
end
|
18
18
|
end
|
data/test/test-loop-with.rb
CHANGED
@@ -4,72 +4,123 @@ $VERBOSE = true
|
|
4
4
|
require_relative '../lib/mug/loop-with'
|
5
5
|
class Test_loop_with < Test::Unit::TestCase
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
7
|
+
def test_loop_with_index__block
|
8
|
+
a = []
|
9
|
+
b = []
|
10
|
+
x = loop_with_index do |i|
|
11
|
+
a << i
|
12
|
+
break if a.length >= 3
|
13
|
+
end
|
14
|
+
y = loop_with_index do |i|
|
15
|
+
b << i
|
16
|
+
raise StopIteration if b.length >= 3
|
17
|
+
end
|
18
|
+
assert_equal( [0,1,2], a )
|
19
|
+
assert_equal( [0,1,2], b )
|
20
|
+
assert_equal( 2, y )
|
21
|
+
end
|
22
|
+
def test_loop_with_index__block_offset
|
23
|
+
a = []
|
24
|
+
b = []
|
25
|
+
x = loop_with_index(10) do |i|
|
26
|
+
a << i
|
27
|
+
break if a.length >= 3
|
28
|
+
end
|
29
|
+
y = loop_with_index(10) do |i|
|
30
|
+
b << i
|
31
|
+
raise StopIteration if b.length >= 3
|
32
|
+
end
|
33
|
+
assert_equal( [10,11,12], a )
|
34
|
+
assert_equal( [10,11,12], b )
|
35
|
+
assert_equal( 12, y )
|
36
|
+
end
|
37
|
+
def test_loop_with_index__enum
|
38
|
+
enum = loop_with_index
|
39
|
+
assert_respond_to( enum, :each )
|
40
|
+
|
41
|
+
a = []
|
42
|
+
b = []
|
43
|
+
x = enum.each do |i|
|
44
|
+
a << i
|
45
|
+
break if a.length >= 3
|
46
|
+
end
|
47
|
+
y = enum.each do |i|
|
48
|
+
b << i
|
49
|
+
raise StopIteration if b.length >= 3
|
50
|
+
end
|
51
|
+
assert_equal( [0,1,2], a )
|
52
|
+
assert_equal( [0,1,2], b )
|
53
|
+
assert_equal( 2, y )
|
54
|
+
end
|
55
|
+
def test_loop_with_index__enum_offset
|
56
|
+
enum = loop_with_index(10)
|
57
|
+
assert_respond_to( enum, :each )
|
58
|
+
|
59
|
+
a = []
|
60
|
+
b = []
|
61
|
+
x = enum.each do |i|
|
62
|
+
a << i
|
63
|
+
break if a.length >= 3
|
64
|
+
end
|
65
|
+
y = enum.each do |i|
|
66
|
+
b << i
|
67
|
+
raise StopIteration if b.length >= 3
|
68
|
+
end
|
69
|
+
assert_equal( [10,11,12], a )
|
70
|
+
assert_equal( [10,11,12], b )
|
71
|
+
assert_equal( 12, y )
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_loop_with_object__block
|
75
|
+
o = "x"
|
76
|
+
a = []
|
77
|
+
b = []
|
78
|
+
x = loop_with_object(o) do |e|
|
79
|
+
a << e
|
80
|
+
break if a.length >= 3
|
81
|
+
end
|
82
|
+
y = loop_with_object(o) do |e|
|
83
|
+
b << e
|
84
|
+
raise StopIteration if b.length >= 3
|
85
|
+
end
|
86
|
+
assert_equal( [o,o,o], a )
|
87
|
+
assert_equal( [o,o,o], b )
|
88
|
+
assert( y.equal?(o), "should return `obj`" )
|
89
|
+
end
|
90
|
+
def test_loop_with_object__enum
|
91
|
+
o = "x"
|
92
|
+
enum = loop_with_object(o)
|
93
|
+
assert_respond_to( enum, :each )
|
94
|
+
|
95
|
+
a = []
|
96
|
+
b = []
|
97
|
+
x = enum.each do |e|
|
98
|
+
a << e
|
99
|
+
break if a.length >= 3
|
100
|
+
end
|
101
|
+
y = enum.each do |e|
|
102
|
+
b << e
|
103
|
+
raise StopIteration if b.length >= 3
|
104
|
+
end
|
105
|
+
assert_equal( [o,o,o], a )
|
106
|
+
assert_equal( [o,o,o], b )
|
107
|
+
assert( y.equal?(o), "should return `obj`" )
|
108
|
+
|
109
|
+
c = []
|
110
|
+
loop_with_object(c).with_index do |a, i|
|
111
|
+
a << i
|
112
|
+
break if i >= 2
|
113
|
+
end
|
114
|
+
assert_equal( [0,1,2], c )
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_loop_with_index__error
|
118
|
+
assert_raise(RuntimeError) { loop_with_index {|i| raise 'die' } }
|
119
|
+
end
|
120
|
+
def test_loop_with_object__error
|
121
|
+
a = []
|
122
|
+
assert_raise(RuntimeError) { loop_with_object(a) {|e| raise 'die' } }
|
123
|
+
end
|
73
124
|
|
74
125
|
end
|
75
126
|
|
data/test/test-matchdata_each.rb
CHANGED
@@ -3,55 +3,55 @@ $VERBOSE = true
|
|
3
3
|
|
4
4
|
require_relative '../lib/mug/matchdata/each'
|
5
5
|
class Test_matchdata_each < Test::Unit::TestCase
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
6
|
+
def test__matchdata__each
|
7
|
+
str = 'a12b'
|
8
|
+
[
|
9
|
+
[/( \d)( \d)/x.match(str), %w[ 12 1 2 ]],
|
10
|
+
[/(?<x>\d)(?<y>\d)/x.match(str), %w[ 12 1 2 ]],
|
11
|
+
[/( \d)(?<y>\d)/x.match(str), %w[ 12 2 ]], # ):
|
12
|
+
].each do |m, x|
|
13
|
+
assert_equal( x, m.each.to_a )
|
14
|
+
end
|
15
|
+
end
|
16
|
+
def test__matchdata__each_capture
|
17
|
+
str = 'a12b'
|
18
|
+
[
|
19
|
+
[/( \d)( \d)/x.match(str), [[ 1 ,'1'],[ 2 ,'2']]],
|
20
|
+
[/(?<x>\d)(?<y>\d)/x.match(str), [['x','1'],['y','2']]],
|
21
|
+
[/( \d)(?<y>\d)/x.match(str), [ ['y','2']]], # ):
|
22
|
+
].each do |m, x|
|
23
|
+
assert_equal( x, m.each_capture.to_a )
|
24
|
+
end
|
25
|
+
end
|
26
|
+
def test__matchdata__each_named_capture
|
27
|
+
str = 'a12b'
|
28
|
+
[
|
29
|
+
[/( \d)( \d)/x.match(str), [ ]],
|
30
|
+
[/(?<x>\d)(?<y>\d)/x.match(str), [['x','1'],['y','2']]],
|
31
|
+
[/( \d)(?<y>\d)/x.match(str), [ ['y','2']]],
|
32
|
+
].each do |m, x|
|
33
|
+
assert_equal( x, m.each_named_capture.to_a )
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def test__matchdata__each_positional_capture
|
37
|
+
str = 'a12b'
|
38
|
+
[
|
39
|
+
[/( \d)( \d)/x.match(str), [[ 1, '1'],[ 2 ,'2']]],
|
40
|
+
[/(?<x>\d)(?<y>\d)/x.match(str), [ ]],
|
41
|
+
[/( \d)(?<y>\d)/x.match(str), [ ]], # D:
|
42
|
+
].each do |m, x|
|
43
|
+
assert_equal( x, m.each_positional_capture.to_a )
|
44
|
+
end
|
45
|
+
end
|
46
|
+
def test__matchdata__each_positional_capture2
|
47
|
+
str = 'a12b'
|
48
|
+
[
|
49
|
+
[/( \d)( \d)/x.match(str), [[ 1, '1'],[ 2 ,'2']]],
|
50
|
+
[/(?<x>\d)(?<y>\d)/x.match(str), [[ 1, '1'],[ 2 ,'2']]],
|
51
|
+
[/( \d)(?<y>\d)/x.match(str), [[ 1, '2']]], # ):
|
52
|
+
].each do |m, x|
|
53
|
+
assert_equal( x, m.each_positional_capture(include_names: true).to_a )
|
54
|
+
end
|
55
|
+
end
|
56
56
|
end
|
57
57
|
|