summaryrefslogtreecommitdiff
path: root/test/ruby
AgeCommit message (Collapse)Author
2025-11-14ZJIT: Add tests for sending to methods with keyword args (#15183)Randy Stauner
2025-11-14[Feature #21572] Syntax error at capture in alternation patternNobuyoshi Nakada
Should fail even with `-c` option.
2025-11-14Adapt to Unicode directory changesMari Imaizumi
https://www.unicode.org/Public/emoji/ReadMe.txt > This directory contains data files for versions 1.0 to 16.0 of Unicode Emoji. > Starting with Unicode 17.0.0, the data files for Unicode Emoji are published in > https://www.unicode.org/Public/<version>/emoji/ > together with the related files in > https://www.unicode.org/Public/<version>/ucd/emoji/
2025-11-13Add size checks to Range#to_set and Enumerator#to_set [Bug #21654]Akinori Musha
These two class are most common sources of infinite sequences. This change should effectively prevent accidental infinite loops when calling to_set on them. [Bug #21513]
2025-11-13Revert "[Bug #21513] Raise on converting endless range to set"Akinori Musha
This reverts commit d4020dd5faf28486123853e7f00c36139fc07793, which introduced performance regression for objects like ActiveRecord::Relation by calling the costly #size method on them.
2025-11-13[Bug #21683] Respect reading encoding at `each_codepoint`Nobuyoshi Nakada
2025-11-12[Bug #21680] Fix (base**power_of_two).digits(base) bug (#15144)tomoya ishida
Fix wrong condition in base multiplying loop.
2025-11-11test_ractor.rb: Delete unnecessary GC.stress fiddlingAlan Wu
assert_ractor() runs in a subprocess.
2025-11-11[Bug #21666] Get rid of use of unspecified valuesNobuyoshi Nakada
2025-11-10ZJIT: Set cfp->sp on leaf calls with GC (#15137)Takashi Kokubun
Co-authored-by: Randy Stauner <randy@r4s6.net>
2025-11-10Add test for [Bug #21265]Alan Wu
The crash was fixed by a4dff09be79b52288a47658964d25e5aa84fc960 ("Fix resolving refined module-defined method"). I had a patch for this around for a few months but never merged it. Oops!
2025-11-11Revert "ns_subclasses refcount accesses need to be atomic (#15083)" (#15138)Luke Gruber
This reverts commit 2998c8d6b99ec49925ebea42198b29c3e27b34a7. We need to find a better way to fix this bug. Even with this refcount change, errors were still being seen in CI. For now we need to remove this failing test.
2025-11-09[Bug #21673] Fix resolving refined module-defined methodNobuyoshi Nakada
A method defined in a module has no `defined_class`, use the ICLASS for it as the `defined_class`.
2025-11-07Don't modify fstrings in rb_str_tmp_frozen_no_embed_acquireJohn Hawthorn
[Bug #21671]
2025-11-07Depricate IO operation with `|`Nobuyoshi Nakada
2025-11-07Apply renaming to Ruby::Box in test codesSatoshi Tagomori
2025-11-07Re-rename files wrongly renamedSatoshi Tagomori
2025-11-07rename namespace.c (and others) to box.cSatoshi Tagomori
2025-11-07Add namespace tests about global variables, toplevel methodsSatoshi Tagomori
2025-11-06ns_subclasses refcount accesses need to be atomic (#15083)Luke Gruber
We were seeing errors like: ``` * thread #8, stop reason = EXC_BAD_ACCESS (code=1, address=0x803) * frame #0: 0x00000001001fe944 ruby`rb_st_lookup(tab=0x00000000000007fb, key=1, value=0x00000001305b7490) at st.c:1066:22 frame #1: 0x000000010002d658 ruby`remove_class_from_subclasses [inlined] class_get_subclasses_for_ns(tbl=0x00000000000007fb, ns_id=1) at class.c:604:9 frame #2: 0x000000010002d650 ruby`remove_class_from_subclasses(tbl=0x00000000000007fb, ns_id=1, klass=4754039232) at class.c:620:34 frame #3: 0x000000010002c8a8 ruby`rb_class_classext_free_subclasses(ext=0x000000011b5ce1d8, klass=4754039232, replacing=<unavailable>) at class.c:700:9 frame #4: 0x000000010002c760 ruby`rb_class_classext_free(klass=4754039232, ext=0x000000011b5ce1d8, is_prime=true) at class.c:105:5 frame #5: 0x00000001000e770c ruby`classext_free(ext=<unavailable>, is_prime=<unavailable>, namespace=<unavailable>, arg=<unavailable>) at gc.c:1231:5 [artificial] frame #6: 0x000000010002d178 ruby`rb_class_classext_foreach(klass=<unavailable>, func=(ruby`classext_free at gc.c:1228), arg=0x00000001305b75c0) at class.c:518:5 frame #7: 0x00000001000e745c ruby`rb_gc_obj_free(objspace=0x000000012500c400, obj=4754039232) at gc.c:1282:9 frame #8: 0x00000001000e70d4 ruby`gc_sweep_plane(objspace=0x000000012500c400, heap=<unavailable>, p=4754039232, bitset=4095, ctx=0x00000001305b76e8) at default.c:3482:21 frame #9: 0x00000001000e6e9c ruby`gc_sweep_page(objspace=0x000000012500c400, heap=0x000000012500c540, ctx=0x00000001305b76e8) at default.c:3567:13 frame #10: 0x00000001000e51d0 ruby`gc_sweep_step(objspace=0x000000012500c400, heap=0x000000012500c540) at default.c:3848:9 frame #11: 0x00000001000e1880 ruby`gc_continue [inlined] gc_sweep_continue(objspace=0x000000012500c400, sweep_heap=0x000000012500c540) at default.c:3931:13 frame #12: 0x00000001000e1754 ruby`gc_continue(objspace=0x000000012500c400, heap=0x000000012500c540) at default.c:2037:9 frame #13: 0x00000001000e10bc ruby`newobj_cache_miss [inlined] heap_prepare(objspace=0x000000012500c400, heap=0x000000012500c540) at default.c:2056:5 frame #14: 0x00000001000e1074 ruby`newobj_cache_miss [inlined] heap_next_free_page(objspace=0x000000012500c400, heap=0x000000012500c540) at default.c:2280:9 frame #15: 0x00000001000e106c ruby`newobj_cache_miss(objspace=0x000000012500c400, cache=0x0000600001b00300, heap_idx=2, vm_locked=false) at default.c:2387:38 frame #16: 0x00000001000e0d28 ruby`newobj_alloc(objspace=<unavailable>, cache=<unavailable>, heap_idx=<unavailable>, vm_locked=<unavailable>) at default.c:2411:15 [artificial] frame #17: 0x00000001000d7214 ruby`newobj_of [inlined] rb_gc_impl_new_obj(objspace_ptr=<unavailable>, cache_ptr=<unavailable>, klass=<unavailable>, flags=<unavailable>, wb_protected=<unavailable>, alloc_size=<unavailable>) at default.c:2490:15 frame #18: 0x00000001000d719c ruby`newobj_of(cr=<unavailable>, klass=4313971728, flags=258, wb_protected=<unavailable>, size=<unavailable>) at gc.c:995:17 frame #19: 0x00000001000d73ec ruby`rb_wb_protected_newobj_of(ec=<unavailable>, klass=<unavailable>, flags=<unavailable>, size=<unavailable>) at gc.c:1044:12 [artificial] frame #20: 0x0000000100032d34 ruby`class_alloc0(type=<unavailable>, klass=4313971728, namespaceable=<unavailable>) at class.c:803:5 ```
2025-11-05Extend timeout for unstable testsTakashi Kokubun
https://github.com/ruby/ruby/actions/runs/19111531630/job/54609629054
2025-11-04ZJIT: Add test to reproduce binarytrees crash (#15054)Randy Stauner
2025-11-04Release VM lock before running finalizers (#15050)Luke Gruber
We shouldn't run any ruby code with the VM lock held.
2025-11-03ZJIT: Inline String#bytesize (#15033)Max Leopold
Inline the `String#bytesize` function and remove the C call.
2025-11-03ZJIT: Implement include_p for opt_(new|dup)array_send YARV insns (#14885)Randy Stauner
These just call to the C functions that do the optimized test but this avoids the side exit. See https://github.com/ruby/ruby/pull/12123 for the original CRuby/YJIT implementation.
2025-11-03pend on Windows for timeoutsSatoshi Tagomori
2025-11-03Use CFUNC namespace only for IFUNC frames, its behavior should be unchangedSatoshi Tagomori
2025-11-03Add flag to ignore EXPERIMENTAL warningsSatoshi Tagomori
2025-11-03No need to call rb_define_class/module_under_idSatoshi Tagomori
Classes/modules defined in a namespace are defined under ::Object as usual (as without namespaces), and it'll be set into the const_tbl of ::Object. In namespaces, namespace objects' const_tbl is equal to the one of ::Object. So constants of ::Object are just equal to constants of the namespace. That means, top level classes/modules in a namespace can be referred as namespace::KlassName without calling rb_define_class_under_id().
2025-11-03Add basic namespace testsSatoshi Tagomori
2025-11-01Fix memory leak in String#encode when StringValue raisesPeter Zhu
The following script leaks memory: 10.times do 100_000.times do "\ufffd".encode(Encoding::US_ASCII, fallback: proc { Object.new }) rescue end puts `ps -o rss= -p #{$$}` end Before: 450244 887748 1325124 1762756 2200260 2637508 3075012 3512516 3950020 4387524 After: 12236 12364 12748 13004 13388 13516 13772 13772 13772 13772
2025-10-31Fix initialization of the table for quick searchK.Takata
This fixes k-takata/Onigmo#120. The commit k-takata/Onigmo@9c13de8d0684ebde97e3709d7693997c81ca374b was insufficient. https://github.com/k-takata/Onigmo/commit/1de602ddff140d91419e3f86dd35c81d7bd2d8e7
2025-10-31[Bug #13671] Fix that "ss" in look-behind causes syntax errorK.Takata
Fixes k-takata/Onigmo#92. This fix was ported from oniguruma: https://github.com/kkos/oniguruma/commit/257082dac8c6019198b56324012f0bd1830ff4ba https://github.com/k-takata/Onigmo/commit/b1a5445fbeba97b3e94a733c2ce11c033453af73
2025-10-29Fix memory leak in String#encode when fallback too bigPeter Zhu
The following script leaks memory: 10.times do 100_000.times do "\ufffd".encode(Encoding::US_ASCII, fallback: proc { "\uffee" }) rescue end puts `ps -o rss= -p #{$$}` end Before: 451196 889596 1328252 1766524 2204668 2643068 3081724 3520124 3958524 4396796 After: 12800 13056 13184 13312 13312 13312 13312 13312 13312 13312
2025-10-29Use the given `TMPDIR`Nobuyoshi Nakada
2025-10-29Clean extension libraries copied for the namespaceNobuyoshi Nakada
2025-10-28Fix flaky require testLuke Gruber
2025-10-28Add a custom error class to TestString#test_encode_fallback_raise_memory_leakPeter Zhu
This prevents a generic RuntimeError from being raised so we can ensure that the correct error is being rescued.
2025-10-28Fix TestString#test_encode_fallback_raise_memory_leakPeter Zhu
The method and aref cases need to accept a parameter.
2025-10-28ZJIT: Call test again after profiling itTakashi Kokubun
It's a call_threshold: 2 test https://github.com/ruby/ruby/pull/14933#discussion_r2469731499
2025-10-28ZJIT: Specialize Array#pop for no argument case (#14933)Aiden Fox Ivey
Fixes https://github.com/Shopify/ruby/issues/814 This change specializes the case of calling `Array#pop` on a non frozen array with no arguments. `Array#pop` exists in the non-inlined C function list in the ZJIT SFR performance burndown list. If in the future it is helpful, this patch could be extended to support the case where an argument is provided, but this initial work seeks to elide the ruby frame normally pushed in the case of `Array#pop` without an argument.
2025-10-27Correctly compile splats in for-loop index in prismEarlopain
Fixes [Bug #21648] This is a followup to https://github.com/ruby/ruby/pull/13597. The added test passed but didn't emit the same instructions. This also handles bare splats and aligns instructions for all cases
2025-10-27Fix segfault when moving nested objects between ractors during GCJoshua Young
Fixes a segmentation fault when moving nested objects between ractors with GC stress enabled and YJIT. The issue is a timing problem: `move_enter` allocates new object shells but leaves their contents uninitialized until `move_leave` copies the actual data. If GC runs between these steps (which GC stress makes likely), it tries to follow what appear to be object pointers but are actually uninitialized memory, encountering null or invalid addresses. The fix zero-initializes the object contents immediately after allocation in `move_enter`, ensuring the GC finds safe null pointers instead of garbage data. The crash reproduced most consistently with nested hashes and YJIT, likely because nested structures create multiple uninitialized objects simultaneously while YJIT's memory usage increases the probability of GC triggering during moves.
2025-10-26Add several very basic tests to be run with RUBY_NAMESPACE=1 on CISatoshi Tagomori
To detect breaking namespace features on CI.
2025-10-25Remove automatically set environment variablesNobuyoshi Nakada
Probably since macOS Runner Image Version 20251020.XXXX, spawned processes initialize `TMPDIR` environment variable under the hood.
2025-10-25Add configured environment variables firstNobuyoshi Nakada
And `LD_PRELOAD` is set to `PRELOADENV` on Linux.
2025-10-24Fix memory leak of transcoding when fallback raisesPeter Zhu
When the fallback function in transcode_loop raises, it will leak the memory in rb_econv_t. The following script reproduces the leak: 10.times do 100_000.times do "\ufffd".encode(Encoding::US_ASCII, fallback: proc { raise }) rescue end puts `ps -o rss= -p #{$$}` end Before: 451196 889980 1328508 1767676 2206460 2645372 3083900 3522428 3960956 4399484 After: 12508 12636 12892 12892 13148 13404 13532 13788 13916 13916
2025-10-23ZJIT: Add tests for non-leaf classvar get and set (#14924)Daniel Colson
This commit adds tests that raise on `getclassvariable` and `setclassvariable` to exercise the non-leaf cases as suggested in https://github.com/ruby/ruby/pull/14918#discussion_r2453804603
2025-10-22ZJIT: Implement classvar get and set (#14918)Daniel Colson
https://github.com/Shopify/ruby/issues/649 Class vars are a bit more involved than ivars, since we need to get the class from the cref, so this calls out to `rb_vm_getclassvariable` and `rb_vm_setclassvariable` like YJIT.
2025-10-22ZJIT: Inline Kernel#block_given? (#14914)Max Bernstein
Fix https://github.com/Shopify/ruby/issues/832