From 5277099a6e53f76d12528716fb2b360dfdf95b36 Mon Sep 17 00:00:00 2001 From: Josef Reidinger Date: Fri, 1 Feb 2013 15:52:33 +0000 Subject: [PATCH] implement filter builtin --- src/ruby/ycp/builtins.rb | 9 +++++++-- tests/ruby/builtins_test.rb | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/ruby/ycp/builtins.rb b/src/ruby/ycp/builtins.rb index 4aee6a69..5ae9e568 100644 --- a/src/ruby/ycp/builtins.rb +++ b/src/ruby/ycp/builtins.rb @@ -35,8 +35,13 @@ def self.change object, *params # - Filters a List # - Filter a Map - def self.filter object, block - raise "Builtin filter() is not implemented yet" + def self.filter object, &block + #TODO investigate break and continue with filter as traverse workflow is different for ruby + if object.is_a?(Array) || object.is_a?(Hash) + object.select &block + else + return nil + end end # find() YCP built-in diff --git a/tests/ruby/builtins_test.rb b/tests/ruby/builtins_test.rb index 247f544a..5d65805d 100644 --- a/tests/ruby/builtins_test.rb +++ b/tests/ruby/builtins_test.rb @@ -294,4 +294,18 @@ def test_lookup assert_equal 1, YCP::Builtins.lookup({"a" => 1}, "a", 2) assert_equal 2, YCP::Builtins.lookup({"a" => 1}, "b", 2) end + + def test_filter_list + assert_equal nil, YCP::Builtins.filter(nil) + assert_equal [2,3,4], YCP::Builtins.filter([2,3,4]) {|i| next true } + assert_equal [4], YCP::Builtins.filter([2,3,4]){ |i| next i>3 } + assert_equal [], YCP::Builtins.filter([2,3,4]){ |i| next i>4 } + end + + def test_filter_map + test_hash = {2=>3,3=>4} + assert_equal Hash[2=>3,3=>4], YCP::Builtins.filter(test_hash) {|i,j| next true } + assert_equal Hash[3=>4], YCP::Builtins.filter(test_hash){ |i,j| next i>2 } + assert_equal Hash.new, YCP::Builtins.filter(test_hash){ |i,j| next i>4 } + end end