Summary
Add PerlOnJava-owned replacement coverage for the portable behavior represented
by the Perl core tests:
perl5_t/t/bigmem/stack.t
perl5_t/t/bigmem/stack_over.t
Those upstream tests are now excluded from dev/tools/perl_test_runner.pl
because they require the native XS::APItest extension and directly test
Perl 5 C-level value-stack/MARK implementation details. They also require
multi-gigabyte allocations that are unsuitable for the PerlOnJava test suite.
The exclusion is intentional, but it must not remove all coverage of the
observable list, argument-stack, and bounded overflow behavior that is
portable across Perl implementations.
Current upstream-test classification
bigmem/stack.t depends on XS::APItest functions including wide_marks,
xs_items, eval_sv, and call_sv, and creates arrays with indices beyond
0x8000_0000. It exercises native mark-stack offsets, XS argument counts,
large list operations, split, repeat, tie, and related C implementation paths.
bigmem/stack_over.t also depends on XS::APItest and specifically checks
32-bit MARK behavior on a 64-bit native Perl build while allocating an array
with a 2-billion-element index.
These implementation-specific assertions cannot be ported verbatim to the
JVM or interpreter backend.
Proposed replacement coverage
Add focused tests under src/test/resources/unit for Perl-level behavior that
does not depend on XS, native pointers, or enormous allocations. At minimum,
cover:
- List-context propagation through nested calls and expressions.
- Correct item counts for bounded list construction, list assignment, and
list-returning functions.
- List slicing and negative indexes after a list-producing call.
split, join, grep, and repetition with bounded inputs.
- Argument counts observed by ordinary Perl subs through
@_, including
nested calls and calls returning multiple values.
eval and require paths that occur while a list/argument stack is active.
- Bounded recursive or deeply nested calls that verify the runtime reports a
controlled stack/resource failure rather than hanging or corrupting values.
Use sizes large enough to expose indexing and context bugs but small enough for
ordinary CI machines. Do not reproduce the 2-billion-element allocation or the
60/17 GB memory requirements.
Test requirements
- Validate every new Perl-level test with system Perl first.
- Require success on both JVM and interpreter backends.
- Keep the tests deterministic and independent of
XS::APItest.
- Do not weaken or modify the upstream Perl core tests.
- Preserve the runner exclusions for the two native-only upstream files.
- Add comments documenting which native
XS::APItest assertions are
intentionally not represented by the portable replacements.
Acceptance criteria
- A project-owned test suite covers the portable semantics listed above.
- The suite passes under system Perl, PerlOnJava JVM, and PerlOnJava
interpreter execution.
- The tests run within normal CI memory and time limits.
- The compatibility documentation or test-runner notes explain why the two
upstream XS tests remain excluded.
Summary
Add PerlOnJava-owned replacement coverage for the portable behavior represented
by the Perl core tests:
perl5_t/t/bigmem/stack.tperl5_t/t/bigmem/stack_over.tThose upstream tests are now excluded from
dev/tools/perl_test_runner.plbecause they require the native
XS::APItestextension and directly testPerl 5 C-level value-stack/MARK implementation details. They also require
multi-gigabyte allocations that are unsuitable for the PerlOnJava test suite.
The exclusion is intentional, but it must not remove all coverage of the
observable list, argument-stack, and bounded overflow behavior that is
portable across Perl implementations.
Current upstream-test classification
bigmem/stack.tdepends onXS::APItestfunctions includingwide_marks,xs_items,eval_sv, andcall_sv, and creates arrays with indices beyond0x8000_0000. It exercises native mark-stack offsets, XS argument counts,large list operations, split, repeat, tie, and related C implementation paths.
bigmem/stack_over.talso depends onXS::APItestand specifically checks32-bit MARK behavior on a 64-bit native Perl build while allocating an array
with a 2-billion-element index.
These implementation-specific assertions cannot be ported verbatim to the
JVM or interpreter backend.
Proposed replacement coverage
Add focused tests under
src/test/resources/unitfor Perl-level behavior thatdoes not depend on XS, native pointers, or enormous allocations. At minimum,
cover:
list-returning functions.
split,join,grep, and repetition with bounded inputs.@_, includingnested calls and calls returning multiple values.
evalandrequirepaths that occur while a list/argument stack is active.controlled stack/resource failure rather than hanging or corrupting values.
Use sizes large enough to expose indexing and context bugs but small enough for
ordinary CI machines. Do not reproduce the 2-billion-element allocation or the
60/17 GB memory requirements.
Test requirements
XS::APItest.XS::APItestassertions areintentionally not represented by the portable replacements.
Acceptance criteria
interpreter execution.
upstream XS tests remain excluded.