summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-enum-ext
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-enum-ext')
-rw-r--r--mrbgems/mruby-enum-ext/mrblib/enum.rb18
-rw-r--r--mrbgems/mruby-enum-ext/test/enum.rb7
2 files changed, 25 insertions, 0 deletions
diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb
index 90f321596..1ca62b673 100644
--- a/mrbgems/mruby-enum-ext/mrblib/enum.rb
+++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb
@@ -208,4 +208,22 @@ module Enumerable
a
end
end
+
+ def count(v=nil, &block)
+ count = 0
+ if block
+ self.each do |e|
+ count += 1 if block.call(e)
+ end
+ else
+ if v == nil
+ self.each { count += 1 }
+ else
+ self.each do |e|
+ count += 1 if e == v
+ end
+ end
+ end
+ count
+ end
end
diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb
index a14d7f492..065ef7f5f 100644
--- a/mrbgems/mruby-enum-ext/test/enum.rb
+++ b/mrbgems/mruby-enum-ext/test/enum.rb
@@ -53,3 +53,10 @@ assert("Enumerable#first") do
assert_equal [1, 2, 3], a.first(10)
assert_nil [].first
end
+
+assert("Enumerable#count") do
+ a = [1, 2, 4, 2]
+ assert_equal 4, a.count
+ assert_equal 2, a.count(2)
+ assert_equal 3, a.count{|x| x % 2 == 0}
+end