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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mug/and-or.rb +26 -26
  3. data/lib/mug/any-and-all.rb +16 -16
  4. data/lib/mug/apply.rb +37 -37
  5. data/lib/mug/array/extend.rb +43 -43
  6. data/lib/mug/array/minus.rb +32 -32
  7. data/lib/mug/bool.rb +71 -71
  8. data/lib/mug/clamp.rb +35 -35
  9. data/lib/mug/counts.rb +27 -27
  10. data/lib/mug/fragile-method-chain.rb +42 -42
  11. data/lib/mug/hash/map.rb +75 -75
  12. data/lib/mug/hash/operations.rb +47 -47
  13. data/lib/mug/iterator/for.rb +7 -7
  14. data/lib/mug/iterator/method.rb +7 -7
  15. data/lib/mug/iterator_c.rb +14 -14
  16. data/lib/mug/loop-with.rb +30 -29
  17. data/lib/mug/matchdata/each.rb +40 -40
  18. data/lib/mug/matchdata/hash.rb +29 -29
  19. data/lib/mug/maybe.rb +33 -33
  20. data/lib/mug/negativity.rb +20 -20
  21. data/lib/mug/not.rb +6 -6
  22. data/lib/mug/rexproc.rb +6 -6
  23. data/lib/mug/self.rb +31 -31
  24. data/lib/mug/to_h.rb +2 -2
  25. data/lib/mug/top.rb +100 -100
  26. data/test/test-and-or.rb +32 -32
  27. data/test/test-any-and-all.rb +19 -19
  28. data/test/test-apply.rb +47 -47
  29. data/test/test-array-extend.rb +54 -54
  30. data/test/test-array-minus.rb +11 -11
  31. data/test/test-bool.rb +48 -48
  32. data/test/test-clamp.rb +42 -42
  33. data/test/test-counts.rb +21 -21
  34. data/test/test-fragile-method-chain.rb +56 -56
  35. data/test/test-hashmap.rb +14 -14
  36. data/test/test-hashop.rb +47 -47
  37. data/test/test-iterator-for.rb +12 -12
  38. data/test/test-loop-with.rb +117 -66
  39. data/test/test-matchdata_each.rb +50 -50
  40. data/test/test-matchdata_hash.rb +40 -40
  41. data/test/test-maybe.rb +76 -76
  42. data/test/test-negativity.rb +40 -40
  43. data/test/test-not.rb +53 -53
  44. data/test/test-rexproc.rb +6 -6
  45. data/test/test-self.rb +21 -21
  46. data/test/test-tau.rb +12 -12
  47. data/test/test-top.rb +100 -100
  48. metadata +4 -4
@@ -2,23 +2,23 @@ require 'test/unit'
2
2
  $VERBOSE = true
3
3
 
4
4
  if RUBY_VERSION.to_f < 1.9
5
- class Symbol
6
- def next
7
- to_s.next.to_sym
8
- end
9
- end
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
- 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
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
 
@@ -3,60 +3,60 @@ $VERBOSE = true
3
3
 
4
4
  $coercable = Object.new
5
5
  def $coercable.to_h
6
- {:a=>0, :z=>99}
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
- 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 = {}
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
- # 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}
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
- # 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}
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
- # Objects with .to_h
55
- assert_nothing_raised { h << $coercable }
56
- assert_equal h, {:a=>0,:b=>2,:c=>3,:d=>4,:z=>99}
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
- # Failure
59
- assert_raise(ArgumentError) { h << Object.new }
60
- end
58
+ # Failure
59
+ assert_raise(ArgumentError) { h << Object.new }
60
+ end
61
61
  end
62
62
 
@@ -3,16 +3,16 @@ $VERBOSE = true
3
3
 
4
4
  require_relative '../lib/mug/iterator/for'
5
5
  class IterForTest < Test::Unit::TestCase
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
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
@@ -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
- 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
- throw 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, x )
21
- assert_equal( 2, y )
22
- end
23
- def test_loop_with_index__block_offset
24
- a = []
25
- b = []
26
- x = loop_with_index(10) do |i|
27
- a << i
28
- break if a.length >= 3
29
- end
30
- y = loop_with_index(10) do |i|
31
- b << i
32
- throw StopIteration if b.length >= 3
33
- end
34
- assert_equal( [10,11,12], a )
35
- assert_equal( [10,11,12], b )
36
- assert_equal( 12, x )
37
- assert_equal( 12, y )
38
- end
39
- def test_loop_with_index__enum
40
- a = []
41
- b = []
42
- enum = loop_with_index
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
- throw 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, x )
54
- assert_equal( 2, y )
55
- end
56
- def test_loop_with_index__enum_offset
57
- a = []
58
- b = []
59
- enum = loop_with_index(10)
60
- x = enum.each do |i|
61
- a << i
62
- break if a.length >= 3
63
- end
64
- y = enum.each do |i|
65
- b << i
66
- throw StopIteration if b.length >= 3
67
- end
68
- assert_equal( [10,11,12], a )
69
- assert_equal( [10,11,12], b )
70
- assert_equal( 12, x )
71
- assert_equal( 12, y )
72
- end
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
 
@@ -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
- 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
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