From 4454576cc9a5f0b86a57d786e5f24ded7254bda4 Mon Sep 17 00:00:00 2001 From: skandhas Date: Tue, 19 Mar 2013 10:56:11 +0800 Subject: add mruby-enum-ext --- mrbgems/mruby-enum-ext/test/enum.rb | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 mrbgems/mruby-enum-ext/test/enum.rb (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb new file mode 100644 index 000000000..e69de29bb -- cgit v1.2.3 From ab79941c513b9244a055f0e4338ba0bc78dce261 Mon Sep 17 00:00:00 2001 From: skandhas Date: Tue, 19 Mar 2013 11:16:33 +0800 Subject: add Enumerable#drop --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 21 +++++++++++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 10 ++++++++++ 2 files changed, 31 insertions(+) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index af0b5bd10..9c77577ca 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -1,3 +1,24 @@ +## +# Enumerable +# module Enumerable + ## + # call-seq: + # enum.drop(n) -> array + # + # Drops first n elements from enum, and returns rest elements + # in an array. + # + # a = [1, 2, 3, 4, 5, 0] + # a.drop(3) #=> [4, 5, 0] + + def drop(n) + raise TypeError, "expected Integer for 1st argument" unless n.kind_of? Integer + raise ArgumentError, "attempt to drop negative size" if n < 0 + + ary = [] + self.each {|e| n == 0 ? ary << e : n -= 1 } + ary + end end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index e69de29bb..76ab08f37 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -0,0 +1,10 @@ +## +# Enumerable(Ext) Test + +assert("Enumrable#drop") do + a = [1, 2, 3, 4, 5, 0] + + assert_equal a.drop(3), [4, 5, 0] + assert_equal a.drop(6), [] +end + -- cgit v1.2.3 From 9262a9f40ce81c7a4d1d94d989581b6c93012dba Mon Sep 17 00:00:00 2001 From: skandhas Date: Tue, 19 Mar 2013 14:07:23 +0800 Subject: add Enumerable#drop_while --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 20 ++++++++++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 5 +++++ 2 files changed, 25 insertions(+) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 9c77577ca..bae8f3865 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -20,5 +20,25 @@ module Enumerable self.each {|e| n == 0 ? ary << e : n -= 1 } ary end + + ## + # call-seq: + # enum.drop_while {|arr| block } -> array + # + # Drops elements up to, but not including, the first element for + # which the block returns +nil+ or +false+ and returns an array + # containing the remaining elements. + # + # a = [1, 2, 3, 4, 5, 0] + # a.drop_while {|i| i < 3 } #=> [3, 4, 5, 0] + + def drop_while(&block) + ary, state = [], false + self.each do |e| + state = true if !state and !block.call(e) + ary << e if state + end + ary + end end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 76ab08f37..9ab508a11 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -8,3 +8,8 @@ assert("Enumrable#drop") do assert_equal a.drop(6), [] end +assert("Enumrable#drop_while") do + a = [1, 2, 3, 4, 5, 0] + assert_equal a.drop_while {|i| i < 3 }, [3, 4, 5, 0] +end + -- cgit v1.2.3 From 79dd12ba0bb7825610bf894a07001e4b84d711de Mon Sep 17 00:00:00 2001 From: skandhas Date: Tue, 19 Mar 2013 14:23:07 +0800 Subject: add Enumerable#take, Enumerable#take_while --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 41 +++++++++++++++++++++++++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 10 +++++++++ 2 files changed, 51 insertions(+) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index bae8f3865..a9545da98 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -40,5 +40,46 @@ module Enumerable end ary end + + ## + # call-seq: + # enum.take(n) -> array + # + # Returns first n elements from enum. + # + # a = [1, 2, 3, 4, 5, 0] + # a.take(3) #=> [1, 2, 3] + + def take(n) + raise TypeError, "expected Integer for 1st argument" unless n.kind_of? Integer + raise ArgumentError, "attempt to take negative size" if n < 0 + + ary = [] + self.each do |e| + break if ary.size >= n + ary << e + end + ary + end + + ## + # call-seq: + # enum.take_while {|arr| block } -> array + # + # Passes elements to the block until the block returns +nil+ or +false+, + # then stops iterating and returns an array of all prior elements. + # + # + # a = [1, 2, 3, 4, 5, 0] + # a.take_while {|i| i < 3 } #=> [1, 2] + + def take_while(&block) + ary = [] + self.each do |e| + return ary unless block.call(e) + ary << e + end + ary + end end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 9ab508a11..0f7708db2 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -13,3 +13,13 @@ assert("Enumrable#drop_while") do assert_equal a.drop_while {|i| i < 3 }, [3, 4, 5, 0] end +assert("Enumrable#take") do + a = [1, 2, 3, 4, 5, 0] + assert_equal a.take(3), [1, 2, 3] +end + +assert("Enumrable#take_while") do + a = [1, 2, 3, 4, 5, 0] + assert_equal a.take_while {|i| i < 3 }, [1, 2] +end + -- cgit v1.2.3 From 854c61972f563a9f329afc7f71027e7c1572171c Mon Sep 17 00:00:00 2001 From: skandhas Date: Tue, 19 Mar 2013 14:25:03 +0800 Subject: fix spelling --- mrbgems/mruby-enum-ext/test/enum.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 0f7708db2..5fc9759ad 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -1,24 +1,24 @@ ## # Enumerable(Ext) Test -assert("Enumrable#drop") do +assert("Enumerable#drop") do a = [1, 2, 3, 4, 5, 0] assert_equal a.drop(3), [4, 5, 0] assert_equal a.drop(6), [] end -assert("Enumrable#drop_while") do +assert("Enumerable#drop_while") do a = [1, 2, 3, 4, 5, 0] assert_equal a.drop_while {|i| i < 3 }, [3, 4, 5, 0] end -assert("Enumrable#take") do +assert("Enumerable#take") do a = [1, 2, 3, 4, 5, 0] assert_equal a.take(3), [1, 2, 3] end -assert("Enumrable#take_while") do +assert("Enumerable#take_while") do a = [1, 2, 3, 4, 5, 0] assert_equal a.take_while {|i| i < 3 }, [1, 2] end -- cgit v1.2.3