Hi,

On 10/24/2014 06:16 PM, Christian Bartolomaeus (via RT) wrote:
# New Ticket Created by  Christian Bartolomaeus
# Please include the string:  [perl #123048]
# in the subject line of all future correspondence about this issue.
# <URL: https://rt.perl.org/Ticket/Display.html?id=123048 >


Today I got a failure while spectesting for rakudo.jvm:

Failure summary:
S02-names-vars/perl.rakudo.jvm 84 - .perl on user-defined type roundtrips okay

I investigated and the test in question runs fine most of the time but fails 
only once in a while. The test in question is on the last line of following 
code:

# RT #61918
#?niecza skip ">>>Stub code executed"
{
     class RT61918 {
         has $.inst is rw;
         has $!priv;
         has $.string = 'krach';

         method init {
             $.inst = [ rand, rand ];
             $!priv = [ rand, rand ].perl;
         }
     }

     my $t1 = RT61918.new();
     my $t1_new = $t1.perl;
     $t1.init;
     my $t1_init = $t1.perl;

     ok $t1_new ne $t1_init, 'changing object changes .perl output';

     # TODO: more tests that show EVAL($t1_init) has the same guts as $t1.
     ok $t1_new ~~ /<< krach >>/, 'attribute value appears in .perl output';

     # RT #62002 -- validity of default .perl
     my $t2_init = EVAL($t1_init).perl;
     is $t1_init, $t2_init, '.perl on user-defined type roundtrips okay';
}

To me it looks as if "rand" (in method "init") sporadically generates values 
that don't survive the roundtrip on JVM. I tried to reproduce the failure and eventually came up 
with an example:

$ perl6-j -e 'my $a = 0.219947518065601987e0; say $a.perl; say 
EVAL($a.perl).perl'
0.21994751806560198e0
0.219947518065602e0

Moar and Parrot return less decimal places for $a.perl already:

$ perl6-m -e 'my $a = 0.219947518065601987e0; say $a.perl; say 
EVAL($a.perl).perl'
0.219947518065602e0
0.219947518065602e0

So .perl behaves differently in this case on JVM and Moar/Parrot.

Maybe I'm looking in the wrong direction, but the test failure should not 
occur. I'm going to fudge the test ('skip') for rakudo.jvm.

The better approach is to isolate the user-defined type roundtrips test from roundtripping floats with many digits.

So rather remove the rand's, replace them by fixed values, and have separate tests for round-tripping 0.21994751806560198e0. Then fudge that test for JVM as needed.

Cheers,
Moritz

Reply via email to