From 031476a8531ffe3d51cc5899e9d19068774a13a7 Mon Sep 17 00:00:00 2001 From: buty4649 Date: Thu, 15 Feb 2024 14:55:38 +0900 Subject: [PATCH] mruby-enum-lazy: add grep_v method --- mrbgems/mruby-enum-lazy/mrblib/lazy.rb | 9 +++++++++ mrbgems/mruby-enum-lazy/test/lazy.rb | 6 ++++++ 2 files changed, 15 insertions(+) diff --git a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb index 2b50ff314..9ad2ccd2d 100644 --- a/mrbgems/mruby-enum-lazy/mrblib/lazy.rb +++ b/mrbgems/mruby-enum-lazy/mrblib/lazy.rb @@ -10,6 +10,7 @@ module Enumerable # - select find_all # - reject # - grep + # - grep_v # - drop # - drop_while # - take_while @@ -89,6 +90,14 @@ class Enumerator } end + def grep_v(pattern) + Lazy.new(self){|yielder, val| + unless pattern === val + yielder << val + end + } + end + def drop(n) dropped = 0 Lazy.new(self){|yielder, val| diff --git a/mrbgems/mruby-enum-lazy/test/lazy.rb b/mrbgems/mruby-enum-lazy/test/lazy.rb index e8277f3d3..5266f6f69 100644 --- a/mrbgems/mruby-enum-lazy/test/lazy.rb +++ b/mrbgems/mruby-enum-lazy/test/lazy.rb @@ -46,6 +46,12 @@ assert("Enumerator::Lazy#to_enum") do assert_equal [0*1, 2*3, 4*5, 6*7], lazy_enum.map { |a| a.first * a.last }.first(4) end +assert("Enumerator::Lazy#grep_v") do + lazy_grep_v = (0..).lazy.grep_v(2..4) + assert_kind_of Enumerator::Lazy, lazy_grep_v + assert_equal [0, 1, 5, 6], lazy_grep_v.first(4) +end + assert("Enumerator::Lazy#zip with cycle") do e1 = [1, 2, 3].cycle e2 = [:a, :b].cycle