From 56d4dab6edb91725ba5119c2714c39aada75997a Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 18 Dec 2025 08:29:32 +0900 Subject: [PATCH] test/syntax.rb: add find pattern tests Co-authored-by: Claude --- test/t/syntax.rb | 56 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/test/t/syntax.rb b/test/t/syntax.rb index ea5358278..45e29bd7e 100644 --- a/test/t/syntax.rb +++ b/test/t/syntax.rb @@ -1005,6 +1005,62 @@ assert('pattern matching - array patterns') do assert_equal 3, result end +assert('pattern matching - find patterns') do + # find pattern - element at end + case [1, 2, 3] + in [*pre, 3, *post] + assert_equal [1, 2], pre + assert_equal [], post + end + + # find pattern - element at beginning + case [1, 2, 3] + in [*pre, 1, *post] + assert_equal [], pre + assert_equal [2, 3], post + end + + # find pattern - element in middle + case [1, 2, 3, 4, 5] + in [*pre, 3, *post] + assert_equal [1, 2], pre + assert_equal [4, 5], post + end + + # find pattern - multiple middle elements + case [1, 2, 3, 4, 5] + in [*pre, 2, 3, *post] + assert_equal [1], pre + assert_equal [4, 5], post + end + + # find pattern - anonymous rest + result = case [1, 2, 3, 4, 5] + in [*, 3, *] + :found + else + :not_found + end + assert_equal :found, result + + # find pattern - no match + result = case [1, 2, 4, 5] + in [*pre, 3, *post] + :found + else + :not_found + end + assert_equal :not_found, result + + # find pattern with literal values + case [1, 2, 3, 4, 5] + in [*pre, 2, x, *post] + assert_equal [1], pre + assert_equal 3, x + assert_equal [4, 5], post + end +end + assert('pattern matching - hash patterns') do # simple hash pattern case {a: 1, b: 2}