-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_basic.rb
108 lines (90 loc) · 2.8 KB
/
test_basic.rb
1
2
3
4
5
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
require_relative "enumerable.rb"
ary = [1, 2, 4, 2]
p ary.my_select(&:even?)
p ary.my_inject(:+) { |i| i }
p ary.my_select(&:even?)
identity = ->(i) { i }
f = ->(x) { x * 3 }
p ary.my_each(&identity)
p ary.my_select(&:even?)
p ary.my_map(&f)
p 'my_each_with_index'
hash = {}
%w[cat dog wombat].my_each_with_index do |item, index|
hash[item] = index
end
to_three = Enumerator.new do |y|
3.times do |x|
y << x
end
end
to_three_with_string = to_three.with_object('foo')
to_three_with_string.each do |x, string|
puts "#{string}: #{x}"
end
gt_eq_four = ->(word) { word.length >= 4 }
gt_three = ->(word) { word.length >= 3 }
gt_eq_fifty = ->(word) { word.length >= 50 }
eq_five = ->(word) { word.length == 5 }
p hash #=> {'cat'=>0, 'dog'=>1, 'wombat'=>2}
p 'my_all'
p %w[ant bear cat].my_all?(>_three) # => true
p %w[ant bear cat].my_all?(>_eq_four) # => false
p %w[ant bear cat].my_all?(>_eq_fifty) # => false
p %w[ant bear cat].my_all?(/t/) # => false
p %w[ant beart cat].my_all?(/t/) # => true
p [1, 1, 1].my_all?(1) # => true
p [1, 1, 1].my_all?(3) # => false
p [nil, true, 99].my_all? # => false
p [true, 'a'].my_all? # => true
p [].my_all? # => true
p [1, 1, 1].my_all?('S') # => false
p [1, 2i, 3.14].my_all?(Numeric) # => true
p [1, 2i, 3.14, 'a'].my_all?(Numeric) # => false
p 'my_none'
p %w[ant bear cat].my_none?(&eq_five) #=> true
p %w[ant bear cat].my_none?(>_eq_four) #=> false
p %w[ant bear cat].my_none?(/d/) #=> true
p [1, 3.14, 42].my_none?(Float) #=> false
p [].my_none? #=> true
p [nil].my_none? #=> true
p [nil, false].my_none? #=> true
p [nil, false, true].my_none? #=> false
p 'my_any'
p %w[ant bear cat].my_any?(>_three) #=> true
p %w[ant bear cat].my_any?(>_eq_four) #=> true
p %w[ant bear cat].my_any?(>_eq_fifty) #=> false
p %w[ant bear cat].my_any?(/d/) #=> false
p %w[ant bear cat].my_any?(/t/) #=> true
p ['ant', 'beart', 1].my_any?(/t/) #=> true
p [nil, true, 99].my_any?(Integer) #=> true
p [1, 3.14, 42].my_any?(String) #=> false
p [nil, true, 99].my_any? #=> true
p [nil, true, 99].my_any? #=> true
p [true, 'a'].my_any? #=> true
p [].my_any? #=> false
p [1, 1, 1].my_any?(1) #=> true
p [1, 1, 1].my_any?(3) #=> false
p [1, 1, 1].my_any?('S') #=> false
p [1, 2i, 3.14].my_any?(Numeric) #=> true
p [1, 2i, 3.14, 'a'].my_any?(Numeric) #=> true
p 'my_count'
p ary.my_count #=> 4
p ary.my_count(2) #=> 2
p ary.my_count(&:even?) #=> 3
p ary.my_count('A') #=> 0
p 'my_inject'
sigma = (5..10).my_inject(:+) #=> 45
p sigma
product = (5..10).my_inject(1, :*) #=> 151200 ##
p product
product = ->(acc, n) { acc * n }
product = (5..10).my_inject(1, &product) #=> 151200
p product
sigma = ->(sum, n) { sum + n }
sigma = (5..10).my_inject(&sigma) #=> 45 ## ->next
p sigma
p [1, 2, 3, 4].my_inject(:*) # 24
p [120, 30, 2].my_inject(:/) # 2
p [120, 30, 2].my_inject(:-) # 88
p multiply_els([2, 4, 5]) # 40